Mezi prvními zajímavými moduly od firmy Adafruit dorazil maticový displej 8×8 s I2C interface. Výrobce dodává knihovnu k použití s Arduinem, ale je již poměrně skoupý na technické detaily a programovou obsluhu displeje s jinými procesory. Z dostupných údajů a nakonec i z letmého pohledu na spodní stranu plošného spoje jsem zjistil, že modulek používá řadič HT16K33 od firmy Holtek v 24 pinovém pouzdru. Stačil tedy katalogový list a trocha experimentování.
Komunikace I2C
V následujícím textu jsou všechny příkazy a data uvedeny v šestnáctkové soustavě. Řadič může mít na I2C sběrnici jednu ze čtyř adres E0, E2, E4, E6, adresa se volí pajecími propojkami na plošném spoji. Přímo z výroby (bez propojení) je nastavena adresa E0. Po adrese následuje jeden příkazový byte a případně další jeden až šestnáct byte dat. Pro naše účely jsou důležité tyto povely k nastavení a ovládáni displeje:
20 – vypnutí systémového oscilátoru (stand by)
21 – zapnutí systémového oscilátoru
80 – vypnutí displeje
81 – zapnutí displeje, bez blikání
83 – zapnutí displeje, blikání rychlostí 2Hz
85 – zapnutí displeje, blikání rychlostí 1Hz
87 – zapnutí displeje, blikání rychlostí 0,5Hz
E0 až EF – PWM s činitelem plnění 1/16 až 16/16
00 až 0F – nastavení adresy pro zápis následujících dat
Poslední příkaz slouží k naplnění paměti zobrazovanými daty, po zápisu je adresa automaticky inkrementována (zvětšena o jednu), takže zápis celé matice lze provést najednou. Displej 8×8 využívá pouze sudé adresy, na lichou adresu můžeme zapsat jakákoliv data, nejsou zobrazena. Pořadí jednotlivých bitů je (zřejmě z důvodu snadnějsího propojení na malém plošném spoji) poněkud zpřeházené – zleva jsou zobrazeny bity 7, 0, 1, 2, 3, 4, 5, 6.
Ovládání z Picaxe
K otestování jsem použil Axeboard 08 s procesorem Picaxe-08M2, displej jsem propojil s hardwarovým I2C procesoru.
Zde je testovací program, který zobrazí střídavě křížek a kroužek:
'Adafruit mini 8x8 test #picaxe 08m2 symbol cnt=b7 symbol temp0=b6 symbol dimm=b5 data 0,($00,$0C,$12,$21,$21,$12,$0C,$00) 'data pro kolečko data 8,($00,$21,$12,$0C,$0C,$12,$21,$00) 'data pro křížek gosub mini8x8init do read 0,b20,b21,b22,b23,b24,b25,b26,b27 hi2cout 0,(b20,$ff,b21,$ff,b22,$ff,b23,$ff,b24,$ff,b25,$ff,b26,$ff,b27) pause 1000 read 8,b20,b21,b22,b23,b24,b25,b26,b27 hi2cout 0,(b20,$ff,b21,$ff,b22,$ff,b23,$ff,b24,$ff,b25,$ff,b26,$ff,b27) pause 1000 loop mini8x8init: hi2csetup i2cmaster,$e0,i2cfast,i2cbyte hi2cout (%00100001) 'System setup oscilator on hi2cout (%10000001) 'Display setup display on, blink off return end