Fórum témák

» Több friss téma
Cikkek » Nagy LED kijelzős DCF77 óra PIC-kel
Nagy LED kijelzős DCF77 óra PIC-kel
Szerző: Topi, idő: Márc 25, 2007, Olvasva: 65844, Oldal olvasási idő: kb. 2 perc
Lapozás: OK   4 / 7
Mielőtt bármibe is belefognánk, érdemes átnézni, hogy hogyan is működik az egész, hogy hogy lehet ilyen kevés PIC lábbal ennyi kijelzőt teljesen függetlenül vezérelni.
Most ajánlatos magad elé venni pl. egy másik ablakban a kapcsolási rajzot.

Az egész áramkör azon alapszik, hogy az emberi szem lassú. Ha a szemed látna mondjuk másodpercenként 120 képkockát is, akkor marhára zavarná a szemedet a kijelző, mivel látnád hogy hogy frissít. Hogy miért is? A válasz egyszerű. Ahhoz, hogy ne kelljen sok lába a PIC-ből, így egyszerre mindig csak egy kijelző van bekapcsolva. Először kiírjuk az első számjegyet, majd kiírjuk a harmadikat, majd ha kell kettőspont akkor kiírjuk azt, és így tovább...
Egy kijelzőhöz nyolc kimenet szükséges, mivel 7 szegmens + 1 a pont. Így ezzel elvittünk egy portot. Ezután már csak azt kell megoldani, hogy a kijelzőket egymás után kapcsolgassuk be. Ebben barátunk a Shift regiszter. A shift regiszter az alap eszköze a soros kommunikációknak.
Nélkülözhetetlen, hogy értsed pontosan hogy is működik, hogy megértsed a programot is.
Fentebb egy 4 bites shift regisztert láthatsz működés közben. Maga az IC, nevetségesen egyszerű, csak 8 darab flip-flopból épül fel. Van egy reset lába is, ami az összes kimenetet visszaállítja alaphelyzetben. Szerintem ez a fenti kép segített abban, hogy nem kell róla oldalakat regélnem.

A program egy kicsit megváltozott, mert nem írtam meg a fényerőszabályzást PWM-re, hanem inkább analóg módon szabályzom majd, mivel a 873-as PIC eléggé le van foglalva a kép frissítéssel, és egy egy nagyobb és hosszabb műveletnél (DCF dekódolás) néha felvillanhatna a kijelző. Pontosabban nem villan fel, csak egyik fázis megnyúlhat, és akkor úgylátod mintha villant volna.
Aki már látta a PIC programjaimat, az tapasztalhatta, hogy szeretek általánosítani, és egy-egy rutint inkább teljesen külön unitban írok meg, hogy másba is könnyen bele lehessen építeni, és ne kelljen kibogarászni belőle.
Itt is külön unitba tettem direkt az egész DCF77 dekódert és külön unitba van a kijelző kezeléssel kapcsolatos függvények.

A kód felettébb egyszerű, nem nagyon kell magyarázni. Az egész kódot egybe, a lefordított hexel együtt itt találod: ora.zip
A program CCS-el készült. CCS-C fordítóval le is tudod fordítani.

A DCF dekódolásról és a unitról érdemes pár szót ejteni. A DCF dekódolását sok féle képpen lehet elvégezni. Mindegyik bevált módszer, az a lényeg hogy az egyiket megírd
Én úgy csináltam meg, hogy van egy timerem, ami ms-es időzítésű. A PIC hardveres interruptját használom, és mikor egy felfutó él van, akkor elindítom a timert. Majd mikor 150-ig elszámolt a timer, akkor beolvasom a port állapotát. Azért 150, mert ugye a rövid jel az 100ms a hosszú meg 200ms. Tehát... Ha 150-nél mérsz, és még 1-es szintet mérsz, akkor nem lehet nulla (vagyis 100ms), mivel az eddigre már befejeződött volna. Vagyis ez minden bizonnyal egy hosszú lesz, vagyis egy 1-es.
Kell beletenni továbbá még egy digitális jel hibajavítást, mivel előfordulhat hogy magas szint közben egyszercsak van egy tüske. Ilyenkor lemegy nullára majd vissza 1-re. Ekkor ugye újraindulna a timer. De nem. Mivel csak akkor indítja el felfutó élre a timert, hogyha több mint 300ms-ig volt 0-ás szinten. (ezt is kódból kell megvalósítani)
Ha nem világos mit hablatyoltam, akkor érdemes lerajzolnod magad elé egy DCF jel részletet és beírogatni az időket...
A cikk még nem ért véget, lapozz!
Következő: »»   4 / 7
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem