Fórum témák
» Több friss téma |
Cikkek » Nulláról a robotokig - PIC Mikrovezérlők III rész Nulláról a robotokig - PIC Mikrovezérlők III rész
Szerző: Topi, idő: Júl 13, 2007, Olvasva: 51609, Oldal olvasási idő: kb. 2 perc
A timer (időzítő) igazából egy olyan modul, ami majdnem minden PIC programban a központi szerepet tölti be. Például elengedhetetlen multitask programozásnál. Alapból minden timer a processzor órajelén üzemel, de minden időzítőhöz tartozik egy előosztó modul. Előosztó modult az OPTION_REG, csak BANK1 és BANK3-ban elérhető regiszterrel tudjuk állítani. 877-es esetében erre 3 bitünk van, ez a PS2 : PS0. Tekintettel arra, hogy a sebességek és az időzítések miatt direkt 4MHz-en futtatjuk a processzort, ügyesen kell megválasztani a próbákhoz az előosztást, hogy lássunk is valamit. Most minden programnyelvnél 1:256-ös osztást fogunk használni. Ez is igencsak gyors, de attól még látni minden. A következő biteket fogjuk használni az OPTION_REG-ből:
T0CS: TMR0 Clock Source Select bit
T0SE: TMR0 Source Edge Select bit
PSA: Prescaler Assignment bit PS2 : PS0: Prescaler Rate Select bits (Előosztás kiválasztó bitek, mennyivel osztják a fő órajelet) Pontosabban érdekel, nézd meg a regiszterek oldalt ott már kiveséztük. Az fontos, hogy a TMR0 modul, mint a processzor adatlapjában is látszik, több oldalú dolog, de egyszerre nem vezérelhet WDT-t és lehet Timer előosztó. TMR0 használat esetén, le kell mondanunk a WDT előosztásáról, és fordítva. Ezt mutatja a PSA bit is, ahol meg kell adnunk "kit osztunk". T0SE bitnek akkor van értelme, ha külső órajelet kap a TMR0, pl felépítettünk egy nagyon pontos 32,768 KHz-es oszcillátort, óra célokra. Azt figyelembe kell vennünk, hogyha a Timereket kerek egész órajelről (pl. 4 MHz, 10MHz, 20MHz) hajtjuk, akkor soha nem tudunk nagyon pontos másodpercenkénti osztást csinálni, a kerekítések miatt. Ekkor szoktunk kettő-hatványa órajelet használni. Ilyen a 32,768KHz, vagy 3,2768MHz vagy hasonlókat. Ha felépítünk egy kristály oszcillátort, és a kristály oszcillátorunk 32,768 KHz-es órajelet generál, azt bevezethetjük a RA4/T0CKI lábon, és először 256-al, majd 128-al osztva, nagyon pontosan másodpercenként megszakító időzítőt kapunk. Persze a T0CKI lábat használhatjuk másra is, pl ha meg akarjuk spórolni a kristályt, és a váltóáram 50 Hz-ét vesszük. Pl. A váltóáramú tápfeszültséget egy diódával egyenirányítva, és egy biztonsági Zenerrel máris ott van az 50 Hz-es órajel. Ennél a próbánál akár hagyhatjuk is ott a gombokat ahol voltak, mert nem lesz rá szükségünk, de tekintettel a folytatásra, jobban járunk ha vissza tesszük a PORTA0-1-re a két gombicunkat! PIC16F877 esetében 3 időzítőnk van, Timer0, Timer1 és Timer2. A Timer0-át kivéve, mindegyik másik időzítőnek saját külön regisztere van. Ezeket a Timer0 megértése után gyerekjáték lesz használni! A cikk még nem ért véget, lapozz! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |