Univerzální displej s LED segmentovkami 2,3"

Ke vzniku této konstrukce mne přivedlo několik různých podnětů : hledal jsem dobře čitelné hodiny, na které bych viděl v ložnici i bez brýlí, současně jsem chtěl vyzkoušet nějakou konstrukci s procesory AVR a prakticky otestovat systém na tvorbu plošných spojů KiCAD, který by nahradil můj stařičký Eagle verze 3, který mám sice legálně zakoupený, už bohužel nejde spustit na moderních počítačích. Konstrukce měla být také co nejuniverzálnější, tak aby splňovala různé požadavky na zobrazování, např. aktuálního času nebo teploty na velkých LED sedmisegmentovkách.

Pro ovládání sedmisegmentovek jsem použil osvědčený statický budič MM5450, resp. MM5451. Tento budič již hodně pamatuje, ale stále se vyrábí a novější obvod s obdobnými vlastnostmi jsem nenašel. Obvod má totiž sériové rozhraní, takže pro ovládání stačí dva vodiče (data a hodiny), umí budit 34, resp. 35 segmentů (verze MM5451) a zejména umí ovládat proud segmenty = jas displeje. Protože velikost plošného spoje (cca 200 x 70 mm) byla dána velikostí sedmisegmentovek, zbylo na něm dost místa pro různé funkce - teploměr s DS18x20, budiče pro externí sběrnici 1-Wire, interní I2C sběrnice, např. pro připojení modulu hodin reálného času s DS3231, tlačítka pro ovládání, malý reproduktor/bzučák a konečně i konektor pro programování mikrořadiče přímo v konstrukci (pomocí USBASP a příslušné redukce z 10pin na 6 pin) pro snadnou tvorbu programu. 

Jako mikrořadič jsem zvolil ATtiny2313/4313 s ohledem na dostatečný počet I/O vývodů a na první pohled vyhovující paměť programu 2KB, resp. 4KB. Tato velikost mi přišla adekvátní, protože jsem vycházel z konstrukcí, které jsem realizoval s AT89C2051. Je ovšem rozdíl, zda program píšete v assembleru 8051 anebo použijete Arduino IDE s jazykem Wiring. Pro jednoduché konstrukce, jako teploměr či hodiny, je tato kapacita plně dostatečná, ale pokud budete přilinkovávat knihovny a přidávat další funkce, narazíte na paměťové limity rodiny ATtiny. Proto bych v dnešní době pro složitější funkce asi volil spíše ATmega, např. ATmega328p.

Pro vývoj programu používám Arduino IDE s ATTinyCore, programování přes USBASP v2.0 s redukcí z 10 na 6 pinů. Ukázkový program, který měří teplotu pomocí čidla DS18B20 a obsahuje i popis vývodů a překódovací tabulku se zobrazovacími rutinami, naleznete pod textem.


Popis zapojení:

Mikrořadič IC2 využívá externí krystal Q1, ale pro méně přesné aplikace stačí interní oscilátor. Reset zajišťuje RC člen R1-C1 s možností externího resetování tlačítkem SW4. Program mikrořadiče může být nahrán pomocí AVR ISP rozhraní na konektoru J5. Při programování nesmí být stisknuto žádné tlačítko, zejména SW3. 

Zobrazování má na starosti statický budič MM5450. Informace o zobrazení segmentu dostává pomocí jednoduché sériové sběrnice realizované PB0 (data) a PB1 (hodiny). Jas segmentů se řídí trimrem P1, ale je možnost jej částečně ovlivnit i prostřednictvím pinu PD5, např. pomocí PWM. Jumper JP1 je nutno přerušit, pokud použijeme variantu MM5451, která má místo "povolovacího" vstupu výstup pro 35. segment. Protože desetinná tečka má menší počet LED diod v segmentu, je možné zmenšit ztrátový výkon budiče IC1 pomocí zenerových diod ZD1 až ZD6. Za normálních okolností, tj. pokud nebudeme tečky nadměrně používat, je lze nahradit drátovou propojkou. Čtyři sedmisegmentovky obsadily celkem 32 driverů, jako segment 33 je zapojena dvojice LED diod mezi segmenty (pro zobrazení "dvojtečky" v hodinách) a segment 34 tvoří jedna samostatná LEDka, umístěná nad "dvojtečkou", např. pro indikaci buzení. 

Konstrukci lze použít i v režimu "slave" bez mikrokontroleru - osadí se jen sedmisegmentovky, IC1 a řízení jasu. Pro připojení k nadřízenému systému se použije konektor J2.  

Interní teplotní čidlo DS18B20 je připojeno k pinu PD6. Externí 1-Wire sběrnici pro další čidla lze připojit na konektor J3, Buzení 1-Wire sběrnice obstarává budič IC5A (piny PB2 a PB3), IC5B zprostředkovává oddělení vstupu 1-Wire sběrnice od mikrořadiče (PB4). D8, D9, D10, C4 a R10 mají ochrannou funkci (přepětí na sběrnici), R8 (4k7) zajišťuje pull-up 1-Wire sběrnice. R9 slouží k napájení teplotního čidla, např. pro měření vyšších teplot, protože v tom případě není možné použít parazitní napájení.

Na konektor J4 je možné připojit např. externí RTC hodinový obvod, např. s DS3231, který je přesnější než použitý DS1307 anebo krystalový oscilátor s Q1, a navíc umožňuje zálohování při výpadku napájení. Pro jeho ovládání jsou vyvedeny piny PD0 a PD1, které by v tomto případě emulovaly sběrnici I2C. Stejně tak se dá konektor J4 využít pro sériovou komunikaci s jinými systémy (signály TxD a RxD). 

Pro ovládání funkce mikrořadiče lze použít trojici tlačítek s předpokládaným významem "Select" = výběr funkce SW1 (PD2), "+" = SW2 (PD3) a "-" = SW3 (PD5). Pro generování zvuku (buzení) lze použít jednoduchý obvod s reproduktorem buzeným tranzistorem T1 z pinu PD4. Pokud použijete místo reproduktoru BZ1 bzučák, je potřeba doplnit ochrannou diodu zapojenou antiparalelně k BZ1 zabraňující poškození tranzistoru T1 přepětím z cívky bzučáku při jeho vypnutí. 

Napájecí napětí displeje je závislé na použitých sedmisegmentovkách, zpravidla musí být okolo 12V (jeden segment tvoří čtyři LED diody v sérii). Stabilizaci pro napájení mikrořadiče a dalších obvodů zajišťuje IC3 (78L05).


Upozornění na chybu v zapojení:

Pokud použijete místo reproduktoru BZ1 bzučák, je potřeba doplnit bzučák BZ1 o antiparalelně zapojenou ochrannou diodu (univerzální dioda, např. 1N4001). Diodu připájejte přímo na vývody bzučáku.


Přeji mnoho úspěchů při stavbě a v případě potřeby jsem k dispozici na mailu kaspar(taková zatočená věc)pk.cz

Pavel Kašpar