Fórum témák
» Több friss téma |
Cikkek » Kapunyitás gombnyomásra avagy Szezam_tarulj! Kapunyitás gombnyomásra avagy Szezam_tarulj!
Szerző: Bonca, idő: Aug 16, 2011, Olvasva: 30010, Oldal olvasási idő: kb. 2 perc
A vevő oldalon szintén az előző oszcillográfra hivatkoznék. Érdekességként említeném meg, hogy a vevő az adás befejezése után még kb. 80 ms-ig logikai 1-ben hagyja a kimenetét, és teljesen magától állítja 0-ba. Erről sincs semmiféle adat a gyári leírásban. Mint említettem, a vevő az UART modulját használja a beérkező jelek fogadására. Az UART modul olvasásához mégsem a MikroC parancsait használom, hanem a mikrovezérlő RCREG regiszter "megtelését" figyelem az RCIF bit változásával. Amint beérkezik a 8 adatbit (az elküldött ASCII karakter), megszakítást generál (RCIF), és máris megkezdődik az beérkezett karakter összehasonlítása a kulcséval. Ha stimmel, és nem telt le az egy karakter fogadására adott idő, megvizsgálja a következő beérkező karaktert. Az egyirányú kommunikáció miatt itt csak a vétel oldal (Rx) van a vevő kimenetére kötve (mikrovezérlő 18-as lába). Az egy karakter beérkezésére adott időt a mikrovezérlő Timer0 moduljával 16 bites módban időzíti. Ilyenkor 0-tól 65535-ig képes elszámolni a Timer0. Az egy karakter átvitelére szükséges idő 2400 Baud sebesség esetén kb. (1+8+1)*417µs=4170 µs. Ezt a start bit, az adatbitek és a stop bit összegének a bit idővel való szorzata adja meg. A mikrovezérlő 8 MHz-es belső órajele 0,5 µs alatt növeli a Timer0 értékét eggyel. Ha a Timer0 kezdőértékét 57000-re vesszük (DEA8h), akkor kb. 4300 µs idő van egy karakter fogadására (pontosan 4267,5 µs). Az ezen túl eltelt időnél túlcsordul a Timer0 (65535-ből átfordul 0-ba), megszakítást generál (TMR0IF), és a vevő oldali mikrovezérlő a kulcsot az első karaktertől várja újra. A megszakítás függvény (interrupt) a lehető legrövidebbre lett megírva. Azaz, nem végez hosszadalmas számításokat, csak egy jelzőt és egy számlálót állít be (rx_flag, key_cnt), és ezeket a változókat figyeljük a fő függvényben (main). A fő program nem csinál mást, csak az rx_flag értékét vizsgálja újra meg újra. Ez a megszakítás-vizsgálati módszer azért jó, mert a rövid interrupt függvény miatt nem lesz elhagyott adat az átvitel során. Ha az rx_flag 1, akkor az UART-on beérkezett bájtot összehasonlítja az általunk megadott kulcs következő elemével. Növeli a kulcs számlálójának értékét eggyel (key_cnt), hogy a következő UART-on érkezett bájtot összehasonlíthassa a kulcs következő elemével. Ha az összes karakter egyezik a kulcs összes karakterével, nyitja a kaput. Jelen esetben a B port 0. kivezetését (18F2520 21-es lábát) egy másodpercre logikai 1-re állítja. Ez meghúzza a relét, ami összezárja a kapunyitó vezérlőjének két kivezetését. A legegyszerűbb kapunyitó motorvezérlőknél a motor mozgását két pont összezárása indítja be. Ezt a két pontot zárja össze a relé.
A cikk még nem ért véget, lapozz! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |