Shop OBEX P1 Docs P2 Docs Learn Events
MAX7456 - Anyone used it with Basic Stamp? Practical code example needed. — Parallax Forums

MAX7456 - Anyone used it with Basic Stamp? Practical code example needed.

CuriousOneCuriousOne Posts: 931
edited 2013-05-29 17:59 in BASIC Stamp
Hello. I'm relatively new to basic stamp. I bought some basic stamps kits and studying everything slowly. Since I'm quite good in electronics, I'd like to do some practical examples. For that purpose, I've bought MAX7456 IC, built 24DIP adapter for it, including crystalls/etc.

I've searched this forum, everyone discusses the chip itself, but no code was shown. I don't care how much this chip consumes or how nice propeller is for video overlaying. I have basic stamp and I'd like to get maximum juice from it. So I'll be very grateful, if someone provides a simple basic code for MAX7456 interfacing. As I read the book, this chip is SPI driven, and SHIFTOUT command to be used. However, I see code in book, I see instructions to be sent in the IC manual, but I can't "connect" this two knowledge together. So, any help will be appreciated.

Sincerely,

Alex
«1

Comments

  • Mike GreenMike Green Posts: 23,101
    edited 2012-08-29 10:14
    This is a complicated chip (the MAX7456) and you will not find a "simple basic code" for interfacing. On page 21 of the Maxim datasheet, they show some typical read / write accesses to the chip's registers. An 8-bit write operation would look like
    low cs   ' start transaction
    shiftout sdin, sclk, msbfirst, [ register, data ]   ' send register, then 8-bit data
    high cs   ' end of transaction
    
    An 8-bit read operation would look like
    low cs   ' start transaction
    shiftout sdin, sclk, msbfirst, [ register+$80 ]   ' send register and indicate read operation
    shiftin sdout, sclk, msbpre, [ data ]   ' receive 8-bit data
    high cs   ' end of transaction
    
    You will have to understand the datasheet for the MAX7456 and how to get it to do what you want. Remember that these are model statements. You'll need the appropriate I/O pin and variable declarations as well.

    There's a good reason why there are worked out simpler examples of SPI interfacing and other basic functions of the Stamps. The "What's a Microcontroller?" tutorial and StampWorks Manual are good starting points for learning the ins and outs of Stamp programming and the use of various kinds of hardware with the Stamps. The Nuts and Volts Columns also have good worked examples of more complex projects.
  • CuriousOneCuriousOne Posts: 931
    edited 2012-08-29 22:39
    Thanks a lot. But I think, I was a bit wrong when asking what I need. I'll give it another try.

    Say, we have 1602 LCD. To use with basic stamp, we have to issue set of specific commands via LCDCMD statement, to properly initialize and set the 1602 module.

    So, I'm looking for something similar, but for MAX7456. For example, sparkfun supplies a C code, initialization section from which looks like this (copied just part):
    	//reset
    	PORTB &= ~(1<<RESET);
    	delay_ms(1000);
    	PORTB |= (1<<RESET);
    	delay_ms(1000);
    SPI_write(0,0x08);	//enable display of OSD image
    	delay_ms(1);
    //automatic black level control, have to read, augment and rewrite
    	//The data sheet is rather specific about this
    	x = SPI_read(0xEC);	
    	delay_ms(1);
    	x &= 0xEF;
    	SPI_write(0x6C,x);
    	delay_ms(1);
     SPI_write(0x04,0);//DMM set to 0
     x = 25;
     SPI_write(0x05,0x01);//DMAH
     SPI_write(0x06,x);//DMAL
    	SPI_write(0x07,0x1D);
    
  • SapphireSapphire Posts: 496
    edited 2012-09-12 21:04
    CuriousOne,

    I have some code you may find useful. This is an interesting chip and I use it on some of my projects. But one peculiarity is the character set: it's not ASCII. So unless you want to write a translation table for your data and text, you need to reprogram the character set. Fortunately this is easy to do. I have attached 3 programs to do this, and they serve as examples on how to interface to this chip. There are many more things you can do, so study the data sheet register tables to see what is possible. If you decide to use these programs, you need to run them in this order: Max7456_move, Max7456_prog and then Max7456_test.

    The Max7456_move program moves as many characters as possible into their proper ASCII positions and overwrites all of the Asian characters.

    The Max7456_prog program then writes all the missing ASCII characters. When done, $20-$7F are the proper ASCII characters except $60, for which a degree symbol replaces the grave accent. The original character set is saved in $80-$CD in case you want to restore it. The uppermost graphic characters $EC-$FF are not altered.

    The Max7456_test program puts some static test data on the screen. In my production program this information is periodically updated. You can modify the code according to your needs.

    A word of caution: Don't run the Max7456_move program more than once, or you'll lose some of the ASCII characters and then you’ll have to recreate them. There is no way to restore them once they are overwritten. The Max7456_prog program can be run whenever you want to update or change a character. Just change the DATA statements to meet your needs. I highly recommend you have the video output connected to a monitor and observe the character moves and programs as they run. You are prompted through the DEBUG port at each step of the move and programming process. Press "Y" or "y" to continue, anything else to stop.

    All these programs use only 4 of the I/O lines on the Max7456 chip. They are /CS, SCLK, SDIN and SDOUT. The pin assignments are shown at the top of each program. Change them according to your setup. Since the BS2 is too slow to write during the vertical blanking interval, I do not use /VSYNC or any of the other I/O pins. RESET is tied to DVDD.
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-23 03:09
    Thank you very much!

    Actually, I forgot to look into this thread untill now. Now I assembled the circuit and everything works just fine!

    Just a little problem, it seems that I've terminated the _move.bs2 too early, so not all characters were moved, for example, now I have "V" letter instead of spacebar and there are no small letters. Any way to fix this?
  • SapphireSapphire Posts: 496
    edited 2013-05-23 15:06
    If you have a "V" where there should be a space, then you probably stopped the move program after the initial copy, and no other characters were moved. It should be safe to run it again, entering "Y" to each prompt.

    However, to be sure, run the Max7456_move to get the current characters on the video screen (answer "Y" twice, and "N" to Write done. Move charcaters?) to see what moved and what didn't. Take a picture of the video screen, and attach it to your reply and I might be able to tell you if it is okay to proceed, or if you need to comment out some of the DATA statements.

    You can look at the DATA statements in the Max7456_move to see where you stopped. I move the characters in groups. Comment out all the DATA statements at the end of the program for the characters that were moved, and put MT in front of the next (uncommented) DATA statement. Run your modified move program, and it should pick up where you left off and finish moving the characters.
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-24 00:16
    howitlooks.jpg

    Thanks a lot, here it is.

    Also, I've studied the .mcm font file, created by max 7456EVKIT software. As it appears, characters start at 0 position, right? so to get correct mapping, we need to shift them by 32?
    912 x 684 - 157K
  • SapphireSapphire Posts: 496
    edited 2013-05-24 08:53
    That's correct. The .mcm file and the EVKIT help to show the character positions. For some reason, they started with space at zero, and then numbers, letters, etc.

    What I don't know is why there are characters on your screen that aren't in the default set, like the arrows in rows 7 and 8. They aren't part of the default chip font, and I don't progam them. Is it possible this chip was used before by someone else who added these characters? If so, then my programs won't work for you because many of the characters are in the wrong positions and there are no lower case letters.

    At this point, it may be best to just completely overwrite the font table with the font you want. You'll have to write a program to send each character's bit-map. That's tedious, but there are examples in my Max7456prog program on how to make some of them with DATA statements. My guess is you will have to take the .mcm file on you PC and convert it to DATA statements for the BS2 to send to the chip. It will be a lot of work. I've attached an ascii_only.txt file that so you can see what it should look like (rename it .mcm to load into the EVKIT).
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-24 12:46
    Thanks. I bought this chip from chinese seller at ebay, since price was nice. It was definetly new, no solder on the pins, so I suspect that this was either from batch specially programmed by maxim for certain customer, or this may be counterfeit ic. Thanks for the file, now Im on tablet so no mcm editor here, but as it seems, your file is the correct one, with characters shifted by 32. I will have a closer look tmorrow.
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-25 02:18
    Since inputting all code by hand is way too much time consuming, I've decided to write a parser, using visual studio express, which will process the source .mcm file and generate BS2 code according to your samples. I've looked into your code and if I properly understood, the code:
        DATA $54,$14,$15,$52,$82,$85,$52,$82,$85,$42,$82,$81,$2A,$AA,$A8,$2A,$AA,$A8,$42,$82,$81,$52,$82,$85 ' #
        DATA $42,$82,$81,$2A,$AA,$A8,$2A,$AA,$A8,$42,$82,$81,$52,$82,$85,$52,$82,$85,$54,$14,$15,$55,$55,$55
    

    Is a result of reading 48 lines from .mcm file, and binary code from each line is converted into hex code, right?
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-25 08:23
    I wrote a program, that reads the .MCM file and converts it into BS2 code, but I found some inconsistencies:

    1. Your code shows 48 bytes per char, when according to datasheet, there should be 3x18=54 bytes per char.
    2. But if we count number of lines in sample .mcm files provided, it is 16384 (16385 with leading "MAX7456 text") considering we have 256 chars total, this translates 16384/256=64 lines per char.

    I'm very confused....
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-25 08:57
    Anyways, here's sample output from my program, it creates DATA entry for each char, and line ends with char symbol and it's code:
    DATA %01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101 '    32 
    DATA %01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01000000,%01010101,%01010101,%00101000,%01010101,%01010100,%10101000,%01010101,%01010010,%10101000,%01010101,%01010010,%10101000,%01010101,%01010000,%00101000,%01010101,%01010101,%00101000,%01010101,%01010101,%00101000,%01010101,%01010101,%00101000,%01010101,%01010101,%00101000,%01010101,%01010101,%00101000,%01010101,%01010101,%00101000,%01010101,%01010000,%00101000,%00000101,%01010010,%10101010,%10000101,%01010010,%10101010,%10000101,%01010000,%00000000,%00000101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101 ' !  33 
    DATA %01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010100,%00000000,%00010101,%01010010,%10101010,%10000101,%01001010,%10101010,%10100001,%00101010,%10000000,%10101000,%00101010,%00010101,%00101000,%01000000,%01010101,%00101000,%01010101,%01010100,%10101000,%01010101,%01010010,%10100001,%01010101,%01001010,%10000101,%01010101,%00101010,%00010101,%01010100,%10101000,%01010101,%01010010,%10100001,%01010101,%01001010,%10000000,%00000000,%00101010,%10101010,%10101000,%00101010,%10101010,%10101000,%00000000,%00000000,%00000000,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101 ' "  34 
    
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-25 09:00
    And anyways, it does not fits - "can not compile, source code exceeds 64kbytes". Seems like it will not be possible to download all chars in one shot, need to divide into parts...
  • SapphireSapphire Posts: 496
    edited 2013-05-25 09:13
    The reason I have only 48 bytes per character is because all characters don't use the top two rows (6 bytes) so I know they are the same $55 value and just write that to save space. I used hex because it's more compact.

    You may need more than one program to write them all if the DATA is too much, but that's not a problem because you're only going to use it once and only the DATA statements and starting point change. And if you're using my .mcm file, you only need to write 96 of the 256 characters. All the rest are blank which you could do in a loop first.
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-25 09:48
    I decided to do own .mcm which will start from it's beginning, but starting corresponding ASCII char will be #32.

    Regarding the characters, ok, yours does not use all rows, but how that applies to .MCM file structure? and again, 64 lines in actual file, 56 lines in MCM, very strange....
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-25 09:55
    I've tried also to do HEX output, IDE gives another error "too many elements".
  • SapphireSapphire Posts: 496
    edited 2013-05-25 10:06
    I think the EVKIT just writes 64 bytes for each character to make it easier to index. You don't need more than 54 to generate the actual character. You can discard the last 10 bytes in each line as you translate it from .mcm to DATA statements. I've never seen the "too many elements" error, so I don't know how you got that. You probably have to limit the number of entries following a DATA statement on one line. HEX or BIN are the same in terms of storage space, so it's just a matter of preference and size of the text file.
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-25 10:24
    I want to import from .mcm file and use your code, too. I haven't looked deep into your code yet, so I don't know, what will be easier, modding my software or adjusting yours?

    If anyone interested, here's the code in visual studio express, which reads .mcm file and output basic stamp compatible code (HEX data)
    [FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]FileOpen(1, [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"D:\demo.mcm"[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2], [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]OpenMode[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2].Input)
    NextLine = LineInput(1)
    Label2.Text = NextLine [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]'to see that really required file is open
    [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]For[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] mtliani = 32 [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]To[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] 255 [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]'character selection loop
    [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]Label1.Text = mtliani
    Refresh() [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]'to see the progress
    [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]For[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] mtvleli = 1 [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]To[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] 64 [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]'line scan loop
    [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]Dim[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] number [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]Byte[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] = [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]Convert[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2].ToByte(LineInput(1), 2) [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]'read line from file and convert to byte
    [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]dagroveba = dagroveba + [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"$"[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] + Hex(number) + [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]","[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]'convert to hex
    [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]Next
    [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]dagroveba = Mid(dagroveba, 1, Len(dagroveba) - 1) [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]'cut the remaining . from the end of the string
    [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]dagroveba = [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"DATA "[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] + dagroveba + [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]" ' "[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] + Chr(mtliani) + [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]" "[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] + Str(mtliani) + [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]" "[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] + Chr(13) + Chr(10) [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]'generate basic stamp code
    [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]TextBox1.Text = TextBox1.Text + dagroveba [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]' output to text
    [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]dagroveba = [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]""[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]'clear variable
    [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]Next
    [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]&#12288;
    FileClose(1)
    [/SIZE][/FONT][/SIZE][/FONT]
    
  • SapphireSapphire Posts: 496
    edited 2013-05-25 10:47
    I think that will work to make the DATA statements. Since we know you can't program all of them in one shot, you'll have to cut & paste groups lines into the BS2 program. I would suggest adding a single DATA item in front of the list which is the character number (i.e. 32-255) so you know where the following 54 bytes go.

    Then either modifying my program, or writing your own, in a loop read the first DATA byte to set the address in the MAX7456, and then send the next 54 DATA bytes that define the character. Repeat until you run out of data. Determine this by having a special first byte value of say zero which means your done.

    In my max7456_prog program, I put the destination in the CM DATA statement because I had scattered characters. So you'd only have to change the main DO loop to read the first DATA byte in your program, and watch for the ending byte. The first DATA statement has to be proceeded by "PC" and there has to be a trailing DATA 0 at the end.

    Here is the modified code:
    [FONT=courier new]list = 0
    DO
        reg = VM0 : dat = $08 : GOSUB Write_reg_dat ' enable OSD
        DEBUG CR,"Continue? " : DEBUGIN x : IF x <> "y" AND x <> "Y" THEN GOTO Done ELSE DEBUG CR
        reg = VM0 : dat = 0 : GOSUB Write_reg_dat ' disable OSD
        READ 55*list+PC,dest    ' read dest character
        IF dest = 0 THEN EXIT   ' exit at end of list
        DEBUG "D=",HEX2 dest," (",dest,") : "
        reg = CMAH : dat = dest : GOSUB Write_reg_dat ' select dest character
        FOR x = 1 TO 54
            reg = CMAL : dat = x-1 : GOSUB Write_reg_dat ' select pixel
            READ 55*list+x+PC,dat  ' get pixel attribute
            reg = CMDI : GOSUB Write_reg_dat ' write pixel attribute
            DEBUG HEX2 dat," "
        NEXT
        reg = CMM : dat = $A0 : GOSUB Write_reg_dat ' save character to NVM
        PAUSE 16      ' wait for write to complete
        DEBUG CR
        list = list + 1
    LOOP 
    [/FONT]
    
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-25 12:47
    Thanks. Currently I don't have stamp or max ic at hands, so we have to wait till monday, when I will be able to test it all.
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-27 02:53
    If I understood properly, I need to copy write_reg_dat subroutine and initialization strings too, from max7456_prog.bs2 to work the above code properly?

    Also, since I want to update complete ASCII table (chars 33-255), I should adjust my "CM" sting to have values for all chars, right?

    And what it I want to have all 64 bytes updated? (Just for ease of .mcm file reading), I think, FOR x = 1 TO 54 should be counting up to 64 ?
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-27 03:34
    Here is that code, modified to write pixels for letter "A", is this correct?
    ' {$STAMP BS2p}
    ' {$PBASIC 2.5}
    cs      PIN     5
    sclk   PIN      3
    sdin   PIN      4
    sdout   PIN     2
    VM0    CON    $00
    VM1    CON    $01
    HOS    CON    $02
    VOS    CON    $03
    DMM    CON    $04
    DMAH  CON    $05
    DMAL  CON    $06
    DMDI  CON    $07
    CMM    CON    $08
    CMAH  CON    $09
    CMAL  CON    $0A
    CMDI  CON    $0B
    OSDM  CON    $0C
    OSDBL  CON    $6C
    STAT  CON    $A0
    DMDO  CON    $B0
    CMDO  CON    $C0
    reg   VAR    Byte
    dat    VAR   Byte
    x       VAR     Byte
    y       VAR   Byte
    pos   VAR    Word
    dest  VAR    Byte
    list  VAR    Byte
    
    HIGH cs      ' make cs high
    LOW sclk    ' make sclk low
    PAUSE 128              ' wait for MAX7456 to reset
    list = 0
    DO
        reg = VM0 : dat = $08 : GOSUB Write_reg_dat ' enable OSD
        DEBUG CR,"Continue? " : DEBUGIN x : IF x <> "y" AND x <> "Y" THEN GOTO Done ELSE DEBUG CR
        reg = VM0 : dat = 0 : GOSUB Write_reg_dat ' disable OSD
        READ 55*list+PC,dest    ' read dest character
        IF dest = 0 THEN EXIT   ' exit at end of list
        DEBUG "D=",HEX2 dest," (",dest,") : "
        reg = CMAH : dat = dest : GOSUB Write_reg_dat ' select dest character
        FOR x = 1 TO 64
            reg = CMAL : dat = x-1 : GOSUB Write_reg_dat ' select pixel
            READ 55*list+x+PC,dat  ' get pixel attribute
            reg = CMDI : GOSUB Write_reg_dat ' write pixel attribute
            DEBUG HEX2 dat," "
        NEXT
        reg = CMM : dat = $A0 : GOSUB Write_reg_dat ' save character to NVM
        PAUSE 16      ' wait for write to complete
        DEBUG CR
        list = list + 1
    LOOP
    CM DATA $41
    PC DATA $55,$55,$55,$55,$55,$55,$55,$41,$55,$55,$28,$55,$54,$AA,$15,$52,$AA,$85,$4A,$82,$A1,$2A,$14,$A8,$28,$55,$28,$28,$55,$28,$28,$0,$28,$2A,$AA,$A8,$2A,$AA,$A8,$28,$0,$28,$28,$55,$28,$28,$55,$28,$28,$55,$28,$41,$55,$41,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 '  "A"
    
    
  • SapphireSapphire Posts: 496
    edited 2013-05-27 09:20
    Yes, you need the write_reg_dat and initalization code. I only showed the modified DO...LOOP since you already have the rest.

    You can send all 64 bytes, but the MAX7456 ignores any above 54 so it only wastes DATA space, but won't hurt the chip. You'll also have to change the 55*list to 65*list (in two places) if you do it this way.

    You don't need the CM label, and the first DATA byte ($41) needs to be on the PC line. Or, if you want to do it this way, put PC on the first DATA line (the one with $41) and no label on the successive lines. You must have a final DATA 0 at the end though, otherwise the program will read into program memory and write garbage to the MAX7456.
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-27 11:15
    The idea why I went with 64 bytes is the fact, that I'm reading .mcm file sequentally. Having to separate 56 lines from each 64 needs a bit more coding, for which I don't have much time.

    Regarding the CM, the $41 is ASCII code for letter "A". If it will be missing, how program will determine which DATA to write to which area?
  • SapphireSapphire Posts: 496
    edited 2013-05-27 12:55
    It won't know where to put the data. You have to tell it. Now if you know you are going to start with $41 (A) you could hard-code that, but then when you get to the next series of characters, you'll have to change it.
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-27 13:07
    OK, it seems way too confusing now, we'll check it tomorrow. I'm basically trying to isolate process which handles character writing, so I can do my own writing.

    BTW, I've prepared a standard .mcm file, with all ASCII characters distributed according to standard. Also, shape of certain letters was adjusted. I can upload it, if anyone needs.
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-28 01:10
    Here's the code, but it has two problems, first of all, it does nothing, and also, loop never ends - it asks for "continue" forever, I already pressed Y 50 times, while there are much less DATA lines:
    ' {$STAMP BS2p}
    ' {$PBASIC 2.5}
    cs      PIN     5
    sclk   PIN      3
    sdin   PIN      4
    sdout   PIN     2
    VM0    CON    $00
    VM1    CON    $01
    HOS    CON    $02
    VOS    CON    $03
    DMM    CON    $04
    DMAH  CON    $05
    DMAL  CON    $06
    DMDI  CON    $07
    CMM    CON    $08
    CMAH  CON    $09
    CMAL  CON    $0A
    CMDI  CON    $0B
    OSDM  CON    $0C
    OSDBL  CON    $6C
    STAT  CON    $A0
    DMDO  CON    $B0
    CMDO  CON    $C0
    reg   VAR    Byte
    dat    VAR   Byte
    x       VAR     Byte
    y       VAR   Byte
    pos   VAR    Word
    dest  VAR    Byte
    list  VAR    Byte
    
    HIGH cs      ' make cs high
    LOW sclk    ' make sclk low
    PAUSE 128              ' wait for MAX7456 to reset
    list = 0
    DO
        reg = VM0 : dat = $08 : GOSUB Write_reg_dat ' enable OSD
        DEBUG CR,"Continue? " : DEBUGIN x : IF x <> "y" AND x <> "Y" THEN GOTO Done ELSE DEBUG CR
        reg = VM0 : dat = 0 : GOSUB Write_reg_dat ' disable OSD
        READ 65*list+PC,dest    ' read dest character
        IF dest = 0 THEN EXIT   ' exit at end of list
        DEBUG "D=",HEX2 dest," (",dest,") : "
        reg = CMAH : dat = dest : GOSUB Write_reg_dat ' select dest character
        FOR x = 1 TO 64
            reg = CMAL : dat = x-1 : GOSUB Write_reg_dat ' select pixel
            READ 65*list+x+PC,dat  ' get pixel attribute
            reg = CMDI : GOSUB Write_reg_dat ' write pixel attribute
            DEBUG HEX2 dat," "
        NEXT
        reg = CMM : dat = $A0 : GOSUB Write_reg_dat ' save character to NVM
        PAUSE 16      ' wait for write to complete
        DEBUG CR
        list = list + 1
    LOOP
    Write_reg_dat:
        LOW cs
        SHIFTOUT sdin,sclk,MSBFIRST,[reg,dat]
        HIGH cs
        RETURN
        Done:
    reg = VM0 : dat = $08 : GOSUB Write_reg_dat  ' enable OSD
    DEBUG CR,"Done!",CR
    END
    PC  DATA $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 '    32
    DATA $55,$55,$55,$55,$55,$55,$55,$41,$55,$55,$28,$55,$55,$28,$55,$55,$28,$55,$55,$28,$55,$55,$28,$55,$55,$28,$55,$55,$28,$55,$55,$28,$55,$55,$28,$55,$55,$41,$55,$55,$55,$55,$55,$41,$55,$55,$28,$55,$55,$28,$55,$55,$41,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' !  33
    DATA $55,$55,$55,$54,$55,$15,$52,$14,$85,$4A,$82,$A1,$52,$84,$A1,$54,$85,$21,$54,$85,$21,$52,$14,$85,$54,$55,$15,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' "  34
    DATA $55,$55,$55,$55,$55,$55,$50,$55,$5,$4A,$14,$A1,$4A,$14,$A1,$4A,$14,$A1,$4A,$0,$A1,$2A,$AA,$A8,$2A,$AA,$A8,$4A,$0,$A1,$4A,$0,$A1,$2A,$AA,$A8,$2A,$AA,$A8,$4A,$0,$A1,$4A,$14,$A1,$4A,$14,$A1,$4A,$14,$A1,$50,$55,$5,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' #  35
    DATA $55,$41,$55,$55,$28,$55,$54,$28,$5,$52,$AA,$A1,$4A,$AA,$A8,$2A,$28,$28,$28,$28,$41,$28,$28,$55,$2A,$28,$15,$4A,$AA,$85,$52,$AA,$A1,$54,$2A,$A8,$55,$28,$28,$41,$28,$28,$28,$28,$A8,$2A,$AA,$A1,$4A,$AA,$85,$50,$0,$15,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' $  36
    DATA $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$50,$55,$41,$4A,$15,$28,$4A,$14,$A8,$50,$52,$A1,$55,$4A,$85,$55,$2A,$15,$54,$A8,$55,$52,$A1,$55,$4A,$85,$41,$2A,$15,$28,$28,$55,$28,$41,$55,$41,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' %  37
    DATA $55,$55,$55,$55,$55,$55,$54,$1,$55,$52,$A8,$55,$4A,$AA,$15,$2A,$A,$85,$28,$52,$85,$28,$52,$85,$2A,$A,$85,$4A,$AA,$1,$4A,$AA,$A8,$2A,$A,$A8,$28,$52,$81,$28,$52,$85,$2A,$A,$A1,$4A,$AA,$A8,$52,$A8,$28,$54,$1,$41,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' &  38
    DATA $55,$55,$55,$55,$51,$55,$55,$48,$55,$55,$2A,$15,$55,$4A,$15,$55,$52,$15,$55,$52,$15,$55,$48,$55,$55,$51,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' '  39
    DATA $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$5,$55,$54,$A1,$55,$52,$85,$55,$4A,$15,$55,$28,$55,$55,$28,$55,$55,$28,$55,$55,$28,$55,$55,$28,$55,$55,$28,$55,$55,$28,$55,$55,$4A,$15,$55,$52,$85,$55,$54,$A1,$55,$55,$5,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' (  40
    DATA $55,$55,$55,$55,$55,$55,$55,$55,$55,$54,$15,$55,$52,$85,$55,$54,$A1,$55,$55,$28,$55,$55,$4A,$15,$55,$4A,$15,$55,$4A,$15,$55,$4A,$15,$55,$4A,$15,$55,$4A,$15,$55,$4A,$15,$55,$28,$55,$54,$A1,$55,$52,$85,$55,$54,$15,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' )  41
    DATA $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$41,$55,$55,$28,$55,$54,$28,$15,$52,$AA,$85,$42,$AA,$81,$2A,$82,$A8,$2A,$82,$A8,$42,$AA,$81,$52,$AA,$85,$54,$28,$15,$55,$28,$55,$55,$41,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' *  42
    DATA $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$41,$55,$55,$28,$55,$55,$28,$55,$55,$28,$55,$40,$28,$1,$2A,$AA,$A8,$2A,$AA,$A8,$40,$28,$1,$55,$28,$55,$55,$28,$55,$55,$28,$55,$55,$41,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' +  43
    DATA $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$41,$55,$55,$28,$55,$55,$28,$55,$54,$A1,$55,$52,$85,$55,$54,$15,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' ,  44
    DATA $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$0,$5,$54,$AA,$A1,$54,$AA,$A1,$55,$0,$5,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' -  45
    DATA $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$54,$15,$55,$52,$85,$55,$52,$85,$55,$54,$15,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' .  46
    DATA $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$41,$55,$55,$28,$55,$54,$A8,$55,$52,$A1,$55,$4A,$85,$55,$2A,$15,$54,$A8,$55,$52,$A1,$55,$4A,$85,$55,$2A,$15,$55,$28,$55,$55,$41,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' /  47
    DATA $55,$55,$55,$55,$55,$55,$54,$0,$15,$52,$AA,$85,$4A,$AA,$A1,$2A,$0,$A8,$28,$55,$28,$28,$54,$A8,$28,$52,$A8,$28,$4A,$28,$28,$28,$28,$28,$A1,$28,$2A,$85,$28,$2A,$15,$28,$2A,$0,$A8,$4A,$AA,$A1,$52,$AA,$85,$54,$0,$15,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' 0  48
    DATA $55,$55,$55,$55,$55,$55,$55,$40,$55,$55,$28,$55,$54,$A8,$55,$52,$A8,$55,$52,$A8,$55,$50,$28,$55,$55,$28,$55,$55,$28,$55,$55,$28,$55,$55,$28,$55,$55,$28,$55,$55,$28,$55,$50,$28,$5,$52,$AA,$85,$52,$AA,$85,$50,$0,$5,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' 1  49
    DATA $55,$55,$55,$55,$55,$55,$54,$0,$15,$52,$AA,$85,$4A,$AA,$A1,$2A,$80,$A8,$2A,$15,$28,$40,$55,$28,$55,$54,$A8,$55,$52,$A1,$55,$4A,$85,$55,$2A,$15,$54,$A8,$55,$52,$A1,$55,$4A,$80,$0,$2A,$AA,$A8,$2A,$AA,$A8,$0,$0,$0,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' 2  50
    DATA $55,$55,$55,$55,$55,$55,$54,$0,$15,$52,$AA,$85,$4A,$AA,$A1,$2A,$0,$A8,$28,$55,$28,$41,$55,$28,$55,$40,$A8,$55,$2A,$A1,$55,$2A,$A1,$55,$40,$A8,$41,$55,$28,$28,$55,$28,$2A,$0,$A8,$4A,$AA,$A1,$52,$AA,$85,$54,$0,$15,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' 3  51
    DATA $55,$55,$55,$55,$55,$55,$55,$54,$15,$55,$52,$85,$55,$4A,$85,$55,$2A,$85,$54,$AA,$85,$52,$A2,$85,$4A,$82,$85,$2A,$12,$85,$28,$2,$81,$2A,$AA,$A8,$2A,$AA,$A8,$40,$2,$81,$55,$52,$85,$55,$52,$85,$55,$52,$85,$55,$54,$15,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' 4  52
    DATA $55,$55,$55,$55,$55,$55,$40,$0,$1,$2A,$AA,$A8,$2A,$AA,$A8,$28,$0,$1,$28,$0,$15,$2A,$AA,$85,$2A,$AA,$A1,$40,$0,$A8,$55,$55,$28,$55,$55,$28,$41,$55,$28,$28,$55,$28,$2A,$0,$A8,$4A,$AA,$A1,$52,$AA,$85,$54,$0,$15,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55 ' 5  53
    DATA 0
    
    
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-28 01:31
    Ideally, I want to have a simple piece of software, which won't ask anything at all, but have two variables, by which I tell it, from which character # writing should be start and on which it should end.
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-28 06:28
    Well, I've modded original max7456_prog.bs2 to get the results I want. Sure, it not easy, have to copy many strings by hand, but I won't need a lot of characters to be updated often, so this is ok.
  • SapphireSapphire Posts: 496
    edited 2013-05-28 14:26
    Glad to hear you got it working. Now you can have fun writing text to your video screen!
  • CuriousOneCuriousOne Posts: 931
    edited 2013-05-29 09:19
    Yes, thank you very much! without your help, it would not be possible at all. Now I'm sorting things out and creating my FPV OSD. What really concerns me, is the speed of screen update when sending some text to OSD - I can see by eyes the sequence of characters appearing on the screen! Is this basic stamp issue or OSD chip issue itself?
Sign In or Register to comment.