Fórum témák
» Több friss téma |
Cikkek » Távirányító jelének fogadása uC-vel Távirányító jelének fogadása uC-vel
Szerző: lazsi, idő: Ápr 12, 2010, Olvasva: 18739, Oldal olvasási idő: kb. 2 perc
A programnak fel kell ismernie, hogy mikor érkezik egy adatsor. Ezen belül meg kell különböztetnie az egyes biteket. A protokoll szerint bármelyik bit kezdődhet akár lefutó, akár felfutó éllel, ezért minden változást figyelni kell. Ha két él között eltelt idő 1.5 ms vagy 2 ms, akkor az egy "0" bitet jelent, ha az eltelt idő 0.6 ms vagy 1.1 ms, akkor az egy "1" bit egyik fele. Végülis elég csupán azt figyelni, hogy 1.3 ms-nál rövidebb vagy hosszabb az eltelt idő, így marad némi biztonsági tartalékunk is. Ha 2 ms-nál sokkal hosszabb ideig nem érkezik újabb él, az azt jelenti, vége az adatsornak. Ha ilyenkor megérkezett az utolsó bitünk is, akkor örülhetünk és feldolgozhatjuk a kapottakat. Ha a szükségesnél több vagy kevesebb bit érkezett, akkor valami hiba történt, ezért az addig kapott biteket eldobjuk. Az idő mérésére a uC 8 bites időzítőjét használjuk. Az órajel frekvenciája 4MHz. 1/64-es előosztót alkalmazva az alábbi értékek adódnak:
A számláló értéke = (a tervezett időkülönbség s-ban) X (órajel-frekvencia Hz-ben) / (előosztó osztásaránya) A program működése: Alapvetően az időzítő áll. Amikor megérkezik egy élváltozás, az egy EXT_INT0 (external interrupt 0) nevű megszakítást okoz. A megszakítás-rutin a számláló pillanatnyi értékétől függően több dolog közül választ:
Ha T0_OVF (timer 0 overflow) nevű megszakítás történik, az azt jelenti, hogy az utóbbi 4 ms alatt nem történt élváltozás. Ilyenkor meg kell vizsgálni, hogy hány bit érkezett eddig. Ha 13 darab, akkor ez a 14. bit. A fél1bit jelzőtől függően eldöntjük, hogy "0" vagy "1" értékű az utolsó bit. Mivel ez az adatsor végét jelenti, az időzítőt leállítjuk és feldolgozzuk a kapott adatsort. Ha több vagy kevesebb bit érkezett, akkor eldobjuk az eddigieket, törlünk minden változót, leállítjuk az időzítőt és várjuk a következő adatcsomagot. A beérkezett biteket két változóban tároljuk. Függően attól, hogy az első vagy a második 7 bites csoportnál tartunk, a vettbyteL vagy a vettbyteH nevű változót használjuk. A változót logikai léptetéssel eltoljuk balra egy helyi-értékkel. Ilyenkor a jobb oldali, legalacsonyabb értékű bit helyére "0" érkezik. Ha nekünk "1" bitünk van, akkor azt be kell írnunk oda. Az itt látható folyamatábra alapján más mikrokontrollerre is könnyen átírható a program. A cikk még nem ért véget, lapozz! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |