25. 3.2012 - verze SW 1.1 - oprava alarmu (při současném zobrazování datumu docházelo k přepsání časových údajů což vyrušilo alarm)
13. 4.2012 - verze SW 1.2 - oprava zobrazování mínusu záporné teploty, přidáno rychlé vypnutí/zapnutí alarmu pomocí DO tl.13 (MUTE)
28.10.2012 - verze SW 1.3 - oprava při přechodu z letního na zimní čas (docházelo z ke zbytečnému přepisování EEPROM a překročení počtu zápisů) - hodiny se přenastavovali 3 -> 2hod.
5. 4.2013 - verze SW 1.4 - oprava -> prodloužení času pro správný převodu teploty z DS18B20 (750ms - 12bit), k programu přidány screeny z nastavení fuses
V. Vavřík ladavav@seznam.cz nabízí
4ks profi vyrobených DPS pro hodiny a 4ks profi DPS dálkového ovládání k těmto hodinám. Kdo má zájem, nechť se na něj obrátí.
Pár let mě sloužily starší hodiny s červeným LED prťavým displejem 14,2mm. Používal jsem je jen pro zobrazení času, budík nefungoval nejlíp a po výpadku se
většinou zasekl a hulákal dokud ho někdo nevypnul ... nejen proto jsem se rozhodl pro stavbu vlastních hodin.
Hodiny jsou řízené RTC obvodem DS1307 (zálohovaný baterkou), čas je zobrazován na displeji 38mm a sekundy na 60ti LEDkách v kruhu.
LED i displej jsou dvoubarevné (Red/Green). Jas LED i displeje je řízen pomocí PWM dle okolního osvětlení (snímá fotoodpor).
Dále je v hodinách vestavěné teplotní čidlo DS18B20 pro In teplotu a konektor pro připojení druhého čidla pro Out teplotu.
Nastavení parametrů (datum, čas, alarm, barev a zobrazení, teplot, ... ) lze provádět pomocí 4 tlačítek na zadní straně hodin, nebo snadněji přes univerzální dálkové ovládání.
Hodiny obsahují i 2 výstupy přes optočlen, které spínají při aktivaci alarmu.
Hodiny umí samy bez zásahu změnit čas mezi letním a zimním (lze povolit nebo zakázat) a to až do roku 2027.
Funkce:
O vše se stará procesor ATmega168. Po zapnutí napájení zobrazí na displeji "PAJA" pak "Ho1.0" (HOdiny verze 1.0).
Poté v nekonečné smyčce testuje tlačítka a IR DO a čeká na přerušení od DS1307, které každou sekundu bliká 2 sekundovými LED a zároveň přerušuje chod programu k přečtení
dat z DS1307, jejich zpracování a vyslání na displej a LED.
Displej je ovládaný přes posuvné registry 74HC595 a spol. anody jsou přes tranzistory BD140 ovládány procesorem pomocí PWM regulace. Obdobně je tomu i u 60-ti sekundových LED.
O snímání intenzity okolního osvětlení se stará fotoodpor, jehož nastavení lze doladit trimrem.
Zvukový výstup REP1 je přes tranzistor spínán při potvrzení nastavení v menu (krátkým pípnutím) a pak při alarmu delším opakujícím pípáním.
Hodiny je možno napájet AC i DC 7-12V. Použil jsem můstkový usměrňovač do 8A, o stabilizaci na 5V se stará 78S05 (do 2A) - oboje součástky jsou trochu předimenzované, ale raději mám rezervu.
Časem se ukázalo použití procesoru ATmega168 jako nedostačující - dokázal jsem ho kompletně zaplnit, a to bych ještě nějakou drobnost rád přidělal ...
Krátká ukázka běhu hodin
každou čtvrt minutu se zobrazí datum (den:měsíc), pak jsem přepnul LEDky na inverzní režim a zpět do druhého řežimu, kdy je každá 5-tá LED zobrazená opačnou barvou. Potom menu, zobrazí se krátce SEt, změnil jsem barvu dISPleje na grEEn (zelenou), LEDky jsem dal přes den (6 až 18hod) red a noc green. Projel jsem menu s mezi-zastávkou zakázání změny času a ven z menu. Zobrazení venkovní o a vnitřní i teploty.
Nastavení hodin:
Nastavení lze provádět pomocí tlačítek na zadní straně hodin nebo komfortněji pomocí univerzálního dálkového ovládání.
TL.3 - Menu (vstup i výstup)
TL.2 - OK potvrzení navolených hodnot
TL.1 - plus +
TL.4 - mínus -
Jinak lze v režimu hodin stiskem tlač.2 zobrazit na 2s Out teplotu a tlač. 1 In teplotu (v případě nastavení zobrazení teplot ji tímto zruší a přepne na hodiny)
Dálkové ovládání jsem použil kupované univerzální DO SilverCrest nastavené na kód 5000 (nějaký satelit).
Protokol je podobný Philips RC-5, Adresa je 10 (nevyužívá se) a jednotlivé kódy
1 tl.1 L.dIn (1 sekundová LED, kde je zvýrazněná 0,15,30,45 LED opačnou barvou)
2 tl.2 Ld.In (1 sekundová LED, kde je zvýrazněná každá pátá LED opačnou barvou)
3 tl.3 L.d.In. (inverz - svítí 59 LED zvolenou barvou a běhá jedna zhasnutá)
4 tl.4 každou 15.sekundu zobraz datum (den : měsíc) - lze měnit jen přes DO
5 tl.5 na 0,5s invertuje výstupy Opto1 a 2
7 tl.7 teplota Out
8 tl.8 teplota Oboj (In/out)
9 tl.9 teplota In
12 standby (off) ukončení sirény alarmu nebo ukončení menu
13 mute rychlé vypnutí/zapnutí alarmu
16 volume + doprava
17 volume - doleva
32 program + nahoru
33 program - dolu
82 menu vstup a výstup do menu
87 OK potvrzovací tlačítko v menu
Popis menu:
Po vyvolání menu se na chvilku zobrazí
SEt a pak skočí na první položku. Mezi položkami lze přecházet (+ -), teprve po stisknutí OK se vstoupí do jednotlivých podmenu
- dISP > OK > rEd (Red displej) > grEE (Green displej) > d gr (den 6-18h Green, noc Red) > d rg (den 6-18h Red, noc Green)
- LEd > OK > rEd (Red LED) > grEE (Greeen LED) > d gr (den 6-18h Green, noc Red) > d rg (den 6-18h Red, noc Green)
- LdIn > OK > L.dIn (1 sec. LED - opačná barva 0,15,30 a 45 LED) > Ld.In (1 sec. LED - opačná barva každá pátá LED) > L.d.In. (inverze běhá zhasnutá LED - pouze jedna barva)
- CAS > OK > nastavení času HODINY : MINUTY , při nastavení minut se automaticky vynulují sekundy
- dAtE > OK > nastavení datumu DEN : MĚSÍC > OK > ROK
- LEZi > OK > Ano > nE (povolení nebo zakázání automatické změny mezi LEtním a ZImním časem)
- tEP > OK > out (venkovní teplota) > in (vnitřní teplota) > oboJ (střídání Out a In po 10s) > nic (zakaž teplotu - zobrazí jen hodiny)
- AL1 > OK > nastavení alarmu HODINY : MINUTY > AL1.x (x= druh alarmu 0=nikdy, 1=piezo, 2=piezo+opto, 3=opto) > AdEn (Alarm DEN v týdnu) > AD1. (který den má sepnout 0=vždy, 1-7=Po-Ne, 8=Po-Pá, 9=SO+NE)
V případě číselného nastavení se nejdřív zobrazí poslední uložený údaj
Konstrukce:
DPS jsem odzačátku navrhoval do krabice obyčejných ručičkových hodin
(z Kauflandu asi za stovku), tomu je přizpůsobeno i rozmístění některých součástek a konektorů.
DPS je sice jednostranná
(i tak to byl docela mazec takovej kousek vyrobit) a její průměr je 220mm. Ale má větší množství drátových propojek.
V první řadě bylo nutné zkontrolovat DPS na případné vady z výroby a zkraty. Pak osadit všechny drátové propojky, část propojek se dá elegantně nahradit nulovými
SMD odpory vel. 1206 (u posuvných reg. a displejů). Pak bylo potřeba osadit věškerou SMD drobotinu a další drobné součástky.
Po osazení displejů jsem osadil 4 LED (0, 15, 30, 45s) do stejné výšky jako displeje. Pak jsem si nastrkal do DPS vždy 14 LED a pomocí "šablony" z kousku plastu
vytvaroval a dal všechny do stejné výšky (otočil jsem DPS LEDkama na rovnej stůl).
Kondenzátory, můstek, stabilizátor, přijímač DO se osadí naležato, aby nic nepřevyšovalo displeje. Stabilizátor se na chladiči prakticky vůbec nezahřeje, jen při
inverzním rozsvícení a plném jasu LED začíná hřát. K odvodu tepla taky napomáhá rozlitá měď (Gnd) z druhé strany DPS.
Před osazením svorkovnic a konektorů je dobré si plošky předem pocínovat. Piezosirénku jsem nakonec umístil taky ze strany spojů (vzadu je oproti němu díra v krabici).
Spotřeba:
Při napájení 12V DC, zatmaveném 2mm plexiskle a červeném displeji a LED:
"šero" - bez přímého slunečního světla - 0,06A
posvícení lampou na čidlo - 0,16A
inverze červené LED (59 svítí) a maximální jas - 0,6A
zelený displej a LED mají nepatrně menší spotřebu
Program:
Po nastavení vyšle procesor do DS1307 nastavení výstupu SQWE na 1Hz (tento výstup pak ovládá sekundovou dvojtečku a externí přerušení).
Dále se na displeji zobrazí "PAJA" po 0,5s "Hod.1"
(Hodiny verze 1), načtou se informace o čidlech teploty DS18B20 a dna displeji doplní des. tečky že načtení proběhlo v pořádku.
Program povolí všechny přerušení a přejde do nekonečné smyčky testování tlačítek, infra DO, přechodu letní/zimní čas, teploměru a sirény alarmu.
Tento chod je každou sekundu přerušen DS1307 (
sekundove_preruseni), ze které se přečtou data o čase a datumu, převedou z BCD na DEC. Zavolá se podprogram osvětlení , led ,
je-li zakázán teploměr tak zobraz hodiny nebo v přípdě povolení zobrazení datumu, každou 15.sekundu, zobraz datum (den:měsíc) a je-li povolen alarm1 tak se podívej jestli nenastal jeho čas.
Při čtení a zobrazení teplot je zakázáno externí přerušení od DS1307
(aby se nenarušovalo čtení a zobrazování teploty). Stejně tak i při aktivním zvukovém alarmu.
Hodiny: mpřevede _min a _hod na BCD a rozdělí na 2 jednociferné čísla. Z tabulky pak vybere příslušnou hodnotu zobrazených segmentů a vyšle na displej.
Alarm1proved: Porovná shodu Alarm1_day s Weekday (dnem v týdnu), shoduje-li se tak porovnej shodu hodin, minut, sekund a druhu alarmu - ten pak vykonej.
Menu: lze vyvolat tlačítkem 3 nemo z DO kódem 82. V menu je taktéž zakázáno externí přerušení. Zobrazí se krátce SEt, pípne piezo a čeká na uvolnění tlačítka nebo povelu z DO.
Poté v nekonečné smyčce testuje a upravuje hodnotu reg. menu + nebo - a taky při stisku tlač.3 nebo DO okamžitě opouští menu, aktivuje ext. přerušení a vrací se na hodiny.
Infra_do: přečte data z do (protokol RC-5), případný kód povelu se zapisuje do command.
Osvětlení: přečtě hodnotu z fotoodporu (10bit.), upraví a převede na 8bit. a záměrně sníží hodotu pro osvětlení LED (mají větší intenzitu než displeje).
Dále dle nastavení testuje jakou barvu má mít displej (i podle hodin), LED, a dle nastavení LEdInverz zvýrazňuje opačnou barvou každou 15.tou sekundu nebo každou 5 sekundu.
Led: v závislosti na nastavení LEdInverz a počtu sekund odesílá na pos. registry data o rozsvícených a zhasnutých LED.
Cti_teplotu: čte teploty z čidel DS18B20, v případě chyby zobrazí Err1 nebo 2. Jinak dle nastavení teploměru načtenou hodnotu převede ...
Prepocitej: načtenou hodnotu z čidel přepočítej na DESítky, JEDnotky, TEC-desetiny a znaménko Tep_nula (10 je +, 11 je -).
Zobraz: načte z tabulky a zobrazí data o teplotě. Dle nastavení teploměru zobrazí
o nebo
i před teplotou. Mínus se zobrazuje na segmentu a
(nahoře, aby se nehádalo s údajem Out nebo In)
Letni_zimni_cas: je-li povolen a je 3 hodina ráno, tak zkontroluj měsíc a zda už nebyl převod proveden (Leto_zima=3 nebo 10). Jestli nebyl, tak dle shody roku a
příslušného dne (poslední neděle v měsíci) připočti nebo odečti hodinu a nastav informaci o změně času (Leto_zima=3 nebo 10).
Displej: má za úkol jen vyslat data na posuvné registry.
Program hodin pro ATmega168 - Soubory BIN, HEX a BAS (zdroják z BASCOM).
Schéma zapojení Hodin (zmenšené)

Zde je návrh plošného spoje o rozměrech 220 x 220 mm.
Seznam použitých součástek :
R1-R60 - 330 SMD vel. 1206 60x
R61,62,66,67,69,70,74,75,
77,78,82,83,85,86,90,91 - 180 SMD vel. 1206 16x
R63-65,71-73,79-81,87-89 - 180 12x
R68,76,84,92,94 - 470 SMD vel. 1206 5x
R93 - 470
R95-R101 - 10k SMD vel. 1206 R96-R98 neosazovat 6x
R102-R104 - 4k7 SMD vel. 1206 3x
R105 - 220 SMD vel. 1206
R106-R107 - 330 SMD vel. 1206 2x
R108-R111 - 1k SMD vel. 1206 4x
P1 - 5k TRIMR PT-6V
RFOTO - VT43N1 FOTO odpor
C1-13,C16,C17 - 100n SMD vel. 1206 15x
C14, C15 - 470M/25V 2x
C18 - 220M/25V
C19 - 4M7/10V SMD tantal.
D1-D60,DT1,DT2 - L-59EGW (LED 5mm Red/Green SC) 62x L-59EGW (TME)
DISP1-4 - SBA15-11EGWA (LED displej 38mm Red/Green SA) 4x SBA15-11EGWA (TME)
T1-T4 - BD140 4x
T5 - BC817
M1 - B250C8000
IO1-8, 10-13 - 74HC595D SMD - SO16 12x
IO9 - ATMEGA168-20AU TQFP32
IO14 - 78S05 + chladič V4330N
IO15 - DS1307 SMD - SO8
IO16, IO17 - PC815 2x
IO18, IO19 - DS18B20 + PSH02-03P + PFH02-03 2x
IO20 - SFH506
Q1 - 32,768kHz
SW1-SW4 - P-B1720 4x
BAT - CR2032 (3V) + pouzdro např. SN2032 SN2032 (TME)
REP1 - KPE212A (jakákoli piezosirénka s vnitřním generátorem pracující při 5V)
K1 - ARK500/2
K2, K3 - PSH02-02P
ISP1 - MLW06G nebo S2G3 (řadová lišta 2x3 piny)
drátové propojky (mosty)
Na svetelektro.com proběhla v dubnu 2012: Sútaž o najlepší výrobok z elektroniky - 2. kolo
Moje hodiny skončily sice na 4.místě, ale konkurence byla velká a mnohdy na hodně dobré úrovni, takže si myslím nemůžu stěžovat.
Vyhodnocení soutěže
Další realizovaná stavba hodin, kterou jsem pomáhal oživit (odstranit mouchy, otočené T, zkraty): Hodiny - Novek
A opět jedna realizace, tentokrát jiné LED (red/blue), opět jsem pomáhal rozcházer - po mejlu. Hodiny - Yutani24 - Video na Youtube.
PaJa
© PaJa-trb 2011-
E-mail