Hodiny slouží spíše jako hračka, než něco užitečného, ale pro toho, kdo se potřebuje naučit BCD mohou představovat dobrou pomůcku. Převádět si jen tak čísla je docela nuda, ale tady je výsledek užitečná informace. A v pracovně se budou určitě vyjímat a budit pozornost.
Co znamená ta podivná zkratka BCD?
BCD je zkratka z anglických slov Binary Code Decimal což, přeloženo do češtiny, znamená Binární Dekadický Kód. A to ještě jednou přeložené znamená: Desítková čísla kódovaná binárními číslicemi. Vypadá to hodně složitě, ale je to vlastně jednoduché. Desítkové číslo se rozloží na jednotlivé číslice a ty se pak převedou do binární soustavy. Každý řád čísla je pak samostatně kódovaný. Příklad je na obrázku číslo jedna.
První dva sloupečky určují hodiny, další dva minuty a poslední dva sekundy. Pokud chceme zjistit přesný čas, postupujeme takto:
- v prvním sloupečku svítí dioda s hodnotou 1 to znamená desítky hodin,
zapamatujeme si 10
- ve druhém sloupečku svítí dioda s hodnotou 2 a to znamená jednotky hodin, zapamatujeme si 2
- 10 + 2 = 12 Je tedy 12 hodin
- ve třetím sloupečku svítí diody s hodnotami 1 a 4. 1 + 4 = 5 a protože to jsou desítky minut, pamatujeme si číslo 50
- dioda ve čtvrtém sloupečku má hodnotu 8
- 50 + 8 = 58 což znamená 58 minut
- pátý sloupeček má význam desítek sekund a ukazuje 4, proto si zapamatujeme číslo 40
- poslední sloupeček ukazuje jednotky sekund. Svítí hodnoty 1 a 8, zapamatujeme si 9
- 40 + 9 = 49
Hodiny tedy ukazují čas 12 hodin, 58 minut a 49 sekund.
Na první pohled je to složité, po nějaké době to člověk převádí automaticky a bez přemýšlení. Tato dovednost se bude hodit při práci s číslicovými obvody či počítači. Možná ne hned, ale časem určitě ano.
Jak tedy „vědecké“ hodiny postavit?
Hodiny se skládají ze dvou částí. První je vlastní elektronika, neboli hardware, a tou druhou je řídící program procesoru, čili software.
Obr. 2 - Schéma zapojení procesorové části hodin
Schéma je velice jednoduché, řídící procesor zajišťuje chod hodin, komunikaci s uživatelem, zvukový výstup a řízení diod. Diody jsou zapojené do matice a řízené multiplexem. To znamená, že nesvítí všechny najednou, ale rozsvěcují se postupně. Multiplex je řízen po sloupcích, proto svítí maximálně tři diody najednou. Propojka JP1 je použitá pro řízení jasu diod, změnou v programu ji však lze použít na libovolné jiné ovládání hodin.
Na obrázku číslo tři je schéma napájecího zdroje. Tato část zajišťuje napájení hodin z hlavního nebo záložního zdroje.
Obr. 3 - Schéma zapojení zdroje
Ve schématu upoutají pozornost pečlivého čtenáře diody. Je jich tu na první pohled nějak moc. Jsou však nutné a jejich význam je následující:
Dioda D1 chrání celé hodiny před přepólováním napájecího napětí.
Dioda D2 zajišťuje stejné napětí pro procesor a převodník úrovní.
Dioda D3 chrání stabilizátor napětí při chodu na záložní baterii a odděluje napájení převodníku a procesoru.
Dioda D4 chrání záložní baterii před nežádoucím nabíjením.
Kondenzátor C5 dodatečně filtruje napájecí napětí, C4 a C3 zajišťují stabilitu stabilizátoru tím, že případně VF rušení odvádějí k zemi a C6 ještě o něco zlepšuje filtraci výstupního napětí ze stabilizátoru. Kondenzátor C7 napájí procesor během proudové špičky po připojení převodníku. Bez něj se totiž procesor spolehlivě resetuje.
Na svorky P1 a M1 je přivedené napájecí napětí 8 až 20V stejnosměrných. Na svorky P2 a M2 je připojena záložní baterie o napětí maximálně 5V. Toto napětí nikdy nesmí být vyšší než 5V protože jinak se zničí procesor! Obě napětí jsou chráněná proti špatné polaritě. Je počítáno s normální baterií nikoli s akumulátorem, proto není řešené jeho dobíjení.
Co to je a jak funguje multiplex?
Diody jsou zapojené tak, že anody vedou na vývody PD3 až PD6 a katody na PB2 až PB7 přičemž katody v každém sloupci jsou spojené.
Procesor na svoje vývody PD3 až PD6 přivede kombinaci logických jedniček odpovídající číslu, které se má rozsvítit. Logická jednička znamená svítící diodu, logická nula zhasnutou. Zároveň na vývod PB2 přivede logickou nulu, na vývodech PB3 až PB7 je logická jednička.
Vždy svítí jen diody v jednom sloupečku, diody v ostatních sloupcích mají na své katodě kladné napětí a proto svítit nemohou. Tento stav trvá 800 mikrosekund, potom na 200 mikrosekund zhasnou všechny diody a připraví se svícení dalšího sloupečku. Toto krátké zhasnutí všech diod zabraňuje „duchům“ na displeji. Na vývodech PD3 až PD6 se nastaví další kombinace, na vývod PB2 se vrátí logická jednička a na vývodu PB3 se nastaví logická nula. Tím se může rozsvítit další sloupec diod a tím další číslo.
Když se zobrazí poslední sloupec, tak se program vrátí na začátek a znovu se rozsvítí sloupec první. A tak stále do kolečka. Rychlost přepínání sloupců je tak vysoká, že setrvačnost lidského oka způsobí dojem svitu všech diod, které svítit mají.
Proč se bez kondenzátoru C7 resetuje procesor?
Po připojení převodníku úrovní se nabíjí jeho vlastní filtrační kondenzátor. Toto nabíjení způsobí proudovou špičku a mžikový pokles napětí. Toto krátké poklesnutí stačí procesoru k resetu. Dioda D2 odděluje napájení procesoru a převodníku a kondenzátor C7 napájí procesor v době, kdy je napětí nízké.
K čemu je to piezo?
Piezo má jediný účel a to je tikání hodin. Je to asi trochu divné, ale tikající digitální hodiny jen tak někdo nemá. Navíc já se snažím pořád něco kolem sebe slušet, proto jsem udělala hodiny tikající. Kdo tikání nechce, nebo nepotřebuje, nemusí piezo vůbec osadit a nebo jej může použít na něco jiného.
Jak je zapojený komunikační konektor?
Konektor JP5 slouží ke komunikaci s počítačem. Je na něj vyvedené napájecí napětí a sériové linka. Tato linka má však úroveň TTL a není možné ji přímo připojit k počítači. Vždy se musí použít převodník úrovní, protože jinak může dojít ke zničení procesoru. Konektor je zapojený takto:
1 - napájecí napětí
2 - zem
3 - RxD
4 - TxD
Vývod číslo jedna je úplně vlevo. Směrem k napájecím přívodům.
Konstrukce a součástky
Hodiny jsem postavila na desce plošných spojů. Je jednostranná, ale obsahuje několik drátových propojek. Diodová matice by se totiž nedala jinak udělat.
Obr. 4 - Deska plošných spojů
Součástky se na desku připájejí takto:
Obr. 5 - Osazení desky spojů
Krabičku jsem nepoužila žádnou, protože „vědecké“ hodiny mají mít i patřičný vzhled Desku jsem před osazením součástkami nastříkala černou barvou ve spreji.
Použité součástky:
R1 až R5 1k
C1, C2 22p keramický
C3, C4 100n keramický
C5 220u elektrolytický
C6 2u elektrolytický
C7 100u elektrolytický
D1 až D4 1N4007
IC1 ATtinny2313 – s programem!
IC2 78L05
LED1 až 20 5mm 2mA
Q1 Krystal 4MHz
Dále lámací lišta, jumper, objímka pro procesor, držák baterií, piezo, přívodní vodiče…
Na obrázku s osazením desky jsou vidět propojky. Doporučuji je osadit jako první, protože jinak je k nim přístup jako k penězům. Zbytek součástek lze osadit vlastně v libovolném pořadí. Pečlivě je potřeba osazovat diody.
Obr. 6 - Sestavené hodiny
Na obrázku číslo šest jsou vidět moje hodiny. Rozložení součástek je mírně jiné proti návodu, protože D2 a C7 jsem doplnila až dodatečně. Po zkušenostech s resetováním procesoru.
Obr. 7 - Hodiny s převodníkem úrovní
A obrázek sedm ukazuje hodiny s připojeným převodníkem úrovní pro komunikaci. Je to stejný převodník, jako v článku z minulého týdne. Vznikl totiž pro tyto hodiny. Převodník lze použít i jiný, jen je potřeba pamatovat na to, že musí převádět jak signál TxD tak i RxD protože komunikace s počítačem je obousměrná.
Jak se vlastně hodiny ovládají a seřizují?
Jelikož se jedná o hodiny „vědecké“, zvolila jsem i „vědecké“ nastavování
Pokud chceme hodiny seřídit, je potřeba připojit na patřičný konektor převodník úrovní TTL – RS232 a hodiny připojit k počítači s terminálovým programem a nebo přímo ke skutečnému terminálu.
Po propojení vyšleme z terminálu znak „S“, tím hodiny poznají, že s nimi chceme komunikovat, zastaví tedy zobrazování času a odpoví výpisem menu.
Obr. 9 - terminálový program Terminal v1.9b
Lze zvolit tyto čtyři možnosti:
0 – korekce sekund
1 – nastavení času
2 – kalibrace
3 – opuštění menu
Korekce sekund znamená jejich vynulování, slouží k přesnému seřízení hodin.
Nastavení času je pravděpodobně jasné, hodiny se zeptají na přesný čas a ten si následně uloží.
Kalibrace slouží k přesnému nastavení počítání sekund, protože žádný krystal neběží naprosto přesně. Touto volbou lze tuto mírnou odchylku vyrovnat.
Po opuštění menu hodiny vypíšu pozdrav na rozloučenou a přestanou komunikovat, rozsvítí se displej a hodiny normálně běží.
Do menu se lze dostat opětovným vysláním znaku „S“ po sériové lince. Na jiné znaky hodiny nijak nereagují.
Komunikace s terminálem probíhá rychlostí 1200Bd, 8 bitů, 1 stop bit a bez parity.
Řídící program
Program procesoru obsahuje celkem čtyři části. První zajišťuje převod údajů pro displej, druhá část komunikuje s uživatelem po sériové lince, třetí počítá čas a čtvrtá řídí multiplex.
Když hodiny běží, pracuje program v „nekonečné smyčce“ během které se přepočítají hodnoty proměnných hodiny, minuty a sekundy do tvaru vhodného pro displej. Zároveň se tyto hodnoty upraví podle zapojení diod. Během tohoto režimu je program hlídaný watchdogem a v případě zabloudění se hodiny resetují.
Seřizování hodin řídí jiná smyčka, během té je watchdog vypnutý, protože občas dělal potíže při komunikaci s počítačem a je předpoklad, že by si případného bloudění programu obsluha všimla. Během tohoto režimu je zablokované řízení multiplexu a hodiny proto nesvítí.
Čas se počítá v přerušení od časovače TIMER1 který je nastavený jako čítač s předděličkou a zkráceným cyklem. Toto přerušení se vyvolává každou sekundu a během něj se započítá sekunda, tikne piezem a případně se započítají i minuty a sekundy. Dále se zde kontroluje korektní obsah proměnných hodiny, minuty a sekundy. V případě nesrovnalostí se nastaví do rozumných mezí. Toto přerušení má nejvyšší prioritu a je trvale aktivní. Hodiny běží i v okamžiku seřizování.
Multiplex je řízen časovačem TIMER0, který je také nastavený jako časovač s předděličkou a zkráceným cyklem. Přerušení se vyvolává každé 2ms a zajišťuje korektní řízení multiplexu a ošetřuje „duchy“.
Texty pro komunikaci s uživatelem jsou uložené do paměti EEPROM ze dvou důvodů. Tím prvním je značná úspora programové paměti a tím druhým je snadná lokalizace do jiného jazyka. Stačí jen změnit obsah EEPROM a hodiny budou komunikovat jinak. Je potřeba dodržet délku proměnných a případně změnit jejich dimenzování (příkaz DIM …) jinak dojde k nesprávnému vyčítání z paměti a „nesmyslné“ komunikaci.
Program jsem napsala v jazyce Basic v systému Bascom. Myslím si, že je relativně jednoduchý a pochopitelný.
Programování procesoru
Při programování procesoru je potřeba nastavit pojistky (fuses) takto:
LOCK BITS - nerozhoduje, lze cokoli. Jen pozor na případné aktualizace!
CKSEL - XT 3 - 8MHz
CLKOUT - DISABLE
CLKDIV8 - DISABLE
RSTDISB - nastavit na "RESET", jinak nelze dále programovat pres ISP!
BODLEVEL - 2,7V
WDTON - nerozhoduje, program jej stejně zapne.
EESAVE - NOT PRESERVED! Program do paměti zapisuje.
DWEN - DISABLE
SELFPRGEN - nerozhoduje, lepší je dat DISABLE kvůli ochraně paměti programu.
Závěrem
Hodiny zobrazují pouze čas, nemají budík ani nic jiného. Možná by jej šlo doplnit, ale myslím si, že to je zbytečné. Kdo jej bude chtít, může si jej do programu dopsat sám. Ačkoli místa v paměti už moc není. Můj program ovšem nemusí být jediný, lze si napsat svůj od začátku a tím jej možná i značně zkrátit a vylepšit. Fantazii se meze nekladou.
Při napájení z bezpečného zdroje jsou hodiny také bezpečné a jejich stavbu lze doporučit i pečlivým začátečníkům. Chce to jen trochu trpělivosti při práci.
Přeji všem, kdož si budou chtít hodiny postavit zdar a pevnou ruku při pájení diod. Hezky postavené hodiny se určitě budou v pracovně vyjímat
Přiložený archiv obsahuje všechny potřebné soubory pro stavbu hodin, schéma zapojení, desku spojů, program pro procesor, zdrojové soubory…
Odkazy:
- Původní stránky hodin - www.zirafoviny.cz
- Bascom - http://www.mcselec.com/
Komentáře
Námět na vylepšení
Konstrukce je pěkná, nicméně mě napadly tyto náměty na vylepšení pro další verzi
- Použít ATmega8 s RTC oscilátorem 32768 Hz, má to pro aplikaci hodin lepší výsledky.
- Použít DCF modul na nastavování času, komunikace s PC pak nebude moc potřeba.
Děkuji
A co potom bude ten procesor dělat, když za něj všechno spočítá RTC :-)
Ale vážně, úpravy možné jsou, ať si každý poslouží dle svého gusta. Jinak to seřizování po sériové lince je proto, aby to bylo "vědecké" ;-)
Celé hodiny jsou zároveň "školní" projekt, dost jsem se na nich naučila.
Trochu špatně si to
Trochu špatně si to pochopila.
Samostatný RTC tam nebude. Atmega8 umí s 32kHz krystalem pracovat jako RTC (zjednodušeně řečeno) a zbytek, řízen vnitřním oscilátorem se postará o zbytek :-)
Jinak povedená konstrukce. Několikrát jsem viděl nadšence takové hodiny a vlastně hodinky vestavit do pouzdra po starých větších náramkových hodinkách. Velmi efektně to pak vypadá :-)
Aha, no iniciativě se meze
Aha, no iniciativě se meze nekladou :-) Já jsem použila to, co jsem měla doma. Ačkoli je fakt, že více paměti by se hodilo. No ale nakonec se to vlezlo i do tohoto procesoru. Věřím, že program lze napsat i úsporněji, ale to já neumím.
Hodinky na zápěstí nenosím, odvykla jsem si. Většina z nich se stejně špatně ovládá levou rukou, takže nosím telefon. Ačkoli by možná někoho mohlo napadnout, udělat takové hodiny jako hodiny telefonu :-))
Dobrý den,chci se zeptat
Dobrý den,chci se zeptat kde najdu ten převodník úrovní pro komunikaci
Dobrý den,chci se zeptat
Dobrý den,chci se zeptat kde najdu ten převodník úrovní pro komunikaci.
Převodník
Například tady http://www.zirafoviny.cz/modules/news/article.php?storyid=58
Ale lze použít libovolný jiný převodník RS232<>TTL.