English version

Multifunkční digitální hodiny s AVR

    Úvod:
Tento návod popisuje konstrukci digitálních hodin reálného času se sekundami, stopkami, budíkem, odpočítáváním (časovačem), datem a dnem v týdnu s možností kombinovaného zobrazení data, dne a času. Automaticky přepínají letní a zimní čas, umí i přestupný rok. Řízené jsou mikroprocesorem AVR ATmega8A či ATmega8L. K zobrazení je použit šestimístný 7-segmentový LED displej, jehož jas lze regulovat. Hodiny jsou vybaveny i zálohovací baterií.
    Zapojení:
Hodiny mají šestimístný displej sestavený ze dvou třímístných vysocesvítivých zobrazovačů T-5631BUY-11. Displej je zapojen multiplexně. Lze použít i jiné typy s dostatečnou svítivostí nebo displej uspořádat jiným způsobem, např. ze tří dvoumístných nebo šesti jednomístných zobrazovačů. Anody jsou seskupeny po cifrách a jsou spínány pomocí tranzistorů T1 až T6 pro zesílení proudu (zapojené jako emitorové sledovače). Katody jsou seskupeny po segmentech a jsou buzeny přímo z mikroprocesoru IO1. Frekvence multiplexu je cca 100Hz. Hodiny jsou řízeny nízkofrekvenčním krystalem X1 s frekvencí 32 768 Hz. Aktivací bitu CKOPT jsou povoleny interní kondenzátory 36pF pro krystal a díky tomu nejsou nutné externí. V případě problémů s rozběhem oscilátoru zkuste připojit dva externí kondenzátory cca 22pF mezi každý vývod X1 a zem. Pro ještě větší přesnost hodin je možné vypnout interní kondenzátory 36pF deaktivací bitu CKOPT a zvolit externí kondenzátory zkusmo tak, aby odchylka rychlosti chodu byla co nejmenší. Piezoreproduktorek Rep1 zajišťuje zvukový signál budíku (alarmu) a signalizaci skončení odpočtu časovače. Současně se zvukovým signálem se rozsvítí i LED1. LED1 lze případně vynechat. Vývod 16 (port PB2), na kterém se v době zvukovéhi signálu objevuje log1, lze také využít k jiným účelům. Např. ovládání NPN tranzistoru napájícího cívku relé, které svým kontaktem zapíná motor, převracející kýbl s vodou, umístěný nad Vaší postelí :). Tento vývod je funkční i při provozu z baterie. Hodiny jsou ovládány pomocí tří tlačítek - Minuty, Hodiny a Mód. Tlačítka mají sériové odpory, které chrání porty IO1 v případě, že by byly nedopatřením nastaveny jako výstupy. Pullup odpory nejsou třeba, protože v IO1 jsou aktivovány ty vnitřní (20-50k). Obvod se napájí zdrojem 5V (např. se 7805). Odběr proudu záleží hlavně na odběru displeje, tedy i na nastaveném jasu. Při maximálním jasu je odběr cca do 60mA. Hodiny mají zálohovací baterii. Při provozu z baterie hodiny přecházejí do úsporného režimu - displej nesvítí. V tomto režimu jsou také zablokována tlačítka (bez rozsvíceného displeje by byly jen na škodu). Jediný případ, kdy tlačítko i při vypnutém displeji reaguje, je vypnutí budíku (alarmu). Zálohovací baterie může mít napětí 3 - 4,5V. Může to být např. jeden knoflíkový článek 3V, dva až tři jakékoliv články 1,5V, tři články NiMH nebo NiCd 1,2V nebo jeden článek Li-ion či Li-pol (3,6 - 3,7V). Odběr při provozu z baterie 3V je jen cca 5 - 12uA. Doba zálohování z 3V článku CR2032 s typickou kapacitou 200mAh je tedy teoreticky něco okolo 2,5 - 3 let. Pokud zní alarm během provozu z baterie, odběr stoupne na cca 1-2mA. Stav napájení je snímán vývodem 14 (PB0). Log 1 na tomto vstupu přepne hodiny na režim síť, log 0 přepne na režim baterie. Tento vstup lze případně využít i k vypínání displeje nebo krátkodobému zapnutí displeje při provozu z baterie (pokud má dostatečné napětí k rozsvícení displeje). Oba zdroje napájení - síťový i baterie - jsou sloučeny přes schottkyho diody D1 a D2. D1 zabraňuje zpětnému toku proudu z baterie do vypnutého síťového zdroje a také chrání hodiny před přepólováním. D2 zabraňuje nechtěnému dobíjení baterie během napájení ze sítě. Diody by měly mít co nejmenší propustný úbytek i závěrný proud.
    Program:
Program digitálních hodin je níže ke stažení v HEX souboru přímo pro nahrání do mikrokontroléru i jako zdrojový kód v Assembleru pro případné úpravy. Varování: Program je tak šílený, že pokud chcete zešílet, můžete se ho snažit pochopit :). Na obrázku níže je vidět nastavení konfiguračních bitů mikroprocesoru. Hodiny jsou řízeny nízkofrekvenčním krystalem 32,768kHz, který umožňuje mnohem nižší spotřebu při provozu z baterie. MCU je taktován na 4MHz. V nečinnosti během síťového napájení hodin přechází IO1 do sleep módu Idle. Při bateriovém napájení hodin přechází během nečinnosti do Power Save módu, což umožňí velmi nízkou spotřebu. Taktování MCU je v tomto stavu vypnuto a běží pouze asynchronní časovač/čítač 2.
    Ovládání:
Hodiny se ovládají pomocí tlačítek TL1-minuty, TL2-hodiny a TL3-mód. Tlačítka hodiny a minuty se používají v módu hodiny k nařizování hodin a minut. V jiných módech mají jiné funkce. Tlačítko mód přepíná postupně jednotlivé módy, kterých je celkem 8:
1. Hodiny
V tomto módu je zobrazen reálný čas ve tvaru "HH.MM.SS" (Hodiny.Minuty.Sekundy). Tlačítko Hodiny slouží k nastavování hodin. Tlačítko Minuty slouží k nastavování minut. Při jeho stisku se také nulují sekundy, což umožňuje přesné nastavení.
2. Zapínání automatického času a nastavení roku
Zde je možno zapínat a vypínat automatický přechod mezi letním a zimním časem a nastavit rok. Zobrazení je ve tvaru "Ač  'RR" (Automatický čas, mezera, apostrof, poslední dvojčíslí roku). Tlačítkem Hodiny zapínáme automatický čas. Pokud je zapnutý, zobrazí se "Ač", pokud je vypnutý, zobrazí se "_ _". Tlačítkem Minuty nastavujeme rok (jeho poslední dvojčíslí).
3. Odpočet
Nyní jste v módu odpočet. Ten umožňuje odpočítávání času od nastavené hodnoty k nule. Poté je spuštěn zvukový signál (a rozsvícena LED1). Zvukový signál lze zastavit stiskem tlačítka mód (po dalším stisku již toto tlačítko funguje normálně). Zobrazení je ve tvaru "HH.MM.SS". (Hodiny.Minuty.Sekundy.). První dvě tečky blikají o frekvenci 2Hz a odlišují tím mód odpočtu od módu hodin. Poslední tečka svým svitem signalizuje zastavení odpočtu. Tlačítko Hodiny zde slouží k přepínání cifer během nastavování počáteční hodnoty. Tlačítko Minuty slouží k nastavení. Právě nastavovaná cifra bliká frekvencí 5Hz. Maximální nastavitená hodnota je 99.59.59 (téměř 100 hodin). Po nastavení všech cifer se tlačítkem Hodiny opět vrátíme do módu odpočtu. Zde tlačítko Minuty slouží ke spuštění a zastavení odpočtu.
4. Kombinované zobrazení
V tomto módu se střídavě zobrazuje 1) reálný čas ve tvaru "HH.MM.SS" (Hodiny.Minuty.Sekundy) a 2) datum včetně dne v týdnu ve tvaru "AA.DD.MM." (Den v týdnu.Den měsíce.Měsíc.). Každý údaj je zobrazen po dobu 1s. V tomto módu slouží tlačítka Hodiny a Minuty k nastavení jasu displeje (Hodiny -, Minuty +). Jas lze nastavovat logaritmicky v 6 stupních: 1/1, 1/2, 1/4, 1/8, 1/16 a 1/32. Výchozí nastavení je 1/2.
5. Volba dne v týdnu a zapínání + režim alarmu
V tomto nastavovacím módu je možno nastavovat den v týdnu - pondělí až neděle (zobrazeno jako Po,Ut,St,Ct,PA,So,nE), zapínat alarm (budík) a volit jeho režim. Zobrazení je ve tvaru "AA  AL._" (Den v týdnu, mezera, AL., nastavení alarmu). Tlačítkem Hodiny nastavujeme den v týdnu. Tlačítko Minuty slouží k zapínání/vypínání alarmu a volbě jeho režimu: "AL._" = vypnutý alarm, "AL.1" = jednorázový alarm (poté automaticky nastaven na vypnuto), "AL.5" = alarm jen ve všední dny (Po-Pá ano, So-Ne ne), "AL.7" = alarm každý den. Výchozí nastavení je vypnutý alarm.
6. Den v týdnu a datum
Nyní je zobrazen den v týdnu a datum ve tvaru "AA.DD.MM." (Den v týdnu.Den měsíce.Měsíc.). Tlačítko Hodiny umožňuje nastavit den v měsíci. Tlačítko Minuty umožňuje nastavit měsíc.
7. Stopky
Stopky umožňují měřit čas s přesností na 0,1s. Maximální čas je 9.59.59.9 (téměř 10 hodin). Zobrazení je ve tvaru "H.MM.SS.X" (Hodina.Minuty.Sekundy.Desetina sekund). Tlačítko Minuty slouží ke spuštění a zastavení stopek. Tlačítko Hodiny slouží k nulování (běžící stopky jsou prvním stiskem zastaveny a dalším nulovány).
8. Alarm
Tento mód slouží k zobrazení a nastavení času budíku (alarmu). Zobrazení je ve tvaru "HH.MM.AL". Tlačítko Minuty nastavuje minutu budíku, tlačítko Hodiny nastavuje hodinu budíku.

Dalším stiskem tlačítka mód se opět dostáváte do 1. módu - hodiny. Zvukový signál budíku se vypíná také tlačítkem mód. Při dalším stisku má toto tlačítko opět normální funkci. Nastavení roku je důležité kvůli přestupnému roku (automaticky prodlouží únor na 29 dní). Pro správnou funkci automatického času je třeba správně nastavit datum i den v týdnu. Přesun na letní čas proběhne poslední neděli v březnu tím, že po 1:59:59 následuje 3:00:00. Přesun na zimní čas proběhne poslední neděli v říjnu tím, že po 2:59:59 následuje 2:00:00. (Dle pravidla platného pro téměř všechny evropské státy včetně ČR a SR od r. 1996.)

Celý program ke stažení:
Zdrojový kód v assembleru (ASM)
Přeložený v HEX souboru (3 566 Bajtů)
Zapisování programu do AVR se podrobněji věnuji zde.

Případným zájemcům mohu naprogramovaný mikroprocesor poslat. Více info zde.


Schéma multifunkčních digitálních hodin s AVR ATmega8A / ATmega8L


Nastavení konfiguračních bitů v progamu PonyProg.
(Hexadecimální hodnoty jsou Low Fuse: E3, High Fuse: C9.)


Hodiny - testování v kontaktním poli.


Hodiny vyfocené s dlouhou závěrkou foťákem v pohybu - je vidět ten multiplex :).


Displeje T-5631BUY-11 (v hodinách použity 2ks). Parametry: třímístný, tečky vpravo, zapojený multiplexně, žlutý (590nm), 2,1V typ., 2,5V max., 150-200mcd při 20mA, max. proud 30mA (150mA 0,1ms 1kHz), společná anoda, výška znaku 14,2mm.


Hodiny na desce


Testování hodin na desce


Hodiny zabudované do krabičky od disket


Hodiny spolu s adaptérem 5V.


Video - Test první pokusné verze s ATmega16


Video - Test druhé pokusné verze s ATmega16, přidán odpočet (bomba)


Video - Test hodin třetí verze, upravených pro ATmega8A / ATmega8L. Ještě zde chybí volba více režimů alarmu a potlačení nul na začátku.


Video - Test nově přidaných funkcí - automatický letní a zimní čas, přestupné roky.



Přidáno: 21. 4. 2012
zpět na úvodní stránku