TIPS e TRICKS del modulo CCP - 2

Misura del periodo di un'onda quadra

Un primo esempio dell'utilizzo del modulo CCP e' la misura del periodo T di un onda quadra applicata al pin CCP (RB3). Il principio di base e' il conteggio di cicli macchina che avvengono tra due eventi dell'onda quadra di cui si vuole misurare il periodo: per esempio i fronti di salita che si manifestano agli istanti t1 e t2 come  mostrato in figura 2

FIGURE 2: periodo di un'onda quadra.

Il conteggio si effettua tramite il TIMER1 ( a 16 bit). Quando si verifica l'evento "fronte di salita" automaticamente il contenuto del timer 1 e' caricato  nei registri CCPR1L e CCPR1H  generando anche un interrupt. E' possibile risalire al numero di cicli macchina che intercorrono trai due eventi in t1 e t2  operando una  sottrazione tra  il valore attuale dei registi caricati con l' evento occorso in  t2 e il valore salvato e risalente all'evento precedente verificatosi  in  t1. Successivamente bisogna azzerare il flag  relativo all'interrupt del modulo CCP per permettere un nuovo ciclo. Se N e' il numero dei cicli macchina allora il periodo T dell'onda e':

T = N * Tosc

con Tosc=4 / Fosc         Fosc =  frequenza del oscillatore del microcontrollore

 I passi da seguire per implementare tale misura sono::

  1. Configurare i bit di controllo del registro  CCPxM3:CCPxM0 (CCPxCON<3:0>) per catturare ad ogni fronte di salita dell'onda

  2. Configurare il timer 1 come contatore asincrono pilotato dal clock di sistema fosc/4 

  3. Configurare il  prescaler del TIMER1 cosi da evitare l'overflow di Timer1 ;

  4. Abilitare l'interrupt del modulo CCP (bit  CCPxIE) del registro PEI1

  5. Settare RB3 come pin di ingresso (TRISB<3>=1)

 Misura mediata del Periodo di un onda quadra

Il metodo ora proposto differisce dal primo solo per il fatto che l'evento che scatena la cattura  non e' il singolo fronte di salita ma il il sedicesimo fronte: ogni16 fronti di salita del segnale di ingresso si ha una " cattura".  I vantaggi di tale metodo sono: Immunità ai disturbi data dalla media e minore frammentazione del flusso del programma dovuti alle interruzioni provenienti dal modulo CCP

FIGURA 3: Misura mediata del periodo

Per tale misura bisogna:

1. configurare i bit CCPxM3:CCPxM0 (CCPxCON<3:0>) per catturare ogni 16 fronti di salita del segnale  

2. configurare  Timer1 prescaler cosi che Timer1 lavorerà per periodi  di  16 TMAX(1) senza  overflow.

3. abilitare l'interrupt CCP  (CCPxIE bit di PIE1).

4. quando si verifica l'interrupt:

a) Sottrarre il valore salvato della cattura in t1 dal valore catturato in t2 e  salvare il valore ottenuto in N

b) Salvare il valore catturato in t2.

c) Azzerare il flag del  Timer1 dovuto all'interrupt

 d) Dividere per 16 il numero N ( basta operare un shift a destra per quattro volte) 

Il periodo del segnale in ingresso e' dato da: e' T= Tosc * N / 16

Nota 1: TMAX e' il periodo massimo del segnale in ingresso