PWMSAR-  A/D SAR  a 10 bit - 2



 

L'algoritmo di conversione SAR

l file PWM10SAR.asm contiene il sorgente della routine che deve essere inserita nel programma principale in cui si fa uso della routine stessa mediante il comando:

include PWM8SAR.asm 

Bisogna avere cura di settare, nel  programma principale, i  registri di configurazione relativi al modulo CCP e a quelli ad essa collegati (TMR2 )per settare la modalità PWM  e i regstri del modulo dei comparatori . All'interno della routine e' riportato il modo come settare i registri.

Facciamo quindi riferimento alla routine  PWM10SAR.asm in cui e' riportato l'algoritmo  implementato secondo il linguaggio ASM del micro. Le variabili di uscita della routine sono i registri a 8 bit  SAMPLE_H[7:0] e SAMPLE_L[7:0]. In realtà solo 10 bit dei 16 bit sono utili essendo i rimanti 6 bit sono posti a zero. 
Di seguito la descrizione

1. Si settano le variabili necessari per l'esecuzione: in particolare la variabile NLOOP = N_bit che definisce il numero degli step di conversioni che sappiamo essere uguali ai bit della conversione;

2. Si caricano nelle variabili STEP_H e STEP_L i valori, funzione dello step in corso, utilizzando una tabella di corrispondenza comandata dalla variabile NLOOP per diminuire/aumentare i registri SAMPLE_L e SAMPLE_H da cui si ricavano i valori di CCPR1L e CCPCON che controllano il duty cycle del segnale PWM

3. Si controlla il bit 7 del registro CMCON che rappresenta l'uscita del comparatore 2 e sulla base del suo valore si decide cosa fare in particolare

3.1 Se CMCON (7) =1 ovvero Vref > Vin allora si passa alla routine di diminuzione del duty cycle

3.2 Se CMCON (7) =0 ovvero Vref < Vin allora si passa alla routine di incremento del duty cycle

4. Si attende un  tempo pari a  t_dly= Npulse* T_pwm necessario per permettere la generazione di Npulse impulsi PWM

5. Si diminuisce NLOOP e si continua con il ciclo andando al punto 2 finché NLOOP=0

Inoltre e' possibile intervenire sul numero di onde che concorrono alla formazione della tensione di confronto Vref.  La costante che definisce tale numero e’ NPULSE. Maggiore e’ NPULSE migliore sarà la precisione della conversione ma piu’ lenta.