Documente Academic
Documente Profesional
Documente Cultură
area tim
merelor
Timerull/Counterul, dup cum i spune i numele ofer facilitateea de a msuura intervalee fixe de
timp i de a generaa ntreruperii la expirareea intervaluului msuratt. Un timer,, odat iniializat va
dent de unittatea centralla (core P)). Acest luccru permite eliminarea buclelor
functionna independ
de delayy din prograamul princippal.
Fizic, tiimerul 0 al
a microconntrolerului PIC16F917
P
este un reegistru a crui
c
valoarre crete
continuuu pn la 2555. Dup fiiecare numrtoare pnn la 255, tiimerul i reeseteaz valloarea la
zero i ncepe
de a ajunge la logica
l
ce
crete starea
s
timerrului. Num
mrul ce div
vide un ceaas este deffinit prin trrei bii n registrul
OPTION
N_REG. Ceel mai maree divizor esste 128. Acceasta nseam
mn de fappt c doar laa fiecare
128-lea tact de ceeas,valoareaa timerului va crete cu
c unu. Aceasta ne d posibilitattea de a
l
msura perioade dee timp mai lungi.
n contiinuare se voor prezenta registrii
r
miccrocontrolerului PIC166F917 utilizzai pentru controlul
c
timeruluui 0. Pentruu fiecare reggistru se vor descrie dooar bii caree sunt utilizzai pentru controlul
c
timeruluui.
OPTIO
ON_REG
Bit 7
CS
T0C
T0SE
PSA
P
PS2
PS1
Bit 0
PS0
Bit 0
T0IE
T0IF
1
1
50Hz .
20mS 20 10 3 S
1MHz
0,25MHz .
4
Avnd n vedere c registrul TMR0 numra de la 0 la 255 nsemn c la fiecare 255 tacturi
primite acesta genereaz o ntrerupere. De aici rezult c registrul TMR0 mparte frecventa
semnalului primit la 256.
Pentru situaia n care semnalul de intrare n timer (cu frecvena f i ) ajunge direct la registru
TMR0 (bitul PSA=0) frecvena de apariie a ntreruperilor va fi:
f o( PSA 0)
0.25MHz
976Hz .
256
Se poate observa faptul c frecvena obinut pentru cazul n care bitul PSA=0 este mult mai
mare fa de frecvena dorit. De aici rezult ca trebuie utilizat circuitul de prescalare.
Pentru situaia n care semnalul de intrare n timer (cu frecvena f i ) trece prin circuitul de
prescalare (bitul PSA=1) i acesta este configurat s divizeze frecvena semnalului la 2
(PS<2:0>=001) ferecvena de apariie a ntreruperilor este:
0.25MHz
488Hz .
2 256
n continuare frecvena de ieire este mult prea mare. Pentru a gsi soluia trebuie realizat o
divizare i mai mare. n urma calculelor rezult c frecvena dorit se ncadreaz ntre:
f o( PSA1; PS 2:0 100;TMR 0 0)
0.25MHz
61Hz ;
16 256
0.25MHz
30Hz .
32 256
Pentru a configura timerul s lanseze ntreruperea la 50Hz trebuie aleas situaia n care
frecvena este mai mic i trebuie modificat valoarea care se ncarc n registrul TMR0. Mai
exact impunem timerului s nu nceap numrtoarea de la 0 ci de la o valoarea mai mare.
Numarul de impulsuri de ceas care trebuie numrate pentru a obine frecvena dorit se
detemin cu ecuaia:
0.25MHz
50Hz
32 n
0.25MHz
156 .
32 50Hz
Sructura programului:
int i=0;
Void interrupt()
{
INTCON.GIE=0;
if(INTCON.T0IF)
{
i++;
INTCON.T0IF=0;
TMR0=99;
}
INTCON.GIE=1;
//pornirea intreruperilor
}
void main()
//incrementare i;
//resetare flag
//resetare valoare initiala timer
{
OPTION_REG=0b00000101;
INTCON.T0IE=1;
INTCON.PEIE=1;
INTCON.GIE=0;
TMR0=99;
While(1)
{
}
}