CONVERSOR ANÁLOGO DIGITAL CON MICROCONTROLADOR ATMEGA164PA, CODEVISION Y PROTEUS
WE UNIT TALENT THEY CREATE THE FUTURE
|
Especificaciones:
• Resolución de 10-bits
• Integrador no Lineal 0.5 LSB
• Presición
Absoluta ±2 LSB
• Tiempo de Conversión 13 - 260μs
• Máxima Resolución por encima de
15 KSPS
• 8 Canales Multiplexados Simples
de Salida
• Modo Diferencial con Ganancia
Seleccionable: X1, X10 o X200
• Ajuste opcional Izquierdo para
lectura de salida del ADC
• Rango de Voltaje de Entrada del
ADC: 0 - VCC
• Rango de Voltaje Diferencial del
ADC: 2.7 - VCC
• Voltaje de Referencia
Seleccionable ADC: 2.5V o 1.1V
• Modo de Simple Conversión (Free Running)
• Inicio de Conversión ADC por
Auto-disparo o Fuente de Interrupción
• Activación de Interrupción al
finalizar la Conversión ADC
• En Modo Sleep
se cancela el ruido
Bloque Esquemático del Conversor Analógico Digital:
Descripción de Registros:
ADMUX- Selección de Registros Multiplexados del ADC
Bit 7:6 -REFS1:0:
Selección Bits de Referencia
Estos
bits seleccionan el voltaje de referencia para el ADC, como se muestra en la
siguiente tabla. Si estos bits son cambiados durante la conversión, el cambio no
será efectuado hasta que la conversión sea completada (ADIF EN ADCSRA es
uno). La opción del voltaje de referencia interno no debe ser usada si una referencia
externa esta siendo aplicada en el pin AREF.
Bit 5- ADLAR:
Ajuste de resultado hacia la izquierda del ADC
El
bit ADLAR afecta la presentación del resultado de la conversión ADC en el registro
de datos del ADC. Escriba uno en ADLAR para ajustar el resultado hacia la izquierda.
Bits
4:0 – MUX4:0: Bits de selección para Canal Análogo y Ganancia
El
valor de estos bits seleccionan cual combinación de la entrada analógica son conectadas
al ADC. Estos bits también seleccionan la ganancia para los canales diferenciales
ADCSRA
– ADC Registro de Control y Estado A
Bit 7- ADEN:
Habilitación ADC
Cuando
se pone uno en este bit se habilita el ADC, con cero el ADC es apagado.Si
se apaga el ADC mientras la conversión está en progreso, la conversión terminará.
Bit 6 -ADSC:
Inicio de Conversión ADC
En
modo de Simple Conversión, cada vez que se ponga uno en este bit se inicia cada conversión. En modo de Simple Conversión (Free Running),
al escribir uno
en este bit inicia la conversión. La primera conversión ADSC ha sido escrita
después de que el ADC ha sido habilitado o si ADSC es escrito al mismo tiempo
que el ADC es habilitado, esto demora 25 ciclos de reloj ADC comparado con
los 13 ciclos que demora normalmente. La primera conversión llega a inicializar
el ADC.ADSC
estará en uno durante la conversión en progreso. Cuando termina la conversión
retorna a cero.
Bit 5- ADATE:
Habilitación Auto Disparador ADC
Cuando se escribe uno en este bit,
el auto Disparador del ADC es habilitado. El ADC empezará la conversión con flanco positivo seleccionado con la señal del disparador.
Bit 4- ADIF:
ADC Banderas de Interrupción
Este
bit es uno cuando se completa la conversión ADC y los Registros de Datos son actualizados. Cuando la conversión ADC es completada se ejecuta la interrupción
si el bit ADIE y el bit I en SREG son uno.
Bit 3
– ADIE: Habilitación de interrupciones del ADC
Cuando
este bit es uno y el bit I en SREG es uno, la conversión ADC
es
completada y
es activada la interrupción.
Bits 2:0 – ADPS2:0: Bits de
selección para el Prescalador
Estos
bits determinan el factor de división entre la frecuencia del cristal y la
entrada
del
reloj
del ADC.
------------------------------------------------------------------------------------------------
Para realizar la conversión análoga digital debemos tener en cuenta un rango dentro del cual se realizará la conversión, en el caso de los microcontroladores el voltaje de referencial es de 5V
Las líneas de código que debes verificar el momento de la creación de tu proyecto en CODEVISION son las que se detallan a continuación:
#define ADC_VREF_TYPE 0x00
// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr(void)
{
unsigned int adc_data;
// Read the AD conversion result
adc_data=ADCW;
//((x*1023)/5)
// (X*1023)/5
//x=valor del conversor a encontrar
// 5= valor referencial
if (adc_data>((0.5*1023)/5)&&(adc_data<((1*1023)/5)))
PORTB=0b00000001;
if (adc_data>((1*1023)/5)&&(adc_data<((1.5*1023)/5)))
PORTB=0b00000011;
if (adc_data>((1.5*1023)/5)&&(adc_data<((2*1023)/5)))
PORTB=0b00000111;
if (adc_data>((2*1023)/5)&&(adc_data<((2.5*1023)/5)))
PORTB=0b00001111;
if (adc_data>((2.5*1023)/5)&&(adc_data<((3*1023)/5)))
PORTB=0b00011111;
if (adc_data>((3*1023)/5)&&(adc_data<((3.5*1023)/5)))
PORTB=0b00111111;
if (adc_data>((3.5*1023)/5)&&(adc_data<((4*1023)/5)))
PORTB=0b01111111;
if (adc_data>((4*1023)/5)&&(adc_data<((4.5*1023)/5)))
PORTB=0b01111111;
ADCSRA=ADCSRA |0x40; // inicializar la siguiente conversión
}
No hay comentarios:
Publicar un comentario