Il convertitore A/D del PIC 16F876

Transcript

Il convertitore A/D del PIC 16F876
Il convertitore A/D del PIC 16F876
Il PIC 16F876 ha un modulo convertitore A/D a 10 bit con 5 canali d’ingresso, ciascuno di essi
selezionabile via software.
Il convertitore, ad approssimazione successive, è dotato internamente di track-hold.
I registri specifici associati con il modulo convertitore sono ADCON0 (in pagina 0) e ADCON1 (in
pagina1). Il risultato della conversione (10 bit) viene posto nei registri a 8 bit ADRESH e ADRESL.
Prima di avviare la conversione si debbono impostare tutti i parametri necessari dei registri
ADCON0 e ADCON1 nel modo seguente:
1. Con il registro ADCON1 Si seleziona l’abbinamento dei canali analogici con gli ingressi
digitali (RA0÷RA5), la sorgente della tensione di riferimento e la modalità di salvataggio
del risultato della conversione nei registri ADRESH e ADRESL.
2. Con il registro ADCON0 si seleziona il clock di conversione (bit 7 e bit 6), il canale
analogico per la conversione (bit 5÷bit 3) e si pone in ON il convertitore A/D (bit 0).
3. Si attende che trascorre il Tempo di Acquisizione, come valore si sceglie circa 20 µs.
4. Si avvia la conversione ponendo ad uno il bit 2 di ADCON0 (GO/DONE).
5. Si controlla il termine della conversione verificando il bit 2 ADCON0 (GO/DONE); quando
diviene zero la conversione è terminata.
6. Si legge il dato convertito nei registri ADRESH (gli 8 bit più significativi) e ADRESL (i 2
bit meno significativi) se si sceglie l’allineamento a sinistra.
ADCON1
Bit 7
ADFM
Bit 6
-
Bit 5
-
Bit 4
-
Bit 3
PCFG3
Bit 2
PCFG2
Bit 1
PCFG1
Bit 0
PCFG0
ADFM=1 I bit più significativi di ADRESH sono posti a zero (allineamento a destra)
ADRESH
0 0 0 0 0 0 X X
ADRESL
X X X X X X X X
ADFM=0 I bit meno significativi di ADRESL sono posti a zero (allineamento a sinistra)
ADRESH
X X X X X X X X
ADRESL
X X 0 0 0 0 0 0
Bit 3
Bit 2
Bit 1
Bit 0
PCFG3 PCFG2 PCFG1 PCFG0
0
0
0
0
0
0
0
1
0
1
0
0
0
1
0
1
0
1
1
X
1
0
0
0
1
1
0
1
1
1
1
0
1
1
1
1
RA5
AN4
AN
AN
DIG
DIG
DIG
AN
DIG
DIG
DIG
RA3
AN3
AN
Vref+
AN
Vref+
DIG
Vref+
Vref+
DIG
Vref+
RA2
AN2
AN
AN
DIG
DIG
DIG
VrefVrefDIG
Vref-
RA1
AN1
AN
AN
AN
AN
DIG
AN
AN
DIG
DIG
RA0
AN0
AN
AN
AN
AN
DIG
AN
AN
AN
AN
Vref+
Vref-
Vdd
RA3
Vdd
RA3
Vdd
RA3
RA3
Vdd
RA3
Vss
Vss
Vss
Vss
Vss
RA2
RA2
Vss
RA2
ADCON0
Bit 7
ADCS1
Bit 6
ADCS0
ADCS1 ADCS0
0
0
Fosc/2
0
1
Fosc/8
1
0
Fosc/32
1
1
Frc
Bit 5
CHS2
Bit 4
CHS1
Bit 3
CHS0
Bit 2
GO/DONE
Bit 1
Bit 0
ADON
Massima frequenza possibile per Fosc
2 Tosc
1.25 MHz
8 Tosc
5 MHz
32 Tosc
20 MHz
Trc
Clock derivato da un osc. RC interno
CHS2 CHS1 CHS0 Canale selezionato
0
0
0
AN0 (su RA0)
0
0
1
AN1 (su RA1)
0
1
0
AN2 (su RA2)
0
1
1
AN3 (su RA3)
1
0
0
AN4 (su RA4)
GO/DONE
1
Conversione in atto. Si avvia la conversione quando il bit è posto ad 1
0
Conversione non in atto.Il bit è posto automaticamente a 0 al termine della conversione
ADON
1
Modulo A/D è operativo
0
Modulo A/D non è operativo
Considerazioni
Con l’allineamento a destra si ottiene direttamente il risultato della conversione a 10 bit.
Il numero in base 10 si ottiene dalla seguente formula:
N10=(VIN*210)/VREF
Esempio:
il valore di N10 è espresso con il suo valore corrispondente in esadecimale
VIN N ADRESH ADRESL
1 V 0CCh 00000000 11001100
2 V 199h 00000001 10011001
3 V 265h 00000010 01100101
Con l’allineamento a sinistra, il convertitore fornisce nel registro ADRESH, direttamente il valore
del dato corrispondente ad una conversione con convertitore a 8 bit. In questo caso N e calcolato
con la seguente relazione:
N10=(VIN*28)/VREF
il valore di N10 è espresso con il suo valore corrispondente in esadecimale
VIN N ADRESH ADRESL
1 V 33h 00110011 00000000
2 V 66h 01100110 01000000
3 V 99h 10011001 01000000
Antonello Micci