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 (CCPx CON) 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 CCP 1
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 CCP 1
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.
-
Quando il modulo CCP
è disabilitato, il contenuto del prescaler è cancellato, così pure dopo un Reset.
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 CCP xM3: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 CCP Rx come
registri programmabili per misure di periodo.
Lo Special Event sul modulo CCP2 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.
|