TIPS ‘N TRICKS

20 NOIEMBRIE 2007

Microcontrolere PICmicro® cu module CCP şi ECCP

Modulele CCP (Captură, Comparare şi PWM), care se găsesc în multe microcontrolere de la Microchip, sunt utilizate în principal pentru măsurarea şi controlul semnalelor de tip puls. ECCP (Enhanced CCP), disponibilă pe câteva dispozitive Microchip, diferă faţă de modulul obişnuit CCP prin aceea că oferă o funcţionalitate îmbunătăţită PWM, precum: suport full-bridge şi half-bridge, întârziere de bandă moartă programabilă şi funcţie îmbunătăţită de auto-închidere PWM. Modulele ECCP şi CCP sunt capabile de a îndeplini o largă varietate de sarcini. Sfaturile descrise mai jos sunt cunoştinţe de bază, de urmat la utilizarea acestor module, precum şi sugestii pentru aplicaţii practice. Sfaturi suplimentare pot fi identificate la: www.microchip.com.

TIP 1. – Întreruperi periodice
Generarea de întreruperi la intervale periodice este o tehnică utilă implementată în numeroase aplicaţii. Această tehnică permite programului principal să ruleze continuu, şi apoi, la intervale periodice, să sară la rutina de întreruperi pentru a executa sarcini specifice (de ex. citirea ADC). Normal, pentru generarea semnalelor periodice este potrivită utilizarea unui temporizator cu depăşire. Însă uneori sunt necesare intervale de întrerupere care nu pot fi obţinute cu un astfel de dispozitiv. CCP configurat în modul de comparaţie poate fi utilizat în aceste cazuri.

Exemplu de problemă:
Un PIC16F684 rulând la 8 MHz ai oscilatorului său intern trebuie să fie configurat astfel încât să reîmprospăteze un LCD exact de 5 ori pe secundă.
Pas #1: Se determină un factor de prescalare Numărător1 care permite o depăşire de mai mult decât 0,2 secunde.
a) Numărătorul1 întră în depăşire la: Tosc*4*65536* prescalare
b) Pentru prescalare de 1:1, Numărătorul1 întră în depăşire în 32,8 ms.
c) Un element de prescalare de 8 va cauza o depăşire mai mare de 0,2 secunde.
8 x 32,8 ms = 0,25s
Pas #2: Se calculează CCPR1 (CCPR1L şi CCPR1H) pentru scurtarea timpului la exact 0,2 secunde.
a) CCPR1 = Interval de timp/(Tosc*4*prescalare) = 0,2/(125 ns*4*8) =
5000 = 0xC350
b) De aici, CCPR1L = 0x50 şi CCPR1H = 0xC3
Pas #3: Configurarea CCP1CON
Modulul CCP trebuie să fie configurat în modul de declanşare evenimente speciale (Trigger Special Event). Acest mod generează o întrerupere atunci când Numărătorul1 egalează valoarea specificată în CCPR1L şi Numărătorul1 este automat reiniţializat (1). Pentru acest mod, CCP1CON = ‘b00001011’.
Nota 1: Modul de declanşare evenimente speciale porneşte de asemenea o conversie A/D dacă modulul A/D este activat. Dacă această funcţionalitate nu este dorită, modulul CCP va fi configurat în modul de generare de întrerupere software “generate software interrupt-on-match only” (ex.,CCP1CON = b’00001010′). Numărătorul1 trebuie de asemenea iniţializat manual în timpul întreruperii CCP.

TIP 2. – Formate de modulaţie
Modulul CCP, configurat în modul comparaţie, poate fi utilizat pentru a genera o varietate de forme de modulaţie. Următoarele figuri prezintă cele mai cunoscute formate de modulaţie:

Figura 2-1
PWM (Pulse-Width Modulation)

Figura 2-2
Manchester

Figurile prezintă modul în care arată nivelele logice ‘0’ sau ‘1’ pentru fiecare format de modulaţie. O transmisie constă practic din formarea unei transmisii asincrone seriale date de un bit de start urmat de 8 biţi de date şi un bit de stop.
TE este elementul de temporizare de bază pentru fiecare format de modulaţie şi care va varia în funcţie de viteza de transmitere dorită. Modul de declanşare evenimente speciale poate fi utilizat pentru generarea TE. Atunci când este generată întreruperea CCPx, programul din rutina ISR va implementa formatul de modulare dorit. Sunt posibile şi formate de modulare suplimentare.

Figura 2-3 Modularea în poziţia pulsului (Pulse-Position Modulation)

Figura 2-4
PWM variabil

TIP 3. – Generarea semnalului de tact pentru RTOS
RTOS (Real Time Operating Systems) necesită pentru operare un semnal periodic de întrerupere. Această întrerupere periodică sau “semnal de tact” este baza pentru sistemul de programare al RTOS. De exemplu, dacă este utilizat un tact de 2 ms, va programa RTOS să execute sarcinile la multipli de 2ms. Un RTOS ataşează o prioritate fiecărei sarcini, asigurând că cele mai critice sarcini sunt executate primele. Tabelul 3-1 prezintă un exemplu a acestor sarcini, prioritatea fiecăreia şi intervalul de timp necesar pentru executarea sarcinii.

