PWM10ADC- CONVERTITORE A/D  a 10 bit - 2



 

L'algoritmo di conversione

Facciamo quindi riferimento alla routine  PWM10SADC.asm in cui e' riportato l'algoritmo implementato secondo il linguaggio assembler del micro. Le variabili di uscita della routine sono i registri a 8 bit  CCPR1L<7:0>,CCP1CON<5:4> che sono i registri che definisco il duty cycle del segnale PWM. In realtà solo 10 bit dei 16 bit sono utili essendo i rimanti 6 bit sono posti a zero.  L'algoritmo di conversione è strutturato nel seguente modo:

Alla partenza della routine si opera l'azzeramento del duty cycle D agendo sui registri CCPR1L e CCPCON;

S’incrementa D agendo sui CCPCON[7:0],CCPR1L[5:4]: in tal caso il segnale in uscita su PWM incrementa di uno step il suo duty cycle e di conseguenza il suo valore medio.

Se CCPR1L[7:0], CCPCON[5:4] = 3Fh allora la routine esce per overflow (la tensione Vin è più grande della massima tensione Vref producibile)

Si attende per un tempo t_dly per permettere la generazione di un certo numero d’impulsi definiti dalla variabile NPULSE settabile all'interno della routine

Si effettua un controllo sul bit 7 del registro CMCON (uscita del comparatore 2)

4.1) Se CMCON (7) =1 allora routine esce

4.2) Se COMP (7) =0 allora continua e si va al punto 2

Quando l'algoritmo esce al punto 4.1 il valore digitale della tensione Vin è funzione del valore dei registri CCPCON[7:0], CCPR1L[5:4] che sappiamo definire il duty cycle per il modulo. 

Il file PWM10ADC.asm contiene il sorgente della routine che può essere inserita nel programma principale di un eventuale progetto mediante l'istruzione direttiva :

include PWM10ADC.ASM

Bisogna avere cura di settare, nel  programma principale, i  registri di configurazione relativi al modula CCP e quelli ad essa collegati per la modalità PWM. All'interno della routine e' riportato il modo come settare i registri.

 Inoltre e' possibile intervenire sul numero di onde che concorrono alla formazione della tensione di confronto Vref.  La variabile che definisce tale numero e’ NPULSE. Maggiore è NPULSE migliore sarà la precisione della conversione ma maggiore sarà il tempo di conversione.