CATEGORII DOCUMENTE |
Aeronautica | Comunicatii | Electronica electricitate | Merceologie | Tehnica mecanica |
4.1 Ceasuri programabile - notiuni generale
Functionarea sistemelor cu microprocesor in aplicatii de proces necesita, in majoritatea cazurilor, realizarea unor temporizari precise intre diversele actiuni efectuate in sistem sau masurarea cu precizie a unor intervale de timp. In acest scop, se utilizeaza asa-numitele ceasuri de timp real (Real Time Clock - RTC), circuite ce pemit obtinerea unor temporizari programate sau masurari de intervale, cu precizie ridicata.
Aceste circuite au functia de generare de semnale de latime programata, masurare de intervale de timp sau de numarare de evenimente. In primele doua cazuri functia se numeste TIMER, in cel de-al treilea caz, functia se numeste COUNTER, de unde si denumirea circuitului de Timer/Counter.
In cadrul functiei de Timer, circuitul foloseste ca intrare un semnal de frecventa fixa ca Tact sau Ceas de referinta, pentru masurare sau generare. In cadrul functiei Counter, circuitul foloseste ca intrare un semnal extern pentru care se doreste masurarea numarului de tranzitii.
In acest capitol vor fi prezentate doua circuite Timer/Counter o varianta pentru un sistem cu microprocesor, ca circuit extern, si o varianta de circuit inclus intr-un microcontroler.
Circuitul de interfata Timer/Counter al microcontrolerului 80C552
Microcontrolerul 80C552 contine trei circuite Timer/Counter pe 16 bit denumite Timer 0 - T0 , Timer 1 - T1, Timer 2 - T2 Timer 3 Watchdog - T3. Ele sunt grupate, dupa functiile pe care le pot indeplini astfel: T0 si T1 sunt timere cu posibilitati asemanatoare si indeplinesc functiile unui timer de uz general. T2 este un timer cu posibilitati foarte dezvoltate, este capabil de a masura si genera semnale cu o precizie foarte mare. Timerul T3 poate fi folosit doar pentru a urmari functionarea corecta a programului microcontrolerului.
Sunt circuite pe 16 bit ce pot fi programate sa indeplineasca urmatoarele functii:
masurare de intervale de timp sau de latime de impuls
numarare de evenimente
generare de cerere de intrerupere catre unitatea centrala (CPU)
Acestor circuite le corespund urmatorii registri ai microcontrolerului (SFR):
TH0, TL0
TH1, TL1
TMOD
TCON.
Programarea lor si schimbul de date se face prin aceste SFR.
Ambele circuite sunt formate din 2 registri de 8 biti (THx, TLx cu x=0 sau x=1) care se incrementeaza la o tranzitie "1"- "0" a semnalului de la intrare.
Cand sunt configurate "Timer" (Temporizator), T0 si T1 sunt incrementate de semnalul de ceas sistem (quartz-ul sistemului divizat cu 12) la fiecare ciclu masina (la o perioada de (1/frecventa sistem)/12, deci a 12 parte din perioada ceasului sistem, pentru un ceas de 12MHz, ciclul masina este de 1 msec).
Cand sunt configurate "Counter" (Numarator), T0 si T1 sunt incrementate la fiecare tranzitie "1"- "0" a semnalului de pe pinul corespunzator celor doua timere.
T0 si T1 pot opra in 4 moduri de lucru . Modurile 0, 1 si 2 sunt comune celor doua timere, pe cand modul 3 este diferit.
a) modurile de lucru 0 si 1 ale T0 si T1.
In acest mod ele functioneaza ca un numarator (Counter) pe 8 bit cu un divizor de 1 la 32. (vezi fig.4.1.)
Indicele x poate fi 0 sau 1, deoarece ambele circuite au aceeasi functionare.
Incrementarea poate fi generata de ceas sistem (C/~T=0, timer) sau de semnal extern (C/~T=1, counter). Validarea incrementarii este data de bitul GATE (TMOD.7 sau TMOD.3) =0 sau semnalul extern ~INTx=1 si simultan bitul TRx (TCON.6)=1.
La atingerea valorii de "1" pentru toti cei 13 biti, impulsul urmator va determina trecerea tuturor bitilor pe "0" cu setarea (punerea pe "1") bitului TF1 (fanion de depasire, sau Overflow care poate fi considerat si ca fanion de intrerupere). Pozitionarea pe "1" poate insemna si cerere de intrerupere care va fi luata in considerare doar daca a fost validata prin programarea intreruperilor.
Modul de lucru 1 pentru ambele circuite este identic cu modul 0, cu diferenta ca registrul de date este pe 16 bit, nu pe 13 bit.
b) Modul de lucru 2
configureaza registrii T0 si T1 pe 8 bit (TLx) cu reincarcare automata (vezi
fig.4.2.)
O depasire la TLx (Overflow) seteaza bitul TFx si comanda reinscrierea in TLx a aceluiasi octet, psstrat in THx. Reincarcarea lasa THx nemodificat.
c)Modul de lucru 3
Acest mod de lucru este diferit pentru cele 2 timere.
T1 mentine in acest mod continutul sau nemodificat (acelasi efect ca si cum validarea de la TR1=0).
T0 este configurat ca doua numaratoare separate de 8 bit ca in fig.4.3. TL0 foloseste bitii C/~T, GATE, TR0, ~INT0 si TF0. TH0 functioneaza ca timer si utilizeaza bitii TR1 si TF1 de la T1.
Registri cu functii speciale (SFR) pentru T0 si T1.
SFR pentru T0 si T1 sunt TMOD si TCON. Ei au urmatoarea configuratie:
GATE |
C/T |
M1 |
M0 |
GATE |
C/T |
M1 |
M0 |
MSB LSB
primii patru biti se refera la T0 iar urmatorii patru se refera la T1.
GATE - daca GATE=1 si bitul de control TRx = 1, Tx este validat doar daca pinul /INTx=1 ( control hard ); daca GATE =0 numaratorul este validat doar daca TRx=1 ( control soft)
C/~T - "0" - Tx functioneaza ca timer,
"1"- Tx functioneaza ca numarator;
M1 M0 - modul de operare;
0 0 - Modul 0
0 1 - Modul 1
1 0 - Modul 2
1 1 - Modul 3
TCON
TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0 |
TF1 - setat hard la depasire T1 ; resetat hard la saltul in rutina de tratare intrerupere
TR1 - setat/resetat prin program pentru a porni/opri pe T1
TF0 - setat hard la depasire T0 ; resetat hard la saltul in rutina de tratare intrerupere
TR0 - setat/resetat prin program pentru a porni/opri pe T0
IE1 - setat hard la detectie intrerupere externa 1; resetat hard cind intreruperea este tratata
IT1 - setat/resetat prin program pentru a stabili semnalul activ la INT1: front negativ/nivel "0"
IE0 - setat hard la detectie intrerupere externa 0 ; resetat hard cind intreruperea este tratata
IT0 - setat/resetat prin program pentru a stabili semnalul activ la INT0: front negativ/nivel "0"
Timer-ul T2 este un numarator pe 16 bit (TMH2 si TML2) care poate numara impulsuri de ceas (cand este configurat ca Timer) sau semnale externe de la pinul T2 (cand este configurat ca numarator), printr-un circuit divizor programabil cu 1, 2, 4 sau 8.
Timer-ul T2 poate fi doar citit, nu poate fi inscris, iar resetarea se poate face de la semnalul RESET extern sau de la semnalul RT2 extern (daca acesta este validat prin bitul TM2ER din TM2CON). Oprirea se face din registrul TM2CON bitii T2MS1 T2MS0.
La depasire (Overflow) pe 8 sau 16 bit, se poate genera, daca este validata, o cerere de intrerupere. Adresa rutinei de tratare a intreruperii este aceeasi, selectia tipului de intrerupere (pe 8 sau 16 bit) se face din TM2CON, cu bitii T2IS0 respectiv T2IS1. La intrerupere, se mai seteaza doua fanioane, ce trebuie resetate prin software, T2B0 si T2OV din TM2CON respectiv T2IR. Setarea intreruperii se face din registrul de intreruperi IEN1 bit 7.
Registrul de control a Timerului T2, TM2CON:
TM2CON
T2IS1 |
T2IS0 |
T2ER |
T2BO |
T2P1 |
T2P0 |
T2MS1 |
T2MS0 |
T2IS1 - valideaza generare intrerupere la depasire capacitate T2 ( pe 16 biti )
T2IS0 - valideaza generare intrerupere la depasire capacitate T2 ( pe 8 biti - octetul inferior )
T2ER - validare reset extern pentru T2;
T2B0 - fanion intrerupere depasire capacitate T2, pe octet;
T2P1 T2P0 - stabilesc continutul registrului de divizare;
0 0 - factor de divizare 1 1 0 - factor de divizare 4
0 1 - factor de divizare 2 1 1 - factor de divizare 8
T2MS1 T2MS0 - selectare mod de lucru pentru T2;
0 0 - T2 este oprit; 1 0 mod test ( nu se foloseste)
0 1 - se foloseste tact intern 1 1 semnalul de tact este extern la pinul T2.
Structura timerului T2 este prezentata in fig.4.4.
Fig.4.4.
Structura timerului T2
Timerul T2 este conectat la 4 registri de capturare, CT0, CT1, CT2, CT3. Acesti registri sunt incarcati cu continutul timerului T2 (TMH2 si TML2) atunci cand microcontrolerul primeste semnalele externe CT0I, CT1I, CT2I, respectiv CT3I pe front pozitiv sau negativ. In momentul capturii, se seteaza fanioane (flag) din TM2IR si se poate genera de asemenea si intrerupere.
Registrul care configureaza T2 pentru procesul de capturare este CTCON:
CTCON
CTN3 |
CTP3 |
CTN2 |
CTP2 |
CTN1 |
CTP1 |
CTN0 |
CTP0 |
CTN3 - capturare pe frontul negativ (pentru CT3I)
CTP3 - capturare pe frontul pozitiv (pentru CT3I)
CTN2 - capturare pe frontul negativ (pentru CT2I)
CTP2 - capturare pe frontul pozitiv (pentru CT2I)
CTN1 - capturare pe frontul negativ (pentru CT1I)
CTP1 - capturare pe frontul pozitiv (pentru CT1I)
CTN0 - capturare pe frontul negativ (pentru CT0I)
CTP0 - capturare pe frontul pozitiv (pentru CT0I)
Registrul fanioanelor de intrerupere este TM2IR:
TM2IR
T20V |
CMI2 |
CMI1 |
CMI0 |
CTI3 |
CTI2 |
CTI1 |
CTI0 |
T20V - fanion de intrerupere la depasire pe 16 biti
CMI2 - fanion de intrerupere corespunzator lui CM2
CMI1 - fanion de intrerupere corespunzator lui CM1
CMI0 - fanion de intrerupere corespunzator lui CM0
CTI3 - fanion de intrerupere corespunzator lui CT3
CTI2 - fanion de intrerupere corespunzator lui CT2
CTI1 - fanion de intrerupere corespunzator lui CT1
CTI0 - fanion de intrerupere corespunzator lui CT0
Structura T2 in regim de captura este prezentata in fig.4.5
Daca se doreste masurarea latimii unui impuls Tx, acesta este adus la una dintre intrarile de captura (de ex. CT0I). Registrul este setat sa captureze atat pe frontul pozitiv, cat si pe cel negativ. Se seteaza si intrerupere.
Cind apare primul front al semnalului, registrul de captura CT0 se incarca cu valoarea curenta a timerului T2 si se genereaza un semnal de intrerupere. In rutina de tratare a intreruperii, valoarea din CT0 se salveaza intr-o variabila N1. La aparitia celui de-al doilea front, din nou continutul lui T2 este capturat in CT0, iar in rutina de tratare a intreruperii se salveaza si aceasta valoare in N2. Prin diferenta cu valoarea anterioara se determina durata impulsului. Trebuie sa se tina seama si de eventuala depasire pe 16 bit a T2, contorizata de variabila k.
In acest caz durata impulsului este :
Tx=N2+k*65535-N1.
La fiecare incrementare a T2, continutul a trei registri CM0, CM1 si CM2 este comparat cu noua valoare a T2. Cand se sesizeaza o coincidenta (match), se seteaza fanionul corespunzator din TM2IR, se modifica bitii portului 4 de iesire conform setarii registrilor STE si RTE, si se poate de aemenea genera intrerupere daca este setata aceasta optiune.
STE
TG47 |
TG46 |
SP45 |
SP44 |
SP43 |
SP42 |
SP41 |
SP40 |
TG47- fanion, daca este "1", P4.7 este setat la urmatoarea comutare; daca este "0", P4.7 este resetat la urmatoarea comutare
TG46- fanion, daca este "1", P4.6 este setat la urmatoarea comutare; daca este "0", P4.6 este resetat la urmatoarea comutare
SP45 - daca este setat '1', P4.5 este setat daca CM0 si T2 coincid
SP44 - daca este setat '1', P4.4 este setat daca CM0 si T2 coincid
SP43 - daca este setat '1', P4.3 este setat daca CM0 si T2 coincid
SP42 - daca este setat '1', P4.2 este setat daca CM0 si T2 coincid
SP41 - daca este setat '1', P4.1 este setat daca CM0 si T2 coincid
SP40 - daca este setat '1', P4.0 este setat daca CM0 si T2 coincid
Daca STE.i sunt "0", atunci P4.i nu este afectat de coincidenta CM0 si T2 ( i = 0, 1, 2, 3, 4, 5 )
RTE
TP47 |
TP46 |
RP45 |
RP44 |
RP43 |
RP42 |
RP41 |
RP40 |
TP47 - daca este setat '1', P4.7 basculeaza (toggle) daca CM2 si T2 coincid
TP46 - daca este setat '1', P4.6 basculeaza (toggle) daca CM2 si T2 coincid
RP45 - daca este setat '1', P4.5 este resetat daca CM1 si T2 coincid
RP44 - daca este setat '1', P4.4 este resetat daca CM1 si T2 coincid
RP43 - daca este setat '1', P4.3 este resetat daca CM1 si T2 coincid
RP42 - daca este setat '1', P4.2 este resetat daca CM1 si T2 coincid
RP41 - daca este setat '1', P4.1 este resetat daca CM1 si T2 coincid
RP40 - daca este setat '1', P4.0 este resetat daca CM1 si T2 coincid
Daca RTE.i este "0", atunci P4.i nu este afectat de coincidenta CM1 si T2 sau CM2 si T2
Structura T2 in regim de compaarare este prezentata in fig.4.6.
Fig.4.6. Structura T2 in regim de comparare
Setarea intreruperilor pentru timerul T2
Registri care permit selectarea intreruperilor sunt IEN0 si IEN1. Bitul EA valideaza posibilitatea de a selecta o intrerupere. Daca este pe "0", toate intreruperile sunt invalidate. Daca bitul EN este pe 1, fiecare intrerupere poate fi selectata individual.
IEN0
EA |
EAD |
ES1 |
ES0 |
ET1 |
EX1 |
ET0 |
EX0 |
EA - setat valideaza generarea de intreruperi, iar resetat invalideaza toate
intreruperile
EAD - setat valideaza intreruperea de la ADC
ES1 - setat valideaza intreruperea de la interfata I2C
ES0 - setat valideaza intreruperea de la interfata UART
ET1 - setat valideaza intreruperea de la Timer T1
EX1 - setat valideaza intreruperea externa 1
ET0 - setat valideaza intreruperea de la Timer 0
EX0 - setat valideaza intreruperea externa 0
IEN1
ET2 |
ECM2 |
ECM1 |
ECM0 |
ECT3 |
EXT2 |
ECT1 |
ECT0 |
ET2 - valideaza intreruperea data de depasirea capacitatii lui T2
ECM2 - valideaza intreruperea de la comparatorul 2 al T2
ECM1 - valideaza intreruperea de la comparatorul 1 al T2
ECM0 - valideaza intreruperea de la comparatorul 0 al T2
ECT3 - valideaza intreruperea de capturare 3 de la T2
ECT2 - valideaza intreruperea de capturare 2 de la T2
ECT1 - valideaza intreruperea de capturare 1 de la T2
ECT0 - valideaza intreruperea de capturare 0 de la T2
Fiecare
intrerupere are o adresa fixa a rutinei de tratare a
ei, conform tabelului.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1566
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved