Maticové LED znakovky, i když mají jen malé rozlišení, se používají hlavě proto, že s nimi lze dosáhnout efektního vzhledu a zobrazení jednoduché grafiky, jsou relativně velké a čitelné z větší vzdálenosti, v šeru aktivním svitem poutají pozornost.
Jako příklad zapojení maticové LED 8×8 bodů použijeme typ BL-M07C881UR-11. LED tvořící řádku jsou připojeny na port B mikrokontroléru PICAXE 20X2, jednotlivé řádky jsou aktivovány posuvným registrem 4094, který současně zajistí omezení proudu pro LED. Toto zapojení se hodí k vyzkoušení funkce a programu, nicméně vede k viditelným rozdílům jasu LED v řádku podle toho, kolik LED v něm svítí. Pro odstranění tohoto jev by bylo třeba posílit výstupy posuvného registru dostatečně dimenzovanými tranzistory a do ovládání sloupců vložit omezení proudu rezistory. Nám ale nyní jde především o způsob obsluhy programem, takže zvolíme zapojení co nejjednodušší.
První pogram slouží pouze k rozsvícení obrazce podle nákresu ve schématu. Při reálném použití budou pravděpodobně data připravená programem nebo uložená v datové části EEPROM.
REM LED maticový displej BL-M07C881UR-11 - PICAXE 20X2 REM zobrazení čtverců setfreq m32 let dirsB=%11111111 ;nastavení portu B pro pins do ;smyčka zobrazení low c.0 ;nastavit bit pro posuvný registr for b0=1 to 8 ;cyklus pro 8 řádků select b0 ;tabulka grafiky po řádcích case 1 b2=%11111111 case 2 b2=%10011001 case 3 b2=%10100101 case 4 b2=%11000011 case 5 b2=%11000011 case 6 b2=%10100101 case 7 b2=%10011001 case 8 b2=%11111111 endselect let pinsB=0 ;zhasnutí řádku pulsout c.1,1 ;posunutí na další řádek let pinsB=b2 ;zobrazení řádku z tabulky high c.0 ;bit pro posuvný registr pause 10 ;doba svícení next b0 ;konec cyklu osmi rádků loop
Stejnou maticovou LED použila firma Adafruit v modulu, ten navíc obsahuje řadič Holtek HT16K33 se sériovým vstupem I2C, který lze velmi jednoduše obsloužit příkazy PICAXE. Modul 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, z výroby je nastavena adresa E0. Po adrese následuje jeden příkazový byte a případně další jeden až šestnáct byte dat. Příkazy pro 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 – řízení jasu pomocí 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 poněkud zpřeházené – zleva jsou zobrazeny bity 7, 0, 1, 2, 3, 4, 5, 6 – což poněkud komplikuje ovládání.
Příklad zobrazuje na displeji střídavě kolečko a čtvereček, oba znaky se plynule rozsvěcí i zhášejí.
REM LED maticový displej Adafruit - PICAXE 08M2 REM zobrazení čtverců data 00,(%10000001) ;data pro křížek data 01,(%01000010) data 02,(%00100100) data 03,(%00011000) data 04,(%00011000) data 05,(%00100100) data 06,(%01000010) data 07,(%10000001) data 08,(%00011000) ;data pro kolečko data 09,(%00100100) data 10,(%01000010) data 11,(%10000001) data 12,(%10000001) data 13,(%01000010) data 14,(%00100100) data 15,(%00011000) hi2csetup i2cmaster,$e0,i2cfast,i2cbyte ;inicializace I2C hi2cout (%00100001) ;oscilátor displeje zapnut hi2cout (%10000001) ;zapnutí displeje bez blikání gosub prevod ;převod dat na přehozené bity do ;začátek cyklu programu read 0,b20,b21,b22,b23,b24,b25,b26,b27 ;načtení a přenos křížku hi2cout 0,(b20,0,b21,0,b22,0,b23,0,b24,0,b25,0,b26,0,b27) gosub rozsvit pause 500 gosub zhasni pause 500 ;rozsvítit/zhasnout read 8,b20,b21,b22,b23,b24,b25,b26,b27 ;načtení a přenos kolečka hi2cout 0,(b20,0,b21,0,b22,0,b23,0,b24,0,b25,0,b26,0,b27) gosub rozsvit pause 500 gosub zhasni pause 500 ;rozsvítit/zhasnout loop ;konec cyklu programu rozsvit: ;pomocí PWM postupně rozsvítí displej v 16 krocích hi2cout ($81) for b0=0 to 15 b1=b0+$E0 hi2cout (b1) pause 50 next b0 return zhasni: ;pomocí PWM postupně zhasne displej v 16 krocích for b0=0 to 15 b1=$EF-b0 hi2cout (b1) pause 50 next b0 hi2cout ($80) return prevod: ;konverze dat v paměti na přehozené bity read 255,b2 ;načtení příznaku, jestli už konverze proběhla if b2<>127 then ;při prvním spuštění konvertuj for b0=0 to 15 ;pro 16 bytu (není nutné přepisovat celou EEPROM b4=0 ;vynulování pracovní proměnné read b0,b1 ;načti byte b3=b1 and %10000000 if b3>0 then let b4= %10000000 endif b3=b1 and %01000000 if b3>0 then let b4=b4+%00000001 endif b3=b1 and %00100000 if b3>0 then let b4=b4+%00000010 endif b3=b1 and %00010000 if b3>0 then let b4=b4+%00000100 endif b3=b1 and %00001000 if b3>0 then let b4=b4+%00001000 endif b3=b1 and %00000100 if b3>0 then let b4=b4+%00010000 endif b3=b1 and %00000010 if b3>0 then let b4=b4+%00100000 endif b3=b1 and %00000001 if b3>0 then let b4=b4+%01000000 endif write b0,b4 ;zapiš konvertovaná data zpět next b0 write 255,127 ;po dokončení zapiš příznak, že konverze proběhla endif return
V programu, který se může zdát zbytečně dlouhý na provedení plánované činnosti, je třeba všimnout si několika důležitých věcí:
Ukládání dat do EEPROM pomocí příkazů „data“ na začátku není součástí běhu programu, ale direktivou pro PC, data se uloží při programování. Zbytek datové oblasti EEPROM je vyplněn nulami.
Zobrazení bitů na displeji (70123456) je zcela jiné než pořadí v binárním zadání čísel (76543210). Můžeme si rozkreslit požadovaný motiv na čtverečkovaný papír, pak „ručně“ přeházet bity, případně převést na kratší zápis a zadat do programu. To je hodně pracné jak při tvorbě, tak jakékoli úpravě. V našem příkladu je zápis v binární podobě čitelný, jedničky jsou na místech svítících LED, úpravy jsou názorné a rychlé. Po přenosu do mikrokontroléru se ovšem data v této podobě nedají použít, proto se na začátku běhu volá podprogram „prevod“, který byt po bytu obsah datové EEPROM přečte, přehází bity a uloží zpět. V daném programu stačí přeházet 16 bytů.
Pokud by se konverze dat provedla vždy při spuštění mikrokontroléru, už při druhém chodu by rozházela bity do nepoužitelného stavu. Je nutné zajistit, aby se konverze provedla jen jednou. Při přenosu dat je do posledního bytu EEPROM uložena hodnota 0. Jakmile se provede konverze, uloží na toto místo hodnotu 127, která funguje jako příznak použití. Při každém dalším spuštění se už konverze přeskočí.
Změny jasu se dělají PWM modulací a týkají se všech LED najednou. Nelze měnit jas jednotlivých LED. Povely pro změnu jasu nedovolují nastavit střídu 0, pro úplné zhasnutí je nutné použit jiný povel.