Documente Academic
Documente Profesional
Documente Cultură
1) Obiectiv laborator
Acest laborator are ca scop familiarizarea voastr cu lucrul cu timerele
prezente n microcontrollerul Atmega32, acoperind att modul normal de
funcionare ct i cel de PWM. Folosirea timerelor implic i familiarizarea cu
ntreruperile hardware ale procesorului, prezentate n prima parte a laboratorului.
2) Sistemul de intreruperi
O ntrerupere hardware reprezint un semnal sincron sau asincron de la un
periferic ce semnalizeaz apariia unui eveniment care trebuie tratat de ctre
procesor. Tratarea ntreruperii are ca efect suspendarea firului normal de execuie
al unui program i lansarea n execuie a unei rutine de tratare a ntreruperii
(RTI).
ntreruperile hardware au fost introduse pentru a se elimina buclele pe
care un procesor ar trebui s le fac n ateptarea unui eveniment de la un
periferic. Folosind un sistem de ntreruperi, perifericele pot comunica cu
procesorul, acesta din urma fiind liber sa-i ruleze programul normal in restul
timpului i s i ntrerup execuia doar atunci cnd este necesar. nainte de a
lansa n execuie o RTI, procesorul trebuie sa aib la dispoziie un mecanism prin
care s salveze starea n care se afla n momentul apariiei ntreruperii. Aceasta
se face prin salvarea ntr-o memorie, de cele mai multe ori organizata sub forma
unei stive, a registrului contor de program (Program Counter), a registrelor de
stare precum i a tuturor variabilelor din program care sunt afectate de execuia
RTI. La sfritul execuiei RTI starea anterioar a registrelor este refcut i
programul principal este reluat din punctul de unde a fost ntrerupt.
Pentru a asocia o ntrerupere cu o anumit rutin din program, procesorul
folosete tabela vectorilor de ntrerupere (TVI), ilustrat n figura de mai jos.
n aceast tabel, fiecrei ntreruperi i este asociat adresa rutinei sale de
tratare, la care programul va face salt n cazul apariiei acesteia. Aceste adrese
sunt predefinite i sunt mapate n memoria de program ntr-un spatiu continuu
care alctuiete TVI. Adresele ntreruperilor n TVI sunt setate n funcie de
prioritatea lor, cu ct adresa este mai mic cu att prioritatea este mai mare.
#define
#define
#define
#define
#define
#define
#define
#define
#define
INT0_vect
INT1_vect
INT2_vect
TIMER2_COMP_vect
TIMER2_OVF_vect
TIMER1_CAPT_vect
TIMER1_COMPA_vect
TIMER1_COMPB_vect
TIMER1_OVF_vect
_VECTOR(1)
_VECTOR(2)
_VECTOR(3)
_VECTOR(4)
_VECTOR(5)
_VECTOR(6)
_VECTOR(7)
_VECTOR(8)
_VECTOR(9)
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
TIMER0_COMP_vect
TIMER0_OVF_vect
SPI_STC_vect
USART_RXC_vect
USART_UDRE_vect
USART_TXC_vect
ADC_vect
EE_RDY_vect
ANA_COMP_vect
TWI_vect
SPM_RDY_vect
_VECTOR(10)
_VECTOR(11)
_VECTOR(12)
_VECTOR(13)
_VECTOR(14)
_VECTOR(15)
_VECTOR(16)
_VECTOR(17)
_VECTOR(18)
_VECTOR(19)
_VECTOR(20)
Activarea lor poate fi realizat forat i din handler-ul de ntrerupere (de exemplu
suntem n handler-ul pt reset, i dorim s activm ntreruperile unui timer).
Registri
Descrierea complet a acestor registri o gsii n datasheet-ul
microncontrollerului n capitolele Interrupts, External Interrupts.
Status Register (SREG)
pt oricare bit INT2:0, dac este 1 i bitul I din SREG este 1 atunci sunt
activate ntreruperile externe pe pinul corespunztor.
2.
3.
Timerele sunt prevzute cu mai multe canale astfel nct se pot desfasura
diferite numratori n paralel. ATmega32a este prevzut cu diferite uniti de
timer: de opt bii i de numrare pe aisprezece bii.
Timerele pot funciona i n moduri PWM, astfel ncat s genereze pe un pin de
ieire un semnal, pentru mai multe detalii vedei seciunea PWM din acest laborator.
Moduri de funcionare
Timer/Counter0 i Timer/Counter2 au patru moduri de funcionare (dintre care
vom detalia 3, pentru cel de-al patrulea putei citi datasheet-ul, ce se difereniaza prin:
Mod
Descriere
Imagine contor
Proprieti
CTC
Clear
Timer
on
Compa
re
FastP
WM
* pornete de la 0
* numr pn cnd se
atinge un prag
(OCRx adic OCR0A/OCR0B pentr
u timer-ul 0,
OCR2A/OCR2B pentru
timer-ul 2 etc)
* frecvena
este
variabil,
determinat
de
modificarea
pragului
dup fiecare
ciclu
* pornete de la 0
* numr pn la
valoarea maxim (255
pentru 8 bii, 65535
pentru 16 bii)
* pragul se atinge pe
parcursul numrtorii
* frecvena
este fixat
biii WGM din timer-ul respectiv (care se gsesc n registrele TCCR din
datasheet, la seciunile aferente timerelor, Register Description)
pragul de numrare
* frecvena
este fixat
* folosit
pentru
proprieti
speciale ale
semnalului
n anumite
aplicaii
Setarea prescaler-ului
Pentru setarea prescaler-ului se vor modifica biii tip CS.. din
registrul TCCR.. al timer-ul respectiv. De exemplu, pentru setarea valorii de
prescaler 256 pentru timer-ul 2, vom urmri n datasheet capitolul 17 (8-bit
Timer/Counter2 with PWM) - seciunea Register Description TCCR2A i TCCR2B
1. gsim tabelul pentru valorile CS..
2. aflm c prescaler-ul 256 corespunde biilor 1 1 0 pentru biii CS22 CS21 CS20
Presupunnd c plecm de la un registru complet neiniializat (0 este
valoarea default pentru majoritatea biilor), avem urmtorul cod:
Principiul de functionare
Factorul de umplere se exprima in procente si reprezinta cat la suta din
perioada unui semnal acesta va fi pe ON. In Figura de mai jos(2) se pot observa
semnale PWM cu factori de umplere diferiti. Astfel, se poate deduce foarte usor
formula pentru a obtine valoarea factorului de umplere (D):
D = t_on / (t_on + t_off) * 100% = pulse_width / period * 100%
Lucrul cu PWM-ul
Lucrul cu PWM-ul presupune iniializarea unui timer apoi configurarea
output-ului pe pin. Fiecare timer are doi pini pe care poate da output un astfel de
semnal ( Timer0 are OC0A i0C0B, Timer 1 are OC1A i OC1B etc).
De exemplu, presupunem c avem timer 1 configurat pe modul de funcionare
fastPWM (modul de funcionare nu trebuie neaprat s conin cuvntul 'PWM' ca
s poat fi folosit pentru generarea unui semnal). FastPWM este caracterizat de o
frecven fix i un prag modificat de programator. Vom configura tipul de output
cu biii tip COM.. din registrele TCCR ale timer-ului corespunztor (n exemplul
nostru timer-ul 1). Descoperim n capitolul 16 ( 16-bit Timer/Counter1 and
Timer/Counter3 with PWM) - seciunea Register
Description - TCCR1A, TCCR1B i TCCR1C.
Descoperim c: