[OLED SSD1306] Fonts

Zoals reeds eerder gemeld, gebruik ik voor een projectje een OLED, SSD1306 (128 x 32). Het is mogelijk om daar verschillende fonts voor te gebruiken. Nu wil ik graag zelf een soort font gebruiken, waarin ik afbeeldingen heb staan in de resolutie van 16x16 pixels.
Ik zou de afbeeldingen ook als plaatjes kunnen opslaan, maar ik gebruik liever een soort "font" als oplossing. Ik probeer een soort "Dingbat"-font te maken.

Nu heb ik een aantal font-bestandjes bekeken, en begrijp grofweg hoe het werkt. Echter, ik begrijp niet hoe de codering van de 3e regel precies werkt. Een paar voorbeeldjes :

code:


Digital10x16:
$asm
.db 2,10,20,0
.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 

of

code:


Font6x8:
$asm
.db 1,6,6,0
.db 0,0,0,0,0,0 ;  

De 1e regel geeft de naam aan, waarmee je het betreffende font aanroept.
De 2e regel dat het om een bepaalde codering / taal gaat.
De opbouw / werking van de 3e regel kan ik niet precies achterhalen. Het zal waarschijnlijk weergeven hoe groot een letter is, maar hoe werkt die codering precies ?
Ik bedoel dan : waar staat elk getal voor ?

Van elk bezoek aan CO leer ik weer meer...
Arco

Special Member

Ik heb geen idee hoe ze het daar doen. Ik zet alles altijd gewoon in een array van constants. (1 byte voor iedere 8 bits kolom)
Zie ook: https://www.circuitsonline.net/forum/view/121699

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
maartenbakker

Golden Member

Met db (define byte) definieer je een constante of een array van constanten dus dat hebben ze hier mogelijk ook zo gedaan. Elk getalletje is een byte en een byte bestaat uit een 8 bits die voor een rijtje pixels staan.

www.elba-elektro.nl | "The mind is a funny thing. Sometimes it needs a good whack on the side of the head to jar things loose."

Arco:
Bedankt voor de link naar je topic en code. Ondanks dat je het voor een PIC hebt geschrevne in Basic, begin ik voorzichtig te begrijpen hoe het werkt. Ik heb ook het idee dat er bepaalde "subs" nog in ontbreken in je code, of het moet gaan om gereserveerde commando's in PicBasic.

@MaartenBakker:
Het gebeuren met de ".db" voor een karakterteken heb ik begrepen. Waar ik mee zit is dus die 3e regel in de font-file.
Inmiddels heb ik het volgende kunnen uitvlooien voor bijvoorbeeld bij de Digital10x16-font.

".db 2,10,20,0"

2 : Per karakter / teken zijn 2 rijen gedefinieerd
10 : Per rij worden 10 bytes gebruikt
20 : Een karakter is opgebouwd uit in totaal 20 bytes
0 : ??

Het gaat me nu dus nog om die "0".

Van elk bezoek aan CO leer ik weer meer...
Arco

Special Member

Code in mijn link kun je zo compileren in de Mikrobasic compiler. (denk zelfs nog wel in de demo versie met 4k limit)

Net geprobeerd, past inderdaad in de demo versie...

[Bericht gewijzigd door Arco op dinsdag 23 oktober 2018 14:49:12 (19%)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Is dat een Bascom Font file?
De 3e regel zegt iets over het formaat van de font.
Dan is de eerste byte Row, 2e Byte's each, 3e Block size en de 4e een dummy byte.

Ps wist je dat Bascom zijn eigen fonteditor heeft en je heel makkelijk zelf fonts kunt maken.?
Tools -> pluginmanager check enable fonteditor.
Bascom opnieuw opstarten
Tools -> plugins en gaan.

Edit: de 4e byte bepaald of het een truetype lettertype is of niet. In de tt letterypes staat daar een 2, maar wat die betekend is mij niet bekend.

[Bericht gewijzigd door 2N3055 op dinsdag 23 oktober 2018 15:25:14 (16%)

@Arco:
In MikroBasic zal het wellicht lukken. Ik maak gebruik van een Atmega328 in combinatie met Bascom (betaalde versie). Ik ben daarom ook erg blij met de vele overeenkomsten tussen beide programma's, waardoor ik je sourcecode ook aardig goed kan volgen.

@2N3055:
Het betreft inderdaad een Bascom font-file.
Indien de 4e een dummy-byte is, vraag ik me af waarom het dan gebruikt wordt. Het maakt het namelijk een beetje verwarrend.
Inmiddels heb ik de font-editor ook ontdekt, zoals je hebt aangegeven.
Vanmiddag kwam ik na een speurtochtje een completer programma tegen, genaamd "FontMaker for Bascom" (*) die ik vond op een Poolse site. Het programma verwijst overigens naar een persoon, die mij erg bekend in de oren klinkt : Evert Dekker :)

Goed, ik heb een eerste test met dat programma gedaan en kwam zo erachter dat ik een klein foutje heb gemaakt in de codering binnen een font-file.

Stel : ik maak een font van 16 x 16, dan vormt de :
- eerste set van 16 bytes de onderste helft
- tweede set van 16 bytes de bovenste helft
van een karakter.

(*) Voor wie het Pools minder machtig is (net als ik), is hier de link via "Google translate"

-= [ EDIT ] =-
Ik lees net nogmaals het bovenstaande bericht door en lees dat het 4e getalletje staat voor TrueType. OK,. mysterie opgelost.

Van elk bezoek aan CO leer ik weer meer...