česky english Vítejte, dnes je pátek 19. duben 2024

AVRboard03 kit a modul s řadičem LED TM1638

DPS 6/2011 | Články
Autor: Ondřej Pavelka

V následujícím příspěvku zkusíme komunikaci s modulem osazeným osmi 7segmentovými LED zobrazovači, osmi dvojbarevnými LED a osmi tlačítky. K pokusům použijeme modul s LED a tlačítky osazený speciálním integrovaným obvodem – řadičem – TM1638. Tento modul lze zakoupit v mnoha čínských internetových e-shopech, na známém DealExtreme [1] stojí modul včetně poštovného do ČR necelých 7 USD.

Řadič LED a tlačítek TM1638

Tento poměrně málo známý obvod vyrábí firma TITAN MICRO ELECTRONICS [2]. Podle výrobce je obvod určen pro ovládání stavových displejů např. domácích spotřebičů ať už zábavního typu – DVD přehrávače, domácí kina nebo kuchyňského typu, jako jsou mikrovlnné trouby, indukční vařiče nebo boilery či ohřívače pro vodu, dále displejů a ovládacích tlačítek v průmyslových zařízeních nebo třeba ve výtazích, prostě tam, kde je potřeba zobrazit údaje a zároveň číst reakci uživatele pomocí tlačítek. Pro konstruktéry má výhodu v tom, že nijak nezatěžuje procesor při zobrazování údajů a čtení kláves, takže se ušetří posuvné registry, popř. vlastní systém pro zobrazování, který by ubíral výpočetní čas mikrokontroléru.

Vlastnosti obvodu dle výrobce:

  • vyrobený CMOS technologií s vlastní malou spotřebou
  • zobrazovací mód 10×8 bitů
  • čtení vstupů (tlačítek) 8×3 bity
  • obvod pro nastavování jasu pomocí PWM v osmi úrovních
  • sériové rozhraní se signály CLK, STB a DIO
  • interní RC oscilátor 450 kHz ±5 %
  • interní RESET obvod
  • provedení pouzdra SOP28.

AVRboard03 kit a modul s řadičem LED TM1638 1.jpg

Obr. 1

Blokové schéma zapojení příbuzného obvodu TM1628 je na obr. 1. Na rozdíl od TM1638 chybí další signál K3 pro další řadu tlačítek, jinak je vnitřní struktura obvodu s velkou pravděpodobností stejná. Originální katalogový list TM1638 blokové schéma neobsahuje, pouze popis vývodů – obr. 2. Bohužel na internetu existuje pouze originální katalogový list v čínštině, takže činnost obvodu byla odvozena analýzou dostupných zdrojových kódů pro správnou funkci modulu. Z blokového schématu jsou patrné vývody K1 až K3, které slouží k adresování (multiplexování) matice tlačítek, zapojených dle obr. 3. Signály GR1 až GR8 jsou určeny pro buzení společných vývodů segmentových zobrazovačů, ať už společných anod nebo katod. Je zřejmé, že lze budit 8 zobrazovačů sestávajících až z 10 segmentů – signály SEG1–SEG10. Zobrazovací modul využívá 7 signálů pro segmenty znaků, 1 signál pro tečku a dva signály pro buzení dvoubarevné LED. V původním katalogovém listu je ovšem uvedeno i zapojení opačné, tedy na vývody SG1 až SG10 jsou připojeny společné katody nebo anody a signály pro jednotlivé segmenty jsou vytvářeny z GR1–GR8. Tím jsou ovládací možnosti TM1638 vyčerpány.

AVRboard03 kit a modul s řadičem LED TM1638 2.jpg AVRboard03 kit a modul s řadičem LED TM1638 3.jpg

Obr. 2

Obr. 3

Obvod TM1638 rozumí celkem 3 příkazům, které slouží k zápisu do vnitřní RAM, ke čtení skenovaných dat (klávesnice), nastavení jasu displeje, nastavení módu zápisu do RAM – buď zápis na přímou adresu v RAM, nebo zápis inkrementální, kdy obvod sám zvyšuje ukazatel do RAM, takže naplnění celé paměti je rychlejší než postupný zápis na všechny adresy. Tyto příkazy se rozlišují nejvyššími bity b7 a b6. Posílají se jako první data na sběrnici při nastavení STB signálu do úrovně L.

AVRboard03 kit a modul s řadičem LED TM1638 - tab.1

Významy bitů b5 až b0 jsou uvedeny pro příslušné příkazy v manuálu, např. řízení jasu displeje (b7=1, b6=0) se nastavuje v osmi úrovních pomocí bitů b2, b1 a b0.

AVRboard03 kit a modul s řadičem LED TM1638 4.jpg

Obr. 4

Schéma zapojení celého LED modulu je na obr. 4, jeho fotografie na obr. 5. Jak je z ní patrné, modul obsahuje dva WSL10 konektory. Ty slouží k sériovému zapojení až 6 modulů do kaskády. Konektory jsou průchozí 1 : 1 až na signál STB – Strobe. Pro komunikaci s konkrétním modulem je třeba používat pouze příslušný STB signál. Z fotografie modulu ze strany plošných spojů je patrný popis signálů na WSL konektoru – obr. 6. Všimněte si, že na vstupním konektoru jsou označené signály STB0–STB5, z modulu však vystupují STB1–STB5. Při kaskádovém řazení tak musíme s každým přidaným modulem používat na prvním modulu další STB signál. To znamená, že pokud pracujeme pouze s jedním modulem, využijeme pro řízení signály STB, CLK a DIO. Při dvou modulech v kaskádě přidáme další STB signál v pořadí, tedy první modul se ovládá pomocí STB0, druhý modul v řadě pak STB1 a dále, až poslední modul připojíme pomocí STB5.

AVRboard03 kit a modul s řadičem LED TM1638 5.jpg

Obr. 5

Dále je modul osazen 8 tlačítky, dále 8 dvoubarevnými LED a dvěma skupinami po 4 sedmisegmentových zobrazovačích typu LD5461AS. Vnitřní zapojení je na obr. 7. Jedná se o zobrazovače se společnou katodou, super červeně svítivé s 0,56" vysokými číslicemi (14,2 mm). Podle katalogového listu dosahují jednotlivé segmenty svítivosti 7 mcd při 10 mA, špičkový proud v propustném směru je 120 mA. Žádné další záludnosti modul nemá, na vstupu jsou všechny signály opatřeny Pull-Up rezistory 10 kΩ.

AVRboard03 kit a modul s řadičem LED TM1638 6.jpg

Obr. 6

Protože je na webu dostupný katalogový list pouze v čínštině, je orientace v něm poněkud ztížená. Obvod TM1638 se ovládá pomocí obousměrné třídrátové sběrnice se signály STB, CLK a DIO. Popis a význam signálů komunikujících se zobrazovacím modulem je následující:

DIO: Obousměrný sériový signál, vzorkuje se, popř. platný výstup je při náběžné hraně hodin CLK. Pořadí bitů je od nejnižšího směrem k vyššímu. Jedná se o výstup s otevřeným kolektorem, výrobce doporučuje použít PullUp rezistor cca 1–10 kΩ.

CLK: Signál pro řízení taktu sběrnice, platná je náběžná hrana signálu.

STB: Signál pro výběr obvodu. Pokud je STB ve vysoké úrovni, je CLK signál ignorován.

K1–K3: Skenování vstupních dat – připojení matice kláves. Je to výstupní pin při ukončení cyklu obsloužení displeje.

SEG1/KS1–SEG8/KS8: Výstupní signály s otevřeným PNP kolektorem pro buzení displeje. Taktéž slouží pro skenování klávesnice.

SEG9–SEG10: Výstupní signály s otevřeným PNP kolektorem pro buzení displeje.

GR1–GR8: Výstupní signály s otevřeným NPN kolektorem pro buzení displeje.

VDD: Doporučené napájecí napětí je 5 V ±10 %.

GND: Logická zem.

AVRboard03 kit a modul s řadičem LED TM1638 7.jpg

Obr. 7

Co vše budeme potřebovat?

Pro úspěšný pokus připojení modulu s LED displejem, samotnými LED a tlačítky s vývojovým kitem AVRboard03 v minimální konfiguraci budeme potřebovat následující díly a moduly:

  • vývojový kit AVRboard03 osazený ATmega 16, ATmega32 nebo ATmega644p [4]
  • minimálně 1 ks modulů JY_8KEY_8LED_8DOT_MODULE V:1.1 [3]
  • min. 6 ks propojovacích vodičů [4], při použití JTAG + 7 ks vodičů navíc
  • programovací prostředí „C“ CodevisionAVR [6].

AVRboard03 kit a modul s řadičem LED TM1638 8.jpg

Obr. 8

Pro ovládání displeje je připravena upravená knihovna TM1638.h a demoprogram pro CodevisionAVR. Při správně nainstalovaném vývojovém prostředí CodevisionAVR a Atmel AVR programátoru, ať už přes ISP nebo JTAG rozhraní, je otázka oživení modulu displeje pár minut. Pokud se vše povede, uvidíte výsledek např. jako na obr. 8.

Popis ovládacího programu a knihovny pro TM1638

Prvním krokem, který demonstrační program dělá, je zjištění skutečného počtu připojených modulů. To se provede odesláním příkazu 0x42 postupně na všechny teoreticky připojené moduly postupnou změnou masky pro STB signál. Tato maska je uložena v poli STB_SEL v hlavičkovém souboru TM1638.h. Reakce se zjišťuje čtením odpovědi na 2. bitu, který musí být nulový.

Nyní známe počet připojených modulů, takže můžeme zasílat data pouze k reálným příjemcům. Proto se ve všech FOR cyklech vyskytuje proměnná STB_num, kde je uložený počet nalezených modulů. Další část programu zobrazí na všech zobrazovačích počet nalezených modulů. Před prvním zápisem je však třeba modul inicializovat funkcí init_TM1638 (cislo_modulu). Poté se pomocí Write_DATA zapíší postupně na všechny pozice u všech modulů patřičná čísla.

Následuje nekonečný cyklus pro skenování klávesnice – volání funkce Read_key (číslo_modulu). Tato funkce vrací hodnotu 8, pokud není stisknuté žádné tlačítko, popř. hodnoty 0–7 odpovídající patřičným klávesám. Pokud je nějaké tlačítko stisknuté, inkrementuje se zobrazovaná hodnota na příslušné pozici zobrazovače a počká se, až obsluha tlačítko uvolní. Pokud by hodnota měla být větší než 15 (tedy zobrazení F v hexadecimální soustavě), začíná se znova od nuly. Příkazem Write_DATA se zobrazí nová hodnota na příslušném zobrazovači a pomocí funkce Write_allLED se rozsvítí LED nad posledním stisknutým tlačítkem.

Knihovna TM1638.h obsahuje definici řídicích signálů a příslušných pinů mikrokontroléru. Standardně jsou použity bity PIND7 pro signál DIO, PIND6 pro CLK a PIND4 pro STB. Při připojení dalších modulů do série jsou pro konkrétní STB signály vyhrazeny tyto piny:

STB0 ~ PD4 (viz výše)

STB1 ~ PD5

STB2 ~ PD2

STB3 ~ PD3

STB4 ~ PD0

STB5 ~ PD1

Při používání knihovny je třeba dodržet pořadí pinů pro signály STB, neboť jsou v souladu s proměnnou typu pole STB_SEL, která se používá pro maskování příslušného portu při komunikaci s konkrétním modulem.

V knihovně naleznete nízkoúrovňové funkce pro čtení a zápis na sběrnici – TM1638_Write() a TM1638_Read(). Tyto slouží k fyzickému zápisu a čtení osmibitové hodnoty na a ze sběrnice. Mění taktéž nastavení příslušného DDR registru. Pokud se rozhodnete změnit port pro komunikaci s LED modulem, nezapomeňte provést úpravu i zde – makra DIO_IN a DIO_OUT. Další funkce – Write_COM() slouží k nastavení správného STB signálu pro adresovaný modul. Potom volá TM1638_Write() pro vlastní zápis dat na sběrnici. Pro čtení stavu kláves se používá funkce Read_key() s parametrem čísla modulu. Využívá příkaz 0x42. Přečte si odpověď ve formě 4 bytů. Vrací hodnoty 0–7 při stisknutém tlačítku, nebo 8, pokud žádné tlačítko nebylo stisknuto. Nejčastěji volanou funkcí bude Write_DATA(). Parametry jsou pozice, tedy kam hodnotu zapsat, dále jakou hodnotu – odkaz do „fontů“ a na který modul. Nezapomeňte na to zejména při použití funkce Write_ALLDATA(), která zobrazí obsah pole s uloženými hodnotami – uložené hodnoty musí být již převedeny do „fontové“ reprezentace, tedy znak „0“ zobrazíte odesláním hodnoty 0x3F, protože jednotlivé bity říkají, který segment má svítit a který má být vypnutý.

Ovládání samotných dvoubarevných LED umožňuje funkce Write_oneLED s parametry pozice, barvy a čísla modulu. Parametrem barva můžete LED zhasnout a rozsvítit jako červenou, zelenou nebo s oběma barevnými zdroji dohromady (zde ale převažuje intenzivnější červená barva). Pro usnadnění práce s LED je vytvořena funkce Write_ allLED() s parametrem pořadí LED a číslem modulu. Tato funkce rozsvítí jednu konkrétní diodu a ostatní zhasne. Poslední funkcí je init_TM1638(). Tato funkce nastaví obvod TM1638 do žádaného provozního režimu. První odesílaný parametr 0x8B slouží k nastavení jasu všech LED zároveň (nastavuje se poměr pulsů při PWM buzení/multitaskingu) – podstatné jsou poslední (spodní) tři bity – jas tak můžeme řídit v 8 krocích následovně:

Seznam funkcí s hlavičkami obsažených v TM1638.h určených pro používání programátory je zde:

AVRboard03 kit a modul s řadičem LED TM1638 - tab.2

  • unsigned char Read_key(unsigned char STB_CS);
  • void Write_DATA(unsigned char add, unsigned char DATA,unsigned char STB_CS);
  • void Write_ALLDATA(unsigned char*p,unsigned char cnt,unsigned char STB_CS);
  • void Write_oneLED(unsigned char num,unsigned char flag,unsigned char STB_CS);
  • void Write_allLED(unsigned char LED_flag,unsigned char STB_CS);
  • void init_TM1638(unsigned char STB_CS);

AVRboard03 kit a modul s řadičem LED TM1638 - kód

Další funkce jako třeba posun textu na displeji, změna jasu nebo zobrazování čísel přímo – nikoli přes převodní tabulku – si musí uživatel již vytvořit sám za pomoci výše uvedených funkcí. Pro modul (a nejen pro něj, je to pro všechny 7segmentové zobrazovače) existuje i tabulka alfanumerických znaků upravených pro 7segmentové zobrazovače.

Zapojení sestavy dvou modulů spolu s vývojovým kitem AVRboard03 vidíte na obr. 9. Jedná se o kit osazený mikrokontrolérem AVR ATMega32. Ke kitu je připojeno externí napájení 9 V, pro připojení zobrazovacích modulů je využit port v původní konfiguraci knihovny pro TM1638. Dále je ke kitu připojen JTAG adaptér přes sběrnici USB, která však není použita pro napájení zařízení z důvodu velkého odběru a zahřívání JTAG adaptéru. JTAG rozhraní je připojeno na port C, pouze signál RESET je připojen přes původní ISP10 konektor, neboť není standardně vyveden.

AVRboard03 kit a modul s řadičem LED TM1638 9.jpg

Obr. 9

Článek ukázal velmi snadné připojení levného modulu se 7segmentovými LED zobrazovači, samostatnými LED a tlačítky osazeném speciálním integrovaným obvodem TM1638 k vývojovému kitu AVRboard03 osazeném mikrokontrolérem ATmega32 nebo ATmega644p. Zdrojové kódy a knihovny pro ovládání displeje jsou již vytvořeny v jazyce C, upraveném syntaxí pro překladač CodevisionAVR [6] z původního GCC [7], takže jsou snadno pochopitelné a dostupné pro všechny úrovně programátorů a tvůrců embedded systémů.

Literatura

[1] internetový e-shop: http://www.dealextreme.com/

[2] výrobce TITAN MICRO ELECTRONICS: http://www.titanmec.com/

[3] internetový e-shop: http://www.dealextreme.com/p/8x-digital-tube-8x-key-8x-double-color-led-module-81873

[4] e-shop s kity AVRboard03 a příslušenstvím: http://shop.onpa.cz/

[5] Podpora pro EvB kity a příslušenství: http://shop.onpa.cz/?podpora, 28

[6] CodevisonAVR: http://www.hpinfotech.ro/

[7] GNU avrgcc – WinAVR: http://winavr.sourceforge.net/