PRCTICA 4.
Conversin Analgica/Digital (ADC)
OBJETIVO:Aprenderaconfigurarlosregistrosdelconvertidoranalgicodigital,paradigitalizarseales
analgicas.
MARCOTERICO
El convertidor Analgico/Digital (ADC) del microcontrolador ATMega328P, tiene las siguientes
caractersticasimportantes.
Resolucinde10bit
Presicinabsolutade2LSB
Tiempodeconversinde13sa260s
Velocidaddeconversinde15kSPSamximaresolucin
8canalessencillosdeentradamultiplexado
7DifferentialInputChannels
2DifferentialInputChannelswithOptionalGainof10xand200x
Intervalodelvoltajedeentradaanalgicode0aVCC
Referenciadevoltajeseleccionablede2.56V
Mododecarreralibreoconversinsencilla
IniciodeconversinADCpordisparoautomticooporfuentesdeinterrupcin
InterrupcindeconversinADCcompleta
Canceladorderuidoenmododesuspesin
LasiguientefiguramuestraundiagramaabloquesdelsistemadeADCdeldispositivoATMega328P.
Prctica14
LosregistrosinvolucradosenlasconversionesADCselistanyexplicanacontinuacin.
REGISTRODESELECTORDELMULTIPLEXORADMUX
Bit
Read/Write
InitialValue
7
REFS1
R/W
0
6
REFS0
R/W
0
5
ADLAR
R
0
4
MUX4
R/W
0
3
MUX3
R/W
0
2
MUX2
R/W
0
1
MUX1
R/W
0
0
MUX0
R/W
0
Bit 7:6 REFS1:0: Bit de seleccin de voltaje de referencia
REFS1
0
0
1
1
REFS0
0
1
0
1
VOLTAJEDEREFERENCIASELECCIONADO
Voltajedereferenciainternoapagado,seusaAREF.
TerminalAVCCconectadaalaterminalAREFconuncapacitorexterno.
Reservado
SeusaelVoltajedereferenciainternoconcapacitorexternoalaterminalAREF.
Bit 5 ADLAR: Resultado del ADC ajustado a la izquierda
1
0
Bits 4:0 MUX4:0: Bit de seleccin de canal analgico y ganancia
MUX4..0
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
Entrada
Sencilla
ADC0
ADC1
ADC2
ADC3
ADC4
ADC5
ADC6
ADC7
01111
Entrada
Entrada
Diferencial Diferencial Ganancia MUX4..0
Positiva
Negativa
10000
10001
10010
10011
10100
10101
10110
10111
ADC0
ADC0
11000
10X
ADC1
ADC0
11001
ADC0
ADC0
11010
200X
ADC1
ADC0
11011
ADC2
ADC2
11100
10X
ADC3
ADC2
11101
ADC2
ADC2
11110
ADC3
200X
ADC2
11111
Entrada
Entrada
Diferencial
Sencilla
Positiva
ADC0
ADC1
ADC2
ADC3
ADC4
ADC5
ADC6
ADC7
ADC0
ADC1
ADC2
ADC3
ADC4
ADC5
1.22V
(VBG)
0V
(GND)
Entrada
Diferencial
Negativa
ADC1
ADC1
ADC1
ADC1
ADC1
ADC1
ADC1
ADC1
ADC2
ADC2
ADC2
ADC2
ADC2
ADC2
Ganancia
1X
REGISTRODECONTROLYESTADOADCSRA
Bit
Read/Write
InitialValue
7
ADEN
R/W
0
6
ADSC
R/W
0
5
ADATE
R
0
4
ADIF
R/W
0
3
ADIE
R/W
0
2
ADPS2
R/W
0
1
ADPS1
R/W
0
0
ADPS0
R/W
0
Prctica14
Bit 7 ADEN: Habilitar ADC
1
0
Bit 6 ADSC: Inicio de Conversin del ADC
1
0
El bit ADSC se lee como 1 lgico mientras se est convirtiendo un dato, y cuando termina la convesin,
automticamente retorna a 0 lgico.
Bit 5 ADATE: Habilitacin del Autodisparo del ADC
1
0
El ADC comenzar la conversin en el borde positivo de la seal de disparo seleccionada. La fuente de disparo
es seleccionada configurando los bit ADTS del registro SFIOR.
Bit 4 ADIF: Bandera de Interrupcin del ADC Interrupt
Este bit se pone en 1 cuando el ADC ha realizado una conversin completa, y el registro de datos ha sido
actualizado. Se borra escribiendo un 1 lgico en la bandera, o por hardware cuando se ejectua una interrupcin
de conversin completa.
Bit 3 ADIE: ADC Interrupt Enable
Cuando se escribe un 1 a este bit I de SREG est en 1, se activa la Interrupcin de Conversin Completa del
ADC.
Bits 2:0 ADPS2:0: Bits de seleccin del Preescalador del ADC
Estos bits determinan el factor de divisin entre la frecuencia del cristal y el reloj de entrada al ADC.
ADSP2
ADSP1
ADSP0
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
Factor de
divisin
2
2
4
8
16
32
64
128
REGISTRODECONTROLYESTADOBADCSRB
Bit
Read/Write
InitialValue
R/W
0
6
ACME
R/W
0
Losbits7,5,4y3noseutilizan.
R/W
0
R
0
R/W
0
2
ADTS2
R/W
0
1
ADTS1
R/W
0
0
ADTS0
R/W
0
Prctica14
Bit 6 ACME: Si se configura con un 1 lgico, indica si el ADC va a trabajar con el comparador analgico. Si
no se utiliza, entonces se pone en 0 lgico.
Bit 2:0 ADTS2:0: Configuracin de la Fuente de Disparo Automtico del ADC
Seutilizanparaconfigurarlafuentedelasealdeautodisparo.
ADTS2 ADTS1 ADTS0 FUENTEDEDISPARO
0
0
0
Mododecarreralibre
0
0
1
Comparadoranalgico
0
1
0
Interrupcinexterna0
0
1
1
IgualacindecomparacinTemporizador/Comparador0
1
0
0
SobreflujodelTemporizador/Comparador0
1
0
1
IgualacindecomparacinTemporizador/Comparador1
1
1
0
SobreflujodelTemporizador/Comparador1
1
1
1
CapturadeeventosdelTemporizador/Comparador1
REGISTRODECONTROLDIDR0
Bit
Read/Write
InitialValue
R/W
0
R/W
0
5
ADC5D
R/W
0
4
ADC4D
R/W
0
3
ADC3D
R/W
0
2
ADC2D
R/W
0
1
ADC1D
R/W
0
0
ADC0D
R/W
0
Bit 5:0 ADC5:0D: Se configura la terminal del microcontrolador, que va a ser utilizada como entrada
analgica, para que slo funcione con el ADC, y que la parte interna de la terminal que tiene que ver con el
comportamiento digital no se vea afectado.
REGISTRODEDATOSDELADC
ADLAR=0
Bit
ADCH
ADCL
Read/Write
InitialValue
15
ADC7
7
R
0
14
ADC6
6
R
0
13
ADC5
5
R
0
12
ADC4
4
R
0
11
ADC3
3
R
0
10
ADC2
2
R
0
9
ADC9
ADC1
1
R
0
8
ADC8
ADC0
0
R
0
15
ADC9
ADC1
7
R
0
14
ADC8
ADC0
6
R
0
13
ADC7
5
R
0
12
ADC6
4
R
0
11
ADC5
3
R
0
10
ADC4
2
R
0
9
ADC3
1
R
0
8
ADC2
0
R
0
ADLAR=1
Bit
ADCH
ADCL
Read/Write
InitialValue
Prctica14
DESARROLLO:
1. Escribayanaliceelsiguientecdigo,elcualesparautilizarelconvertidoranalgicodigital,yconteste
laspreguntassiguientes:
a. CuntoscanalesdeconversinAnalgicoDigitaltieneelmicrocotnrolador?
b. Culeselcanalquesevaamuestrear?
c. Culeselnmerodebitdeconversin?
d. Culeslafrecuenciademuestreo?
e. Qupuertoeselqueseutilizaparaconvertir?
f. Enqupuertossemuestranlosresultados?
g. Culeselvalordelvoltajedereferencia?
h. Coloquecomentariosalcdigoqueexpliquelaconfiguracinqueseestutilizandoparael
microcontrolador.
#include<avr/io.h>
#include<avr/interrupt.h>
voidPorts_Setup();
voidADC_Setup();
voidPorts_Setup()
{
DDRD=0xFF;
DDRC=0x03;
}
voidADC_Setup()
{
ADMUX=(0<<REFS1)|(1<<REFS0)|(0<<ADLAR)|(0<<MUX3)|(1<<MUX2)|(0<<MUX1)|(1<<MUX0);
ADCSRA=(1<<ADEN)|(0<<ADSC)|(1<<ADATE)|(0<<ADIF)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|
(1<<ADPS0);
ADCSRB=(0<<ACME)|(0<<ADTS2)|(0<<ADTS1)|(0<<ADTS0);
DIDR0=(1<<ADC5D)|(0<<ADC4D)|(0<<ADC3D)|(0<<ADC2D)|(0<<ADC1D)|(0<<ADC0D);
}
ISR(ADC_vect,ISR_NAKED)
{
PORTD=ADCL;
PORTC=ADCH;
reti();
}
intmain(void)
{
Ports_Setup();
ADC_Setup();
sei();
ADCSRA|=(1<<ADSC);
while(1){}
Prctica14
}
2. Conecteunpotencimetroenconfiguracindedivisordetensinenelcanaldeconversindel
convertidor,yobtengaelvalordigitalcorrespondienteacadaunodelossiguientesvoltajes.
a. 3.3V
b. 0.5V
c. 1.2V
d. 4.5V
e. 5V
3. Compruebequeelvalordigitalobtenidocorrespondealosvoltajesdeentradadelpunto2.
4. Utilizandoelcdigodelaprctica3ydelaprctica4,realiceunprogramaquepermitavariarelciclo
detrabajodeunasealPWM,deacuerdoalvaloranalgicoqueentraalconvertidor,utilizandoun
potencimetroendivisordetensin.
5. Anotesusconclusiones.