Menü Bezárás

Bináris óra

Az órát első sorban szobadekorációs célokra találtam ki, majd a későbbiekben rájöttem, hogy nem is olyan haszontalan egy dolog. Pár nap után majdnem olyan gyorsan leolvassa az ember, mint egy hagyományos órát és még a kettes számrendszert is gyakorolja kicsit.

Mi is az a bináris óra?

Nézzük is miről van szó. Aki nem látott volna még bináris órát: általában a könnyebb leolvashatóság érdekében számjegyenként (BCD) van az idő kódolva a képen látható formában. Az ábrán pl. 15:36:19 van.

binaris_ora_pic1

A kapcsolás

Nézzük sorban, mit is csinál a kapcsolás. Az óra lelke egy Atmega8-as mikrokontroller, mely egy LM1117-es feszültség szabályzó IC-n keresztül kap stabil 3.3V-ot. A feszültség szabályzó bemenete egy mini USB csatlakozóról kap 5V voltot. Továbbá az áramkörbe egy 3V-os gombelem is be lett iktatva, mely arra szolgál, hogy az esetleges áramkimaradásokat (pl. áramszünet) áthidalja. Így erre az időre se felejti el az AVR az aktuális időt. A Schottky- dióta (D2), melyenkeresztül be van kötve, az elemre való rátöltés ellen véd, lévén nem akkumulátorról van szó. A D1-es dióda arra szolgál, hogy a külső táp megszűnése esetén, ne legyen feszültség az USB csatlakozón. Erre azért van szükség, hogy egyszerűen  figyelni lehessen az AVR-el, hogy van-e külső táp, nem kelljen ADC-t használni. Így abban az esetben, ha elmegy az USB-s táplálás, akkor a mikrokontroller ki tudja kapcsolni az idő kijelzését, így nem eszik le a LED-ek az idő fenntartására szolgáló elemet. Továbbá itt még szükség van egy feszültség osztóra, hogy ne 5V legyen kötve a 3,3V-ról táplált AVR bemenetére kötve.

binaris_ora_pic2

Az Atmega8 PB6-os és PB7-es lábaira lehet -jelen esetben kell is- kötni külső kvarcot, a pontos órajel miatt. A mikrokontroller belső oszcillátora nem adna elég pontos órajelet egy óra építéséhez. A RESET lábat 1KOhm-os ellenállással felhúzzuk 3.3V-ra. A C3-as és C4-es kondenzátor a feszültségingadozások kiszűrésére került a kapcsolásba. Az óra vezérlésére szolgáló 2 nyomógomb a PD2-es és PD3-as lábra lettek bekötve, mivel ezekre be lehet állítani megszakításokat, így tehermentesíthetjük az AVR-t az alól, hogy meg kelljen mindig vizsgálnia, hogy lenyomásra került-e valamelyik nyomógomb.

Az idő kijelzésére szolgáló LED-eket multiplexelve vezérli az AVR, mivel egyrészt nincs is már 20 szabad láb az IC-n, másrészt szerettem volna, ha pár láb szabadon marad, ha egyszer bővíteni szeretném az óra tudását. Így 10 lábat megspórolva 10 lábbal vezérelni tudjuk a 20 db LED-et. Azoknak, akik nem hallottak volna még a multiplexelésről: a lényege annyi, hogy a vezérelni kívánt LED-eket csoportokba osztjuk, melyek mindegyike külön tranzisztorról kap áramot. Minden LED-nek van minden csoportban egy-egy megfelelője, melyek közös vezetéken vannak a mikrokontrollerhez kötve, így ezeket egyszerre tudjuk leföldelni, viszont csak az az egy fog világítani, mely abban a csoportban van, amire a tranzisztor segítségével épp feszültséget kapcsolunk. Így külön-külön egymás után vezérelhetjük az egyes csoportok LED-jeit, melyeken, ha elég gyorsan megyünk végig, akkor az emberi szem érzékelő képessége szabta határoknak köszönhetően egyszerre fogjuk az csoportok LED-jeit világítani látni. A mi esetünkre ezt lefordítva: a csoportok az óra, perc és másodperc LED-jei, melyekre minden időpillanatban a Q1, Q2, Q3 tranzisztor valamelyike (egyszerre egy) rákapcsol 5V-ot, az AVR pedig a tranzisztorok által „kiválasztott” csoportban világíttatni kívánt LED-eket leföldeli. Így végigugrálva minden csoporton egyszerre fogjuk világítani látni az óra, perc és másodperc megfelelő LED-jeit.

A LED-ek elé került 120 Ohm-os előtét ellenállásokkal számolva ~28mA-t kapunk, ami kicsit soknak tűnhet (egy LED-et meghajtani elég lenne kevesebb is), de ne felejtsük el, hogy a multiplexelés miatt, minden LED csak egy periódusnak az 1/3-ában világít.

binaris_ora_pic3

A NYÁK

A NYÁK levilágítós technikával készült melyet nem írnék le részletesen (akit jobban érdekel, majd utánanéz guglin), csak nagy vonalakban. Első lépésként kinyomtatjuk a tervet írásvetítő foliára, majd miután az alaposan letisztított lemezünket Positive20 lakkal lefújtuk, a foliat rászorítva UV fénnyel levilágítjuk. Ezek után mehet az előhívóban, mely a levilágított felületről (ahol a foliára nyomtatott rajzolat engedte átvilágítani) leszedi a lakkot, így a marató folyadék (víz, sósav és hidrogén-peroxid keveréke vagy vasklorid) csak innen szedi le a rezet. Ezzel el is készült a NYÁK-unk.

A beültetést sem részletezném túl. Célszerű az oldalak közti átkötésekkel kezdeni. Házi körülmények között elég nehéz lenne lyukgalvánozni, de erre nincs is szükség, mivel mindkét oldalról beforrasztott kis vezeték- vagy drótdarabokkal ezt könnyen megúszhatjuk. Majd jöhetnek a kisebb, végül pedig a nagyobb, furatszerelt alkatrészek.

A képeken látható, hogy a LED-ek nem fekszenek rá a lemezre. Ennek két egyszerű oka van. Az egyik, hogy így alá lehet nyúlni a pákával, a könnyebb beforraszthatóság kedvéért. Másrészt ez az én esetemben azért praktikus, mert az óra előlapja már előre le lett gyártva és mivel kézzel lettek a lyukak kifurkálva, kis eltérés előfordulhat a távolságukban. Így jobb, ha a LED-ek kicsit elmozdíthatóak, hogy biztos belemenjenek a helyükre.

binaris_ora_pic4

A program

Az Atmega8-nak van 2 db 8 bites és egy 16 bites timere. Én a 16 bites timert használtam, melynek a beállítására nem térnék ki részletesen. Az adatlapból kiolvasható, hogy mely biteket kell a timer, illetve megszakításhoz szükséges regiszterekben 1-be állítani. Az így beállított timer másodpercenként generál egy megszakítást, mely megszakítva a program futását a hozzá tartozó függvényt kezdi végrehajtani. Ez annyit csinál, hogy mindig hozzáad egy másodpercet az időhöz, figyelve, kell-e a perc, óra változóján is növelni.

Az inicializációs részben be van még 2 további megszakítás is állítva, melyek a nyomógombok lenyomására generálódnak. Ezek az idő beállítására szolgálnak, illetve az egyik nyomógombbal ki lehet kapcsolni az idő kijelzését. Ez áramspórolás céljából lehet praktikus. Hasznos lehet ha pl. több időre elmegyünk otthonról, de mégsem szeretnénk, hogy elfelejtse az időt az óra.

A főprogram végtelen ciklusában csak az idő multiplexelt kijelzése történik.

 

Megjegyzések

Az így elkészült óra nem egy atomóra, de használhatóan pontos. Egy hónapos üzem alatt ~1 percet kezdett el sietni. Ezen még RTC IC-vel vagy modullal lehetne pontosítani, ami az elemről való üzemelés során is hasznos lenne, mivel ilyenkor az AVR-ben sem kéne tartani az áramot, elegendő lenne az RTC-ben, aminek viszont nA-es nagyságrendű az áramfelvétele. Továbbá elem helyett is, a kapcsolás megfelelő módosítása után, lehetne akksit használni, így az elem lemerülésével sem lenne soha gond.

Én a megvalósítás során próbáltam ésszerű keretek között maradni, így úgy gondoltam, ezek nélkül is egy jól kinéző, használható óra készíthető. Egyben ez volt az újoncprojektem is.

Készült: 2013

Related Posts