Tutorials - PIC18 by Data Sheet

 
 

CCP - PWM


I Moduli CCP-PWM

I PIC della famigli 18F4321 implementano due moduli CCP (Compare/Capture/PWM). Ogni modulo dispone di un registro a 16 bit che può operare come registro Capture, come registro Compare o come registro del ciclo di lavoro del PWM master/slave.
I dispositivi in package a 28 pin dispongono dei moduli CCP1 e CCP2 che operano nel modo descritto, mentre in quelli in package a 40/44 pin il modulo CCP1 è definito Enhanced CCP Module, modalità che è descritta nel capitolo successivo.
Le caratteristiche descritte qui si applicano però sia alle modalità standard che enhanced.

Il registro CCPxCON è la via per controllare  le funzioni del relativo modulo CCPx  :

CCPxCON bit - - DCxB1 DCxB0 CCPxM3 CCPxM2 CCPxM1 CCPxM0
funzione U U R/W R/W R/W R/W R/W R/W
default 0 0 0 0 0 0 0 0
  • bit 7-6   non utilizzati.
                  La lettura riporta 0
  • bit 5-4   TDCxB1:0 : PWM duty cycle
                  Non usati in modo Capture
                  Non usati in modo Compare
                  In modo PWM sono gli LSB (bit 1 e 0) del Duty Cycle a 10 bit
                  Gli MSB (Bbit9-2) si trovano nel registro CCPRLx (bit DCx9:2)
  • bit 3-0  CCPxM3:0 : modo di funzionamento
                  0000 =  modulo disabilitato
                  0001 =  non utilizzabile
                  0010 =  modo Compare, toggle out (CCPxIF è settato)
                  0011 =  non utilizzabile
                  0100 =  modo Capture sul fronte di discesa
                  0101 =  modo Capture sul fronte di salita
                  0110 =  modo Capture sul quarto fronte di salita
                  0111 =  modo Capture sul sedicesimo fronte di salita
                  1000 =  modo Compare : inizializza il pin CCP a livello basso e lo alza quando 
                                la comparazione è verificata (CCPxIF è settato)
                 1001 =  modo Compare : inizializza il pin CCP a livello alto e lo abbassa quando 
                                 la comparazione è verificata (CCPxIF è settato)
                 1010 =  modo Compare : genera un interrupt quando la comparazione è verificata
                                 (CCPxIF è settato, il pin CCP riflette lo stato dell' I/O)
                 1011 = modo Compare : trigger special event, reset del timer, avvio conversione A/D
                                  quando  la comparazione è verificata (CCPxIF è settato)
                 11xx =  modo PWM

I valori di default al POR sono indicati nella tabella.


Configurazione del modulo CCP

Ogni modulo CCP è associato ad un registro di controllo (CCPxCON) e ad un registro dati (CCPRx), che è composto da due registri a 8 bit (CCPRxH e CCPRxL), entrambi leggibili e scrivibili.

I moduli CCP possono utilizzare i timer 1, 2 o 3 a seconda della selezione imposta. Timer 1 e 3 sono disponibili in modo Capture e Compare, mentre Timer2 è disponibile per il PWM.

CCP/ECCP Timer
Capture
Compare
PWM
Timer1 o Timer3
Timer1 o Timer3
Timer2

L' uso di un timer particolare è imposto dallo stato del bit CCP nel registro TMR3CON
Entrambi i moduli possono essere attivati contemporaneamente e possono condividere le risorse dello stesso timer se sono configurati per lo stesso modo di lavoro (compare o capture o PWM).
Per il Timer1 in modo asincrono la modalità Capture non potrà funzionare.

La tabella seguente riporta le interazioni tra CCP1 e CCP2 in rapporto all' uso delle risorse dello stesso timer :
CCP1 CCP2 Interazione
Capture Capture Entrambi i moduli possono usare Timer1 o Timer3, oppure time base diversi
Capture Compare CCP2 può essere configurato per Special Event Trigger che resetta TMR1 o TMR3, a seconda sia stato usato uno o l' altro timer. Può essere avviata anche la conversione A/D. Le operazioni di CCP1 possono essere compromesse se entrambi i moduli usano lo steso timer
Compare Capture CCP1 può essere configurato per Special Event Trigger che resetta TMR1 o TMR3, a seconda sia stato usato uno o l' altro timer. Può essere avviata anche la conversione A/D. Le operazioni di CCP2 possono essere compromesse se entrambi i moduli usano lo steso timer
Compare Compare Entrambi i moduli possono essere configurati per Special Event Trigger che resetta TMR1 o TMR3, a seconda sia stato usato uno o l' altro timer. Può essere avviata anche la conversione A/D. Possono verificarsi conflitti se entrambi i moduli usano e resettano lo stesso timer
Capture PWM Nessuna
Compare PWM Nessuna
PWM Capture Nessuna
PWM Compare Nessuna
PWM PWM Entrambi i PWM avranno la stessa frequenza e velocità di aggiornamento determinata dall' interrupt di Timer2

 


Assegnazione del pin CCP2

Il pin CCP2 (ingresso Capture o uscita Compare e PWM) può essere assegnato a diversi GPIO a seconda della programmazione del bit CCP2MX. Per deafult il pin assegnato è RC1 (CCP2MX=1), ma portandolo a zero CCP2 viene spostato su RB3.

L' assegnazione della funzione al pin richiede in ogni caso che il bit corrispondente nel registro TRIS (TRISC<1> o TRISB<3>) siano correttamente impostati come ingresso (per il modo Capture) o come uscita (per Compare e PWM) . La sola assegnazione attraverso CCP2MX non è sufficiente ad corretto funzionamento del pin.


Modo Capture

Il diagramma a blocchi seguente riassume il funzionamento   del modo Capture.

La funzione del modo Capture è questa : a seguito di una transizione di livello logico (programmabile) su un pin di ingresso, chiamato CCPx (anche questo programmabile come assegnazione) , il contenuto dei registri di conteggio di un timer (Timer1 e Timer3)  viene copiato nei registri CCPRx.
In corrispondenza, viene generata una chiamata di interrupt.

Lo scopo del modo Capture è quello di determinare il tempo trascorso tra due eventi , ad esempio nella misurazione del periodo di un segnale.

La disponibilità di un prescaler per 4 o per 16 permette una maggiore flessibilità di impiego.

Come si vede dal diagramma, sia Timer 1 che Timer3 possono essere usati indifferentemente per uno o per l' altro, o per entrambi, i moduli CCP, che nel caso riportato sono due.  Invece i pin di trigger CCP1 e CCP2 hanno due diverse vie hardware e determinano due diverse chiamate di interrupt.

I moduli CCP possono essere abilitati e disabilitati da programma in qualsiasi combinazione.

Nel modo Capture, i registri CCPRxH:L catturano il contenuto dei corrispondenti registri TMR1 o TMR3 quando avviene l' evento programmato sul pin CCPx.

Come evento sono definibili le seguenti condizioni :
- ogni fronte di discesa
- ogni fronte di salita
- ogni 4 fronti di salita
- ogni 16 fronti di salita

L' evento è selezionato dai bit CCPxM3:0 (CCPxCON<3:0>). Al momento della cattura, il flag CCPxIF viene settato e se abilitato, scatta l' interrupt corrispondente; questo flag deve essere cancellato da programma.
Nel caso in cui una nuova cattura avvenga prima che il valore dei registri CCPRx sia stato letto, questo valore viene sovrascritto da quello nuovo e va perso.

Per avere il modo Capture funzionante, il pin dedicato CCPx deve essere configurato come ingresso dal relativo TRIS. 


Nel caso in cui il pin CCPx sia stato per errore configurato come uscita, ogni scrittura del port corrispondente genererà un evento di cattura.

Ricordiamo che i pin interessati sono RB3 o RB1.

I timer che possono essere usati nel modo Capture, ovvero Timer1 e Timer3 devono essere operativi in modo Timer o in modo Contatore Sincrono. Nella modalità COntatore Asincrono il Capture non potrà funzionare. La selezione dei timer dipende da T3CON.


Se il modo Capture viene cambiato, è possibile che venga generato un falso interrupt. Occorre che l' utente disabiliti il bit CCPxIE durante questa operazione e che venga cancellato anche il flag CCPxIF ad ogni cambio nel modo operativo.

La selezione degli eventi effettuata con CCPxM3:0 comprende sia il fronte della transizione, sia la presenza di un pre divisore per 4 o per 16.
 

  1. Quando il modulo CCP è disabilitato, il contenuto del prescaler è cancellato, così pure dopo un Reset.
     
  2. Passando da un modo capture ad un' altro, è possibile che si generi un interrupt, mentre il contenuto del prescaler non viene azzerato. Questo produrrà che la successiva cattura non partirà da un livello zero. Microchip consiglia una semplice procedura per passare da un prescaler ad un' altro, in cui viene cancellato anche il contenuto del contatore del prescaler.

       clrf    CCP2CON        ; turn off CCP
   movlw   NEW_CAPT_PS    ; load new prescaler value
   movwf   CCP2CON        ; load CCP with this value

 


 Modo Compare

l diagramma a blocchi seguente riassume il funzionamento del modo Compare.

La funzione del modo Compare è questa : il contenuto dei registri dei Timer1 o 3 è comparato con il contenuto scritto nei registri CCPRx. Nel momento in cui i due valori si equivalgono, viene generata una richiesta di interrupt . Il segnale di comparazione può essere poi inviato all' eterno, attraverso i pin CCP1 e 2 con modalità stabilite dai bit CCPxM3:0.

Se è attivata l' uscita, si possono avere le seguenti condizioni :
- il pin CCP viene portato a livello alto
- il pin CCP viene portato a livello basso
- il pin CCP cambia livello (toggle)
- il pin CCP non viene modificato

Nei primi tre  i casi, se il bit CCPxIE è settato, viene attivata una chiamata di interrupt, identificata dal flag CCPxIF e il pin CCP viene direttamente comandato senza l' intervento dell' utente.. Nel quarto caso, viene attivata la richiesta di interrupt, ma il livello del pin CCP non viene cambiato, lasciando all' utente l' eventuale azione.

 

  • Per usare il pin CCP in uscita, occorre programmare opportunamente il relativo bit del TRIS della porta. In caso contrario, non ci sarà uscita disponibile.
  • Cancellando il contenuto del registro CCP2CON, il pin CCP corrispondente (RB3 o RC1) sarà portato a livello basso. Questo non dipende dai latch dei PORT B o C  .

I timer che possono essere usati nel modo Compare, ovvero Timer1 e Timer3 devono essere operativi in modo Timer o in modo Contatore Sincrono. Nella modalità Contatore Asincrono il Capture non potrà funzionare. La selezione dei timer dipende da T3CON.

Entrambi i canali CCP in modo Compare possono generare uno Special Event Trigger che ha lo scopo di avviare un altro processo interno. Questa situazione è selezionata portando i bit CCPxM3:0 a 1011.

Per entrambi i moduli CCP, lo Special Event Trigger resetta il contenuto dei registri di conteggio del timer corrispondente. Questo permette di utilizzare i registri CCPRx come registri programmabili per misure di periodo.
Lo Special Event sul modulo CCP
2 può, inoltre, avviare una conversione A/D, se il modulo A/D è stato abilitato.

La funzione Compare ha particolare rilevanza nella gestione di controlli PWM.


I registri interessati al CCP

Il foglio dati riporta come al solito un elenco dei registri che sono interessati dalle operazioni del modulo CCP.

Il fondo bianco delle celle della Tab.15-3 identifica quali registri e bit vanno considerati quando si affronta la programmazione dei moduli CCP (mentre le celle con fondo grigio indicano bit o registri non interessati).
E' evidente che i bit dei registri PIR/IPIR/PIE saranno considerati quando si implementerà una gestione in interrupt, sempre ricordando che i flag dei registri PIR sono testabili anche in polling e vanno azzerati da programma quando necessario.
La collocazione dei flag e dei bit nei registri suddetti indica che gli interrupt dei moduli CCP fanno parte del gruppo dei periferici e la loro chiave di abilitazione, nel caso di interrupt senza priorità, è il bit PEIE di INTCON.


 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 28/09/11.