yes , aligning the font data packing with the ssd1306's memory page layout is more efficient usage of the 14 bit width of the flash memory
while it will still need some clever manipulation to unpack it into a 8 bit data stream
![]()
yes , aligning the font data packing with the ssd1306's memory page layout is more efficient usage of the 14 bit width of the flash memory
while it will still need some clever manipulation to unpack it into a 8 bit data stream
![]()
Warning I'm not a teacher
Here is a simple code to get started with this 72x40 display.
I also include the SSD1306 command and display's datasheets.
Since I use EXCEL to design characters, here's the sheet you may want to have a look at.
And again, lots of thanks to Richard
![]()
Roger
You seem to have the communication to the controller well under control
next step is to try to store a font economically, you have probably discovered a large font on a very resource limited chip
like a 690 stored as a series of code structures like
I2CWrite SDA,SCL,I2CDevice,_
[$40,192,224,240,248,252,126,63,63,63,63,63,63,63,6 3,126,252,248,240,224,192,_
255,255,255,255,128,128,128,128,128,128,128,128,12 8,128,128,128,255,255,255,255,_
255,255,255,255,15,15,15,15,15,15,15,15,15,15,15,1 5,255,255,255,255,_
255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,25 5,255]
will by the time you have 10 digits covered will have blown 75% of the chips flash.
fonts can be stored in much better ways, even expanded out as the are read back
Warning I'm not a teacher
Richard, can you point me the direction to do this?fonts can be stored in much better ways
Should I use some kind of algorithm where repetitive numbers could be stored differently or find a way to make better use of the 14 bits word size of the 16F690?
Roger
the font is just a simple block of data
this one is for digits 0 to 9 + "." + "%" its 14 bits high and 10 bits wide [to match chip flash]
so total size is 120 words
for convenience lets locate it a the end of flash - 120 words ie. 0xf88
note this is only partially "filled" in and not very carefully at that
normally i would make the font an include and give it a label rather than manually locate it like thisCode:asm ;incomplete and very rough font 14x10 org 0xf88 dw 0x1ffc,0x3ffe,0x3006,0x3006,0x3006,0x3006,0x3006,0x3006,0x3ffe,0x1ffc ;"0" dw 0,0x300C,0x300E,0x300F,0x3ffF,0x3ffF,0x3ffF,0x3000,0x3000,0 dw 0x3806,0x3C07,0x3E03,0x3703,0x3383,0x31E3,0x30F3,0x307F,0x303E,0 dw 0x3018,0x3006,0x3186,0x3186,0x3186,0x3186,0x3186,0x3006,0x3cf8,0x1ffc ;"3" dw 0,0x3ffe,0,0x3ffe,0,0x3ffe,0,0x3ffe,0,0 dw 0,0x3ffe,0,0x3ffe,0x3ffe,0x3ffe,0,0x3ffe,0,0 dw 0x3ffe,0x3ffe,0x3ffe,0,0,0,0,0x3ffe,0x3ffe,0x3ffe dw 0x3ffe,0x3ffe,0x3ffe,0,0,0x3ffe,0,0x3ffe,0x3ffe,0x3ffe dw 0x1ffc,0x3ffe,0x3186,0x3186,0x3186,0x3186,0x3186,0x3186,0x3ffe,0x1ffc ;"8" dw 0,0x3ffe,0x3ffe,0x3ffe,0x3ffe,0x3ffe,0x3ffe,0x3ffe,0x3ffe,0x3ffe dw 0,0,0,0xE00,0x1F00,0x1F00,0xE00,0,0,0 ;"." dw 0x181f,0xC11,0x611,0x31f,0x1C0,0x60,0x1F38,0x110c,0x1106,0x1F02 ;"%" endasm
dt's macro as found in dt-ints is ideal to find and numerate the font address
when the fonts address is known its simple to use readcode command to retrieve font dataGetAddress macro Label, Wout
CHK?RP Wout
movlw low Label ; get low byte
movwf Wout
movlw High Label ; get high byte
movwf Wout + 1
endm
Last edited by lester; - 8th December 2023 at 08:44. Reason: Changed Thread Title
Warning I'm not a teacher
Just for fun, scrolling text example
![]()
Roger
Bookmarks