Maticový displej 8×8 od Adafruitu s I2C interface

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

Adafruit Mini 8x8 LED Matrix w/I2C Backpack - Green

Adresy řádků, pořadí bitů

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