Tabel: 3-1 Sarcini
Tehnicile descrise în TIP #1 (Întreruperi periodice) pot fi utilizate pentru generarea întreruperilor periodice de 2 ms utilizând modulul CCP configurat în modul comparaţie. Pentru mai multe informaţii RTOS şi utilizare, puteţi accesa Nota de aplicaţie AN777 “Multitasking on the PIC16F877 with the Salvo™ RTOS”.

TIP 4. – PWM cu rezoluţie de 16-Biţi

Figura 4-1 PWM cu rezoluţie de 16-Biţi

1 Se configurează CCPx pentru reiniţializarea ieşirii (pinul CCPx) la egalare în modul comparaţie (CCPxCON ).
2 Activarea întreruperii Numărătorului1.
3 Stabilirea perioadei formei de undă prin prescalarea Numărătorului1 (T1CON <5:4>).
4 Stabilirea factorului de umplere al formei de undă prin utilizarea CCPRxL şi CCPRxH.
5 Stabilirea pinului CCPx pentru întreruperea la depăşire a Numărătorului1.
Întrerupere CCPx:
Reiniţializare pin CCPx
Întrerupere Numărător1:
Stabilire stare pin CCPx
Nota 1: Un factor de umplere 100% nu poate fi atins cu această implementare datorită timpului de aşteptare al Numărătorului1. Perioada nu este afectată deoarece timpul de aşteptare va fi acelaşi de la perioadă la perioadă.
Numărătorul1 are patru valori de prescalare configurabile. Acestea sunt 1:1, 1:2, 1:4 şi 1:8. Posibilităţile de frecvenţă ale PWM descrise mai sus sunt determinate de Ecuaţia 4-1.

Ecuaţia 4-1: FPWM = FOSC/(65536*4*prescalare)
Pentru un microcontroler ce lucrează pe un oscilator de 20MHz (FOSC), aceasta înseamnă frecvenţe de 76,3Hz, 38,1Hz, 19,1Hz şi 9,5Hz pentru valorile de prescalare.

TIP 5. – Cititor secvenţial ADC

Figura 5-1 Cititor secvenţial ADC

Modul de declanşare evenimente speciale (Trigger Special Event) este un sub-mod al modului Comparaţie, generând o întrerupere periodică suplimentar pornirii automate a unei conversii A/D când Numărătorul1 egalează CCPRxL şi CCPRxH. Următorul exemplu demonstrează cum să se citească secvenţial canalele A/D la un interval periodic.

Exemplu
Fiind dat PIC16F684 rulând la frecvenţa oscilatorului său intern la 8 MHz, se configurează microcontrolerul pentru citirea secvenţială a pinilor analogici AN0, AN1 şi AN2 la intervale de 30 ms.
Pas #1: Se determină prescalarea Numărătorului1
a) Numărătorul1 intră în depăşire la: TOSC*4*65536* prescalare.
b) Pentru o prescalare de 1:1, depăşirea Numărătorului1 apare în 32,8 ms.
c) Aceasta este mai mare de 30ms, astfel încât o prescalare de 1 este adecvată.
Pas #2: Se calculează CCPR1 (CCPR1L şi CCPR1H)
a) CCPR1=Interval de timp/(TOSC*4*prescalare)=0.030/(125ns*4*1) = 6000 = 0xEA60
b) De aceea, CCPR1L = 0x60, şi CCPR1H = 0xEA
Pas #3: Se configurează CCP1CON
Modulul ECCP trebuie configurat în modul de declanşare evenimente speciale. Acest mod generează o întrerupere atunci când Numărătorul1 egalează valoarea specificată în CCPR1. Numărătorul1 este automat reiniţializat, iar bitul GO în ADCON0 este automat stabilit. Pentru acest mod, CCP1CON = ‘b00001011’.
Pas #4: Adăugarea unei rutine de întrerupere
Când este generată întreruperea ECCP, se selectează următorul pin A/D pentru citirea prin modificarea registrului ADCON0.

www.microchip.com

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *

  • Folosim datele dumneavoastră cu caracter personal NUMAI pentru a răspunde comentariilor/solicitărilor dumneavoastră.
  • Pentru a primi raspunsuri adecvate solicitărilor dumneavoastră, este posibil să transferăm adresa de email și numele dumneavoastră către autorul articolului.
  • Pentru mai multe informații privind politica noastră de confidențialitate și de prelucrare a datelor cu caracter personal, accesați link-ul Politica de prelucrare a datelor (GDPR) si Cookie-uri.
  • Dacă aveți întrebări sau nelămuriri cu privire la modul în care noi prelucrăm datele dumneavoastră cu caracter personal, puteți contacta responsabilul nostru cu protecția datelor la adresa de email: gdpr@esp2000.ro
  • Abonați-vă la newsletter-ul revistei noastre