Digitronové hodiny

Lukáš Olivík, UREL, FEEC, VUT Brno
l.olivikcentrum.cz

Obsah:

  1. Úvod
  2. Návrh koncepce a obvodového zapojení
  3. Firmware
  4. Závěr
  5. Literatura

Úvod

Digitron je v podstatě doutnavka s deseti katodami vytvarovanými do tvaru číslic. Používaly se před vynálezem sedmisegmentových LED displejů. Proti LED displejům mají celou řadu nevýhod, zejména velké rozměry, nutnost napájení relativně vysokým napětím asi 170 V a tím i obtížné buzení z číslicových obvodů, nebo náchylnost na poškození skleněné baňky. Všechny tyto nevýhody jsou ale kompenzovány jejich poutavým vzhledem a příjemným oranžovým světlem :-)

Už nějakou dobu mi v šuplíku leželo šest malých digitronů. Proto, když jsem se rozhodoval jaký projekt si vyberu, digitronové hodiny byly jasná volba. Výrazným zdrojem inspirace byla pro mě asi nejznámější česká konstrukce hodin od Stanislava Pechala [1]. Jako požadavky jsem si stanovil malé rozměry (takové, aby se celé hodiny daly případně zabudovat do 5,25" pozice pro optickou mechaniku v počítači), použití bateriově zálohovaného RTC obvodu, a možnost měření venkovní teploty pomocí oblíbeného OneWire čidla DS18B20.

Návrh koncepce a obvodového zapojení

Použité digitrony typu IN-12B mají výšku číslic 18 mm a jsou tzv. "top-view", to znamená že zobrazené číslice jsou v rovině s plošným spojem. Proto byla zvolena koncepce dvou plošných spojů nad sebou, propojených pomocí pinových lišt.

Na horním plošném spoji jsou umístěny digitrony. Jsou zapojeny multiplexně, tzn. stejné katody všech šesti digitronů jsou spojeny, a mikroprocesor přepínáním anod zajistí, že v každém okamžiku svítí pouze jeden digitron. To se projeví určitým poklesem jasu, ale na druhou stranu by se tím měla prodloužit životnost digitronů a snížit spotřeba. Vpravo jsou umístěna tři tlačítka, shora: MENU, UP, OK. Vlevo, symetricky k tlačítkám, jsou umístěny tři LED diody. Prozatím je osazena pouze jedna oranžová obdélníková LED, která plní funkci zobrazení znaménka minus např. při měření teploty. Na desce je místo i pro 3mm LED diody oddělující hodiny, minuty, a sekundy. Ty se však ukázaly jako nepotřebné. Plošný spoj je navržen přísně v retro stylu, jsou použity oblé čáry, na celém spoji nenajdete jediný spoj pod úhlem 45° nebo 90°. Návrh spoje byl dále ztížen nutností dodržovat izolační mezery alespoň 0,3 mm (s ohledem na provozní napětí), a také mým rozhodnutím, že "na tak jednoduchou věc přece musí stačit jednostránka...".

Horní deska: Schéma | DPS (600 dpi) | Osazení | BOM |

Osazené desky - pohled z horní strany
Osazené desky - pohled z horní strany

Hlavním prvkem spodní desky je mikrokontrolér Atmel ATmega16L nebo 32L [2] v pouzdru TQFP44. Na první pohled se může zdát, že je zbytečné použít MCU s tak velkým počtem vývodů, ale kvůli požadavku ponechat volné piny pro ISP, I2C, UART, PWM, ATD., a také kvůli jednostrannému plošnému spoji, zůstalo nevyužito pouze několik pinů. A to i přesto, že je ke spínání katod použit dekodér BCD na 1 z 10. Známý, dávno nevyráběný dekodér 74141, který je přímo určen pro spínání digitronů, jsem zavrhl pro jeho obtížnou dostupnost, a raději jsem zvolil běžný CMOS typ 4028 doplněný tranzistory MPSA42 se závěrným napětím 300 V.

Dále bylo nutné vyřešit připojení 5 LED diod a 3 tlačítka ke čtyřem GPIO pinům. Řešením je tzv. Charlieplexing, s využitím 3 pinů, čtvrtý pin slouží jako vstup pro tlačítka. Ve schématu i DPS je zatím neopravená chyba, "dvojtečka" složená z LED3 a LED4 je zapojena paralelně se znaménkem "minus", tj. LED5. Dvojtečky jsem však neosazoval, hodiny vypadají dobře i bez nich, tak tato chyba příliš nevadí.

Plošný spoj umožňuje použití krystalu pro MCU, přestože je použit interní oscilátor. Zbylo místo i pro microSD kartu, na kterou by bylo možné např. logovat teplotu. Slot pro kartu zatím není osazen. Karta je připojena na rozhraní SPI mikrokontroléru. Pro ISP programování slouží SV3. Je zapojen jako "úsporná verze", tj. polovina běžného desetipinového ISP konektrou. Nutností je, aby pin 3 v desetipinovém konektoru byl v programátoru spojen s GND, nebo je nutné zem spojit externě. Pin č. 1 je naznačen šipkou na DPS.

Jako obvod reálného času je použit levný typ PCF8563 od NXP [3], který je téměř pinově kompatibilní se zavedeným standartem firmy Maxim, ale má širší rozsah napájecího napětí. K MCU je obvod připojen přes I2C sběrnici. Obvod je zálohován lithiovou baterií CR2032. Byla použita baterie s pájecími vývody, a není tedy vyměnitelná bez pájení. RTC má zálohovací proud typicky 250 uA, a navíc dokáže udržet čas až do poklesu napájecího napětí k 1 V. Životnost baterie by tedy měla být dostatečná (podle [4] asi 60 let bez napájení...).

Hodiny jsou určeny k napájení bezpečným malým stejnosměrným napětím v rozsahu asi 6-15 V. Napětí pro digitální obvody je stabilizováno pomocí LM317 na hodnotu 3,3 V. Digitrony jsou napájeny zvyšujícím měničem s MC34063. Zapojení bylo převzato z [1]. Pouze bylo upraveno zapojení zpětné vazby tak, aby v případě selhání trimru nedošlo k nebezpečnému nárůstu napětí (bez zpětné vazby měnič dodá i 400 V). Dále byla zmenšena hodnota rezistoru připojeného ke Gate spínacího FETu. Tím se mírně zrychlilo uzavírání FETu, měnič nyní pracuje asi na 40 kHz a je tedy naprosto neslyšný.

Pro spínací tranzistor byl vyroben chladič na míru z hliníkového L-profilu 15x15x1,5 mm. Tento profil je umístěn přes celou šířku plošného spoje, a slouží zárověň k upevnění nožiček. Je bezpodmínečně nutné jej uzemnit, jinak dojde kapacitní vazbou k rušení krystalu RTC. Tranzistor má s tímto chladičem téměř pokojovou teplotu, postačil by i obvyklý malý chladič tvaru U. Stabilizátor LM317 není nutné vzhledem k malému odběru chladit vůbec.

Rozměry obou DPS jsou 142 x 38 mm.

Spodní deska: Schéma | DPS (600 dpi) | BOM | Osazení - TOP | Osazení - BOTTOM |

Osazené desky - pohled ze spodní strany
Osazené desky - pohled ze spodní strany

Firmware

Firmware je napsán v jazyce C a byl vyvíjen v AVRStudiu s nainstalovaným balíkem WinAVR.

Mikrokontrolér je taktován z interního RC oscilátoru na frekvenci 4 MHz. Tato frekvence byla zvolena, protože je vhodná pro komunikaci po sběrnici I2C na 100 kHz, OneWire, i UART (resp. RS-232) rychlostí např. 19 200 Bd. Digitrony zapojené v multiplexu jsou obsluhovány přerušením "Compare Match" Timeru0. Časovač je nastaven tak, aby přerušení bylo vyvoláno v intervalech 2 ms, takže při šesti digitonech je výsledná obnovovací frekvence 83 Hz. V přerušení se také detekují stisky tlačítek a zajišťuje případné blikání číslic.

V hlavní smyčce se v klidovém stavu periodicky čte čas z RTC obvodu a ukládá do globální proměnné disp k zobrazení. Podržením (spodního) tlačítka OK se nastavuje čas. Právě nastavovaná číslice bliká a lze ji změnit tlačítkem UP. K další číslici se přechází stiskem OK. Pokud není stisknuto po dobu 10 s žádné tlačítko, nastavení času se zruší bez uložení. Sekundy se vždy nastavují na nulovou hodnotu, proto je nutné nastavit "následující minutu", a tlačítkem UP odkládat vypršení doby 10 s. V okamžiku dosažení celé minuty se pak čas potvrdí tlačítkem OK. Nově nastavený čas pak 4 sekundy bliká, což lze přeskočit opětovným stiskem OK.

Komunikace s RTC byla s mírnými úpravami převzata z jiného projektu z předmětu MMIA [5]. Ke komunikaci je dále nutná knihovna pro I2C sběrnici [6].

Dále byla implementována podpora OneWire teplotního čidla. Protože bude připojeno pouze jedno čidlo, je zbytečné implementovat plnou podporu, a lze vystačit s několika základnímu funkcemi. Knihovna [7] byla upravena podle aplikační poznámky AVR318 od Atmelu tak, aby bylo přerušení zakázáno jen po nezbytně nutnou dobu, tj. vysílání nebo příjem jednoho bitu na sběrnici. Dále byla původní funkce zmer() rozdělena tak, aby nutné čekání 750 ms neblokovalo procesor. K převedení desetinné části hodnoty teploty jsem použil look-up tabulku namísto násobení desetinným (float) číslem. Tím se ušetří mnoho Flash paměti a také podstatně zrychlí vykonání funkce. Čidlo se připojuje na pin OC1A, tj. PD5. Podpora OneWire zabírá asi 900 B Flash paměti. Teplota se zobrazuje dvakrát za minutu, nebo ji ze zobrazit kdykoliv tlačítkem MENU. Zobrazení lze prodloužit z původních 8 sekund na 30 s tlačítkem UP, nebo zrušit tlačítkem OK.

Firmware v minimální konfiguraci s optimalizací na velikost -Os zabírá 2148 B, firmware s úvodní animací 2 a podporou teplotního čidla pak 3466 B.

Zdrojové kódy exportované do html v PSPadu: Hlavní soubor | Teplotní čidlo

Projekt pro AVRStudio: digitronky3.rar

Hotové digitronové hodiny
Hotové digitronové hodiny

Hotové digitronové hodiny
Detail - MCU, RTC s ladicím kondenzátorem, periferní konektor

Hotové digitronové hodiny
Hotové digitronové hodiny ještě jednou

Závěr

V článku byl představen celkem propracovaný návrh digitronových hodin malých rozměrů. Podařilo se splnit všechny stanovené požadavky. Zároveň zůstává prostor pro zlepšení firmwaru, určitě aspoň doplnění podpory parazitně napájených čidel, aby se čidlo dalo připojit jednoduše dvojlinkou.

Stránky autora věnované nejen digitronovým hodinám: http://ollie.xf.cz

Literatura

[1] Pechal, S., Jednoduché hodiny s digitrony [online]. [cit. 2011-05-03] Dostupné na http://elbastl.sweb.cz
[2] 8-bit AVR Microcontroller ATmega16 [online]. Atmel Corporation [cit. 2011-05-05]. Dostupné na http://www.atmel.com/dyn/resources/prod_documents/doc2466.pdf
[3] PCF8563 Real-time clock/calendar [online]. NXP Semiconductors [cit. 2011-05-10]. Dostupné na http://www.nxp.com/documents/data_sheet/PCF8563.pdf
[4] Battery Life Calculator for RTCs [online]. Maxim Integrated Products [cit. 2011-05-10]. Dostupné na http://www.maxim-ic.com/tools/calculators/battery.cfm
[5] Vyroubal, R., Nunvář, R., Porovnání RTC a SW hodin [online]. [cit. 2011-05-11]. Dostupné na http://www.urel.feec.vutbr.cz/MIA/2010/Nunvar/index.html
[6] Fleury, P., I2C Master Interface [online]. [cit. 2011-05-12]. Dostupné na http://homepage.hispeed.ch/peterfleury/avr-software.html
[7] Matuška, J., Jednoduché čtení teploty z čidla DS1820 [online]. [cit. 2011-05-15]. Dostupné na http://walda.starhill.org/elektronika-avr-gcc-stripky.html