Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Modul de lucru PWM al T/C1
Prezentarea generala a PWM
Prin selectarea modului PWM, T/C1 formeaza impreuna cu OCR1A si cu OCR1B (registrele 1A/B de comparare) un PWM dual de 8, 9, sau 10 biti cu functionare independenta, fara impulsuri parazite si corect fazat, ale carui iesiri le reprezinta pinii OC1A (PD5) si OC1B (PD4). T/C1 actioneaza ca un numarator reversibil. El numara in sus de la $0000 pana la TOP (vezi tabelul 6.1), apoi, inainte ca ciclul de numarare sa fie repetat, se intoarce si numara innapoi pana la zero. Atunci cand valoarea din numarator egaleaza continutul celor mai putin semnificativi 10 biti din OCR1A sau din OCR1B, pinii OC1A/OC1B sunt setati sau stersi corespunzator cu setarile bitilor COM1A1/COM1A0 respectiv COM1B1/COM1B0 din registrul de control al TC1 - TCCR1A. In tabelul 6.2 sunt prezentate detaliile acestei functii.
Tabelul 6.1. Valorile de TOP ale cronometrului si frecventa PWM.
Rezolutia PWM-ului |
Valoarea de TOP a cronometrului |
Frecventa |
8-biti |
$00FF (255) |
fTC1/510 |
9-biti |
$01FF (511) |
fTC1/1022 |
10-biti |
$03FF (1023) |
fTC1/2046 |
Tabelul 6.2. Efectul asupra pinilor de iesire OCX1 in modul de lucru PWM.
COM 1X1 |
COM1X0 |
Efectul asupra OCX 1 |
Neconectat |
||
Neconectat |
||
La numararea in sus, sters la aparitia unei situatii de egal. La numararea in jos (PWM neinversat), setat la aparitia unei situatii de egal. |
||
La numararea in jos, sters la aparitia unei situatii de egal. La numararea in sus (PWM inversat), setat la aparitia unei situatii de egal. |
Pentru evitarea fazarii incorecte a impulsurilor, in interior este folosita o locatie temporara pentru scrierea in OCR1A/B. Pana cand se realizeaza fazarea corecta, o citire din OCR1A/B va furniza de fapt continutul acestei locatii temporare.
Atunci cand OCR1 contine $0000 sau TOP, iesirea OC1A/OC1B este mentinuta jos sau sus in conformitate cu setarile lui COM1A1/COM1A0 sau ale lui COM1B1/COM1B0. Aceasta este aratata in tabelul 6.3.
Tabelul 6.3. Iesirile OCR 1 X ale modulatorului de impulsuri in factor de umplere egale cu $0000 sau cu TOP.
COM1X1 |
COM1X0 |
OCR1X |
Iesirea OC1X |
L |
|||
TOP |
H |
||
H |
|||
TOP |
L |
Nota: X = A sau B.
In modul de lucru PWM, flag-ul de depasire (overflow), TOV1, este setat atunci cand numaratorul isi schimba directia la $0000. Intreruperea 1 de depasire a numaratorului opereaza exact ca in modul normal al T/C1, adica apare atunci cand TOV1 este setat, iar intreruperea de depasire a T/C1 precum si intreruperile globale, sunt activate prin bitii TOIE1 din TIMSK respectiv I din SREG .
Bitii 1, 0 - PWM11, PWM10 din TCCR1A selecteaza modul de operare ca PWM al TC1 dupa cum se prezinta in tabelul 6.4 (prezentat si in lucrarea de laborator nr. 5 ).
Tabelul 6.4. Selectarea modului de functionare ca PWM.
PWM11 |
PWM10 |
Descriere |
Operarea PWM a T/C1 este dezactivata |
||
TC1 este un PWM de 8-biti |
||
TC1 este un PWM de 9-biti |
||
TC1 este un PWM de 10-biti |
2. Modul de lucru
1. Se va scrie un program care sa aprinda un led cu luminozitate variabila (conversie numeric - analogica). Luminozitatea va fi modificata prin pinii PD0 (crestere) si PD1 (scadere).
Indicatii:
Un exemplu de realizare a programului este urmatorul:
;Declaratii
.INCLUDE '8535def.inc' ;adauga definitiile pentru AT90S8535 .
.equ Leds=PORTC
;RESET
rjmp Reset
;Intreruperea 0
rjmp Intr0
.ORG $0020
Reset:
;Initializare stiva SP=$025f
ldi r17,high(RAMEND);Octetul sup. al ultimei adrese RAM
ldi r16,low(RAMEND) ;Octetul inf. al ultimei adrese RAM
out SPH,r17 ;trimisi in octetul superior al SP
out SPL,r16 ;si in octetul inferior al SP
;Initializare In-Out
ser r16 ;Seteaza bitii lui r16
out DDRC,r16 ;Directia portului C -iesire
out DDRA,r16 ;Directia portului D - iesire
clr r16 ;Sterge bitii lui r16
out DDRA,r16 ;Directia portului A - intrare
;initializare Timer1
ldi r16,(3<<CS11
out TCCR1B,r16
;initializare PWM
ldi r16, (1<<PWM10)|(1<<COM1A1)
out TCCR1A,r16
;Initializare intrerupere externa Intr0
ldi r16,(1<<INT0)
out GIMSK,r16
in r16,MCUCR
ser r16,$03
out MCUCR,r16
;Activare intreruperi
sei
in r16,PINA
bst r16,5 ;Citeste starea iesirii OC1A si ;o salveaza in flag-ul T
ser r16
bld r16,0 ;Copiaza starea iesirii OC1A la ;iesirea PD0 (LED0)
out leds,r16
rjmp
Intr0:
clr r17
out OCR1AH,r17
subi r18,$0a ;Decrementeaza valoarea lui r18 ;cu $0a la fiecare intrerupere
out OCRIAL,r18 ;Copiaza in OCR1AL r18
reti
3. Se va modifica programul anterior pentru a varia in sensuri opuse luminozitatea ledurilor de pe pinii PC3 si PC4.
4. Se va modifica programul anterior pentru a varia gradat luninozitatea a 4 leduri de pe portul A. La apasarea unui buton, primul led isi va mari luminozitatea, cel de al doilea isi va mari luminozitatea mai putin iar ceilalti si-o vor micsora in aceeasi proportie. La apasarea altui buton, luminozitatile se vor modifica invers.
Indicatie: Se vor folosi ambele iesiri OC1A si OC1B, pinii respectivi fiind cititi si copiati in pozitii convenabile in portul C.
2. Se va scrie un program care sa aprinda cele 8 leduri cuplate la portul C cu luminozitate variabila, comandata prin butoanele cuplate la portul A.
Indicatie:Se va face modificarea periodica, in bucla principala, a bitilor portului PC. Bitii acestui port vor fi modificati in urma compararii intre continutul TC0 cu 8 registre generale, al caror continut poate fi incrementat prin apasarea butoanelor. Daca la comparatia intre TC0 si un registru de comparare continutul TC0 este mai mic, bitul corespunzator din PB este pus in 0 iar daca este mai mare este pus in 1. In felul acesta se poate emula software functia PWM implementata hardware in T/C1.
Copyright © 2024 - Toate drepturile rezervate