PROGRAMMAZIONE DIDATTICA ANNUALE
27 Gennaio 2019Porte I/O
27 Gennaio 2019Analog to Digital Converter (ADC)
- 12 canali con multiplexer di ingresso
- Conversione ad approssimazioni successive
- Risoluzione di 8bit
- Singola conversione o conversione continua
- Flag o interrupt per la conversione terminata
- Possibilità di impostare il clock dellADC
Registri dellADC
Descrizione dellADC
I dodici canali o ingressi dellADC sono presenti fisicamente nei pin PTB0-PTB7 e PTD0-PTD3. Un multiplexer analogico permette di scegliere uno di questi 12 ingressi come Voltage Input (ADCVIN).ù
La conversione avviene per approssimazioni successive e la risoluzione è di 8bit (256 livelli di tensione), quando la conversione ha termine lADC riporta il valore a 8bit convertito nel registro ADR, lADC può segnalare lavvenuta conversione con una FLAG o con un interrupt.
Schema a blocchi dellADC
Precisazione sui pin voltage input
Come detto i pin interessati dellADC sono quelli della porta B e della Porta D, per scegliere l’ingresso analogico da utilizzare bisogna intervenire nel registro ADSCR.
I pin delle porte messi a disposizione dellADC come segnali di ingresso non possono più essere letti o scritti come normali pin di I/O, mentre i pin che non sono interessati dellADC possono venire usati come normali pin di I/O.
Conversione della tensione
Quando sul pin di ingresso dellADC è presente un segnale uguale a Vdd, lADC riporterà un valore digitale di $FF mentre quando è presente un segnale pari e Vss LADC riporterà un valore di $00.
La conversione avviene solo per il range di tensione compreso tra Vdd e Vss, con una precisione di 256 livelli.
Esempio:
VDD=4V
VSS=1V
ADCVIN=3V
Range di tensione = 3V
Precisione = 3V/256=0.01V
Valore convertito=01111111
NOTA: Il segnale di ingresso non deve essere maggiore dell’alimentazione del micro
Tempistica di conversione
Per eseguire una conversione completa sono richiesti 16 del Clock interno dellADC
Se per esempio il clock dellADC è impostato per funzionare ad 1MHZ, una conversione ha bisogno di 16uS per essere completata.
Conversione Continua
In questo modo di conversione, lADC continua continuamente a convertire i canali selezionati dal registro ADSCR, il dato nel registro ADR viene continuamente soprascritto anche se il dato della conversione precedente non è ancora stato letto. La conversione continua finche non si azzera il bit di controllo ADC0
Interrupts
Quando il bit di controllo AIEN e settato e il bit COCO e a zero, lADC genera un interrupt ad ogni conversione terminata. Quando si sceglie di lavorare con gli interrupt il bit COCO non può più essere utilizzato come FLAG di fine conversione.
Registro ADSCR
COCO — Conversion Complete bit
Questo bit controllo lo stato della conversione:
1 = conversione completata (AIEN=0)
0 = conversione non completata (AIEN=0)
Quando tramite il bit AIEN gli interrupt sono abilitati, la flag COCO viene sempre letta come zero
AIEN — ADC interrupt Enable bit
Quando questo bit è settato, lADC abilita linterrupt alla fine della conversione, il segnale di interrupt è cancellato quando il registro viene letto o il bit viene scritto. NB il reset cancella lo stato del bit
1 = ACD interrupt enabled
0 = ACD interrupt disabled
ADCO — ADC continuous conversion bit
Quando questo bit è settato lADC lavora non modo continuo, cioè come spiegato continua a convertire il dato,se questo bit è a zero lADC esegue solo una conversione per volta. NB il reset cancella il bit
1 = ADC continuous conversion
0 = One conversion ADC
ADCH[4:0] ADC Channel select bits
Questi bit consentono di scegliere i canali da convertire, per settare correttamente i bit fare riferimento alla tabella che segue:
ADC Data Register
Questo registro contiene il dato convertito dellADC, esso viene aggiornato ogni volta che una conversione ha termine.
ADC Input Clock Register
Questo registro consente di scegliere il clock interno dellADC
ADIV2:ADIV0 — ADC Clock Prescaler Bits
Questi bit consentono di scegliere il clock interno dellADC in quanto vanno ad agire direttamente sul prescaler che divide la frequenza di sistema.
Per settare i bit fare riferimento alla tabella che segue: