Verze pro tisk

Čtyřmístný sedmisegmentový LED displej s MC14489

Má-li nějaký systém komunikovat s člověkem, potřebuje kromě vstupního zařízení, kterým může být například klávesnice z předchozího článku, také zařízení výstupní. Tím může být nějaký druh displeje. Jsou-li výstupem systému pouze číselné údaje, lze k jejich zobrazování použít například sedmisegmentové LED displeje. Výhodou sedmisegmentových LED displejů je nízká cena a při dostatečné velikosti segmentů též velmi dobrá čitelnost zobrazených údajů. Kdysi se mi dostalo do rukou jedno průmyslově vyráběné zařízení, které bylo osazeno několika vícemístnými sedmisegmentovými displeji. A jak už je u mě zvykem, vzala jsem šroubovák a podívala se milému zařízení do útrob. Velmi mě na něm zaujal způsob ovládání displejů. Displeje byly ovládány obvodem MC14489, což je řadič LED displejů. Obvod umožňuje řídit až 5 sedmisegmentovek nebo různé kombinace sedmisegmentovek a samostatných LED. Taktéž lze tyto obvody řadit do kaskád a řídit tak mnohamístné LED displeje. S mikroprocesorem komunikuje obvod sériově po třech vodičích, to je výhodné zejména v aplikacích kde není nožiček nazbyt. Obvod mě zaujal natolik, že jsem se ho rozhodla použít v jedné aplikaci, kde jsem potřebovala ovládat čtyřmístný sedmisegmentový LED displej. Jak je vidět ze schématu, je zapojení displeje velmi jednoduché.

Schéma displeje
Obr.: Schéma displeje

Ve schématu jsou uvedeny pouze součástky týkající se displeje a součástky nutné pro funkci mikrokontroléru. Funkce rezistoru R1, kondenzátorů C1, C2, C3, C7 a krystalu 10MHz byla vysvětlena v článku Jednoduchá klávesnička. Sedmisegmentovky jsou se společnou katodou. Výhodnější je použít přímo čtyřmístný displej pro multiplexní provoz, odpadne tím spousta spojů na desce. Já jsem ale čtyřmístný displej neměla a proto jsem použila čtyři jednomístné. Odpor R2 slouží k nastavení jasu displeje. Při uvedené hodnotě 2k je špičkový proud jednotlivými segmenty displeje přibližně 15mA. To je hodnota plně postačující pro běžné typy displejů, při použití vysoce svítivých typů lze hodnotu R2 libovolně zvýšit a snížit tak max. proud displejem. Nejlepší je nastavit R2 zkusmo tak, aby byly údaje na displeji dobře čitelné a zároveň displej moc "nežral". Kondenzátor C4 blokuje napájení řadiče displeje, na desce ho umístíme co nejblíže k napájecím vývodům řadiče. K mikrokontroléru je řadič připojen sériově třemi vodiči DATAIN, CLOCK a /ENABLE. Signál DATAOUT jsem nevyužila. Sériové rozhraní řadiče je kompatibilní s rozhraními SPI a MICROWIRE. Má-li tedy mikrokontrolér, k němuž řadič připojujete, implementováno některé z těchto rozhraní, lze jej s výhodou použít, zjednodušší se tím softwarová část displeje. Já jsem použila mikrokontrolér AT90S2313, který tato rozhraní nemá a musela jsem jej tedy realizovat programově.

Při psaní programového vybavení pro obsluhu displeje se neobejdeme bez manuálu k použitému řadiči MC14489. Lze jej nalézt na internetu případně jej mohu poslat E-milem. V manuálu je podrobně popsána funkce řadiče, jak jej nakonfigurovat a obsluhovat, myslím, že je tedy zbytečné to zde popisovat. Uvedu jen stručný popis programu, který jsem pro obsluhu displeje napsala.

Program pro obsluhu displeje jsem napsala opět v assembleru. Výpis programu je v souboru displ1.avr Tři procedury se týkají komunikace s řadičem. Procedury jsou z důvodu úspory místa v programové paměti do sebe všelijak vnořené, snad mě za ten výtvor nikdo nepokouše :) Jedná se o tyto procedury:

LdLED1 Tato procedura slouží k poslání konfiguračního bytu řadiči MC14489. Procedura využívá část procedury LdLED3.
LdLED3 Tato procedura slouží k poslání tří datových bytů řadiči MC14489.
LdLED Tato procedura pošle řadiči MC14489 tři datové a jeden konfigurační byte. Procedura volá procedury LdLED3 a LdLED1.

Dále program obsahuje 7 procedur pro převody mezi dekadickou a hexadecimální soustavou a pro zobrazování všelijakých údajů na displeji:

D2BCD Tato procedura slouží k převodu dekadického čísla v rozsahu 0÷99 v registru R17 na těsný BCD v registru R18.
D3BCD Tato procedura slouží k převodu dekadického čísla v rozsahu 0÷255 v registru R17 na těsný BCD v registrech R18 (stovky) a R17 (desítky, jednotky).
W2LED Tato procedura zobrazí na displeji dekadické číslo v rozsahu 0÷9999 předané v registrech R18:R17.
C2LED Tato procedura zobrazí na displeji časový údaj předaný v registrech R18 (hodiny) a R17 (minuty). Zaroveň bliká desetinnou tečkou na třetí pozici displeje. Blikání tečky je řízeno podle hodnoty proměnné TIMER, která ale není jinde v programu uvedena. Tečka nesvítí při TIMER<20 a svítí při TIMER>=20. Použijete-li tedy tuto proceduru, je nutno proměnnou TIMER nadefinovat a měnit její obsah tak, jak chcete aby tečka blikala nebo proceduru modifikovat dle potřeby.
D2LED Tato procedura zobrazí na displeji dekadické číslo v rozsahu 0÷255 předané v registru R17.
H2LED Tato procedura zobrazí na displeji hexadecimální číslo v rozsahu 0÷FF předané v registru R17.
P2LED Tato procedura zobrazí na displeji stav přepínače ON/OFF podle hodnoty v registru R17. Je-li R17=0, zobrazí se "OFF", je-li R17<>0, zobrazí se "on".

Pro obsluhu displeje jsou napevno vyhrazeny čtyři registry R24 až R27 nazvané LEDB1 až LEDB4. Dále je definováno šest maker pro ovládání vodičů /ENABLE, CLOCK a DATAIN řadiče MC14489. Pokud použijete pro komunikaci s řadičem jiné vývody procesoru, stačí je předefinovat v těchto makrech a v počáteční inicializaci portů na začátku programu.

Obvod MC14489 je na českém trhu poměrně těžko dostupný, proto jsem pro méně náročné aplikace navrhla ještě jednodušší a levnější variantu displeje, ale o té až příště.