+ All Categories
Home > Documents > Lab04 - Interrupts & PWM

Lab04 - Interrupts & PWM

Date post: 07-Aug-2018
Category:
Upload: marian-vld
View: 222 times
Download: 0 times
Share this document with a friend

of 6

Transcript
  • 8/20/2019 Lab04 - Interrupts & PWM

    1/13

     Lab 4 - Intreruperi & PWM

    1) Obiectiv laborator

    Acest laborator are ca scop familiarizarea voastră cu lucrul cu timereleprezente în microcontrollerul Atmega32, acoperind atât modul normal defuncționare cât și cel de PW! "olosirea timerelor implică și familiarizarea cu

     întreruperile #ard$are ale procesorului, prezentate în prima parte a laboratorului!

    2) Sistemul de intreruperi% întrerupere #ard$are reprezintă un semnal sincron sau asincron de la un

    periferic ce semnalizează apariția unui eveniment care trebuie tratat de cătreprocesor! &ratarea întreruperii are ca efect suspendarea 'rului normal de e(ecuție

    al unui program și lansarea în e(ecuție a unei rutine de tratare a întreruperii!"I)!)ntreruperile #ard$are au fost introduse pentru a se elimina buclele pe

    care un procesor ar trebui să le facă în așteptarea unui eveniment de la unperiferic! "olosind un sistem de întreruperi, perifericele pot comunica cuprocesorul, acesta din urma 'ind liber sa*și ruleze programul normal in restultimpului și să își întrerupă e(ecuția doar atunci când este necesar! )nainte de alansa în e(ecuție o +&, procesorul trebuie sa aibă la dispoziție un mecanism princare să salveze starea în care se a-a în momentul apariției întreruperii! Aceastase face prin salvarea într*o memorie, de cele mai multe ori organizata sub formaunei stive, a registrului contor de program .Program /ounter0, a registrelor de

    stare precum și a tuturor variabilelor din program care sunt afectate de e(ecuția+&! 1a sfârșitul e(ecuției +& starea anterioară a registrelor este refăcută șiprogramul principal este reluat din punctul de unde a fost întrerupt!

    Pentru a asocia o întrerupere cu o anumită rutină din program, procesorulfolosește tabela vectorilor de întrerupere .&0, ilustrată în 'gura de mai os!)n această tabelă, 'ecărei întreruperi îi este asociată adresa rutinei sale detratare, la care programul va face salt în cazul apariției acesteia! Aceste adresesunt prede'nite și sunt mapate în memoria de program într*un spatiu continuucare alcătuiește &! Adresele întreruperilor în & sunt setate în funcție deprioritatea lor, cu cât adresa este mai mică cu atât prioritatea este mai mare!

    #define INT0_vect _VECTOR(1)#define INT1_vect _VECTOR(2)#define INT2_vect _VECTOR(3)#define TIMER2_COMP_vect _VECTOR(4)#define TIMER2_OVF_vect _VECTOR(5)#define TIMER1_CAPT_vect _VECTOR()#define TIMER1_COMPA_vect _VECTOR(!)#define TIMER1_COMP"_vect _VECTOR()#define TIMER1_OVF_vect _VECTOR($)

  • 8/20/2019 Lab04 - Interrupts & PWM

    2/13

    #define TIMER0_COMP_vect _VECTOR(10)#define TIMER0_OVF_vect _VECTOR(11)#define %PI_%TC_vect _VECTOR(12)#define &%ART_R'C_vect _VECTOR(13)#define &%ART_&RE_vect _VECTOR(14)#define &%ART_T'C_vect _VECTOR(15)#define AC_vect _VECTOR(1)#define EE_R_vect _VECTOR(1!)#define ANA_COMP_vect _VECTOR(1)

    #define T*I_vect _VECTOR(1$)#define %PM_R_vect _VECTOR(20)

    4upă cum se observă din 'gura de mai sus, pe lângă întreruperilecomponentelor interne u/*ului.timer*e, interfețe seriale, convertor analog*digital0, e(istă și 3 linii pentru întreruperi de la periferice e(terne5 6&7, 6&8,6&2! 9emnalele pentru aceste întreruperi e(terne vin pe pinii 6&7, 6&8 și 6&2.portul 4 pinii 2, 3 respectiv portul : pinul 20!

    icrocontroller*ul oferă posibilitatea mascării întreruperilor prin scrierea pe7 a bitului I din re#istrul de status S!$%)! aloarea inițială a acestui bit este7, deci c#iar dacă întreruperile unui periferic sunt activate din unul din registreleacestuia, tot nu sunt luate în considerare decât când se scrie 8 pentru acest -ag!

     &otodată, la apariția unei întreruperi, în afară de salvarea stării, procesoruldezactivează întreruperile, iar la revenirea din rutina de tratare le reactivează!

  • 8/20/2019 Lab04 - Interrupts & PWM

    3/13

    Activarea lor poate ' realizată forțat și din #andler*ul de întrerupere .de e(emplusuntem în #andler*ul pt reset, și dorim să activăm întreruperile unui timer0!

  • 8/20/2019 Lab04 - Interrupts & PWM

    4/13

    ) "ratarea unei intreruperi

    9ă presupunem că programul nostru primește întreruperea e(ternă 6&7 întimp ce e(ecută instructiunea ldi R16,0xFF! 4upă efectuarea instrucțiunii, registrulcontor program .PC0 este automat salvat în stivă și apoi inițializat la valoarea

    corespunzatoare adresei lui 6&7 .;7720! Acest lucru se traduce prin saltulprogramului de la adresa curentă .;8230 la adresa ;772! Aici, programul găseșteinstrucțiunea jmp $2FF care*i permite sa sară la rutina efectiva de tratare a

     întreruperii! 1a sfârșitul oricarei +& trebuie să e(iste instrucțiunea reti care refacedin stivă registrul PC .programul sare înapoi la adresa de unde rămăsese înaintede întrerupere0!

    )n timpul e(ecuției unei întreruperi, bitul I din SREG este setat la 7 șiresetat la ieșire, adică orice altă întrerupere care poate apărea în timpul

  • 8/20/2019 Lab04 - Interrupts & PWM

    5/13

     întreruperii curente nu va ' luată in seamă! /u toate acestea, utilizatorul poatesă reseteze bitul I din soft$are, permițând astfel e(ecuția unei întreruperi în

     întrerupere!

    !e#istri

    4escrierea completă a acestor registri o găsiți în datas#eet*ul

    microncontrollerului în capitolele Interrupts, External Interrupts!

    Status Register (SREG)

    conține -ag*uri setate in urma operațiilor unității aritmetice logice

    conține -ag*ul I de activare

  • 8/20/2019 Lab04 - Interrupts & PWM

    6/13

    4) "imere' Principiul de (uncionare al unui "imer

     &imerul

  • 8/20/2019 Lab04 - Interrupts & PWM

    7/13

     &imerele sunt prevăzute cu mai multe canale astfel încât se pot desfasuradiferite număratori în paralel! A&mega32a este prevăzut cu diferite unități detimer5 de opt biți și de numărare pe șaisprezece biți!

     &imerele pot funcționa și în moduri PW, astfel încat să genereze pe un pin deieșire un semnal, pentru mai multe detalii vedeți secțiunea PW din acest laborator!

    Moduri de (uncionare

     &imer

  • 8/20/2019 Lab04 - Interrupts & PWM

    8/13

    "

    lear

    "imer

    on

    ompa

    re

    pornește de la 7 numără până când seatinge un prag.%/+( *adică OCR0A

  • 8/20/2019 Lab04 - Interrupts & PWM

    9/13

  • 8/20/2019 Lab04 - Interrupts & PWM

    10/13

    Principiul de (unctionare"actorul de umplere se e(prima in procente si reprezinta cat la suta din

    perioada unui semnal acesta va ' pe %6! n "igura de mai os.20 se pot observasemnale PW cu factori de umplere diferiti! Astfel, se poate deduce foarte usorformula pentru a obtine valoarea factorului de umplere .405

    & t-.n / 't-.n t-.) 1003 & p4l5e-idt7 / peri.d 1003

    Astfel, tensiunea medie care aunge la dispozitiv este dat de 4 cc!

    "ig! 25 9emnal PW cu diferiți factori de umplere .sursa5 linJ K3L0

    odularea folosește variația factorului de umplere a unei forme de undadreptung#iulară pentru a genera la ieșire o tensiune analogică! /onsiderand oformă de undă dreptung#iulara (t) cu o valoare minimă *min și o valoare

    ma(imă *ma( și factorul de umplere $ .ca in 'gura 'gure 20 valoarea medie aformei de undă e dată de relația5

    cum (t) este o formă de undă dreptung#iulară valoarea sa ma(imă se atingepentru 7MtM4&!

     4in punct de vedere al Atmega32a e(ista 3 tipuri de PW5 .ast PWM * numărarea se face doar pe frontul crescator

    P/ase orrect PWM * numărarea se face pe ambele fronturi! Pentruaceleasi con'gurații P#ase /orrect PW este de 2 ori mai lent!

    http://cs.curs.pub.ro/wiki/pm/lab/lab2#img_image8http://cs.curs.pub.ro/wiki/pm/lab/lab2#img_image8

  • 8/20/2019 Lab04 - Interrupts & PWM

    11/13

    P/ase and .re5uenc6 orrect PWM * principala diferență între acestmod și cel de P#ase /orrect este momentul cand este actualizatregistrul OCRnx!

     

    ulte circuite digitale pot genera semnale PW! aoritateamicrocontrollerelor oferă această facilitate, pe care o implementează folosind unnumărator care este incrementat periodic .conectat direct sau indirect la ounitate de ceas0 și care este resetat la sfarsitul 'ecărei perioade a PW*ului!/ând valoarea numaratorului este mai mare decat valoarea de referință, ieșireaPW .output*ul0 trece din starea înaltă în stare oasă .sau invers0!

    Atmega32a dispune de D canale de PW distribuite astfel5 timer7 - O!78 O!70 * C biți .cu timer7 se poate con'gura

    doar factorul de umplere, frecvența 'ind dată de prescalerul

    ceasului0 timer2 - O!28 O!20 * C biți .cu timer2 se poate con'gura

    doar factorul de umplere, frecvența 'ind dată de prescalerulceasului

    timer18 - O!18 O!10 respectiv O!8 O!0* 8D biți .cutimer8,3 se poate con'gura atât factorul de umplere cât șifrecvența semnalului0

  • 8/20/2019 Lab04 - Interrupts & PWM

    12/13

    Lucrul cu PWM-ul

    1ucrul cu PW*ul presupune inițializarea unui timer apoi con'gurareaoutput*ului pe pin! "iecare timer are doi pini pe care poate da output un astfel desemnal . &imer7 are OC0A și0C0, &imer 8 are OC1A și OC1 etc0!4e e(emplu, presupunem că avem timer 8 con'gurat pe modul de funcționare

    fastPW .modul de funcționare nu trebuie neapărat să conțină cuvântul NPWN casă poată ' folosit pentru generarea unui semnal0! "astPW este caracterizat de ofrecvență '(ă și un prag modi'cat de programator! om con'gura tipul de outputcu biții tip CO" din registrele TCCR# ale timer*ului corespunzător .în e(emplulnostru timer*ul 80! 4escoperim în capitolul 8D . +,-bit Timer/Counter+ anTimer/Counter. it! "#M0 * secțiunea Register$es%ription * TCCR+&, TCCR+' și TCCR+C

    4escoperim că5 =(istă un tabel pentru biții CO" special pentru modul fastPW

    odul 1 0 pentru biții CO"1A1 CO"1A0 va lăsa semnalul de pe pinul OC1A întimpul numărătorii pe 8 până la atingerea pragului și va seta semnalul pe 7de la atingerea pragului până la capătul unui ciclu .numărare completă peDBB3D elemente0

    Pentru a obține un factor de umplere (O, aici vom seta OCR1A & x 6++8+ / 100

     R %& ' 1 (( P+)*  // OC1A este PD5

     TCCR1A %& '1 (( CO"1A1)*

     OCR1A & 6++8+ / 2*  // fill-rate 0.5, jumătate din timp 1, jumătate din timp 0

    plicaii laborator - 0lin9 cu timere *i L$, !%0

    8! /reati o aplicatie care sa aprinda si sa stinga ledurile de B ori.cate 377 ms0apasarea primului buton folosind intreruperea e(terna 6&7 con'gurata sa 'edeclansata la aparitia unui front crescator pe 6&7!

    a! odi'cati aplicatia astfel incat sa utilizeze intreruperea 6&8con'gurata astfel incat sa 'e declansata la orice sc#imbare de front pe

    pinul corespunzator intreruperii 6&8! .asignarea pinului trebuieidenti'cata din datas#eet*ul microcontrolerului0

    b! 9a se a'seze pe b@te displa@ un mesa speci'c 'ecarei intreruperi! .dee(5 F8G si F2G0!

    2! /reati o aplicatie care genereaza un semnal dreptungiular modulat inlatime.Pulse Witd# odulation * PW0! odi'carea factorului de umplere se

  • 8/20/2019 Lab04 - Interrupts & PWM

    13/13

    va face folosind 2 butoane legate de 2 pini ai portului :! "actorul de umplerese va a'sa pe b@te displa@!

    6ota5 "recventa oscilatorului e(tern este de 8D#z!

    3! /reati un program numit 9c#eduler care implementeaza un mec#anism de deplani'care a tasJ*urilor in cadrul unui +&%9! ecanismul trebuie sa respecteurmatoarele conditii

    a! &icJer 8ms

    b! 9a foloseasca un timer con'gurat in modul /&/

    c! 8 tasJ de init si ciclice care sa ruleze la 87ms, 27ms, 7ms,respective C7ms

    d! ai mult de 2 tasJ*uri nu trebuie sa ruleze in acelasi timp!


Recommended