Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme



Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Informatica


Index » educatie » Informatica
Modul de lucru PWM al T/C1


Modul de lucru PWM al T/C1




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:

  • Continutul registrului de comparatie OCR1A va fi modificat (prin adunarea cu o constanta, de exemplu $FF), intr-o rutina a intreruperii externe 0. Prin actionarea intrarii de intrerupere externa 0 se va modifica deci luminozitatea ledului.

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

Loop ;Bucla principala a programului

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 Loop

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.








Politica de confidentialitate


Copyright © 2020 - Toate drepturile rezervate