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: 50633, Oldal olvasási idő: kb. 2 perc
Lapozás: OK   10 / 19

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
1 = Külső RA4/T0CKI lábon keresztül kapja az órajelet
0 = Belső, PIC-et hajtó órajelet használja

T0SE: TMR0 Source Edge Select bit
1 = Lefutó élre növeli a timer0-t
0 = Felfutó élre növeli a timer0-t

PSA: Prescaler Assignment bit
1 = Előosztó WDT-hez beállítva
0 = Előosztó Timer0-hoz beállítva

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!
Következő: »»   10 / 19
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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