El microcontrolador sólo entiende lenguaje digital. Sin embargo, las entradas disponibles desde el entorno al microcontrolador son en su mayoría de naturaleza analógica, es decir, varían continuamente con el tiempo. Para comprender las entradas del procesador digital, se utiliza un dispositivo llamado Convertidor analógico a digital (ADC). Como sugiere el nombre, este periférico recopila la información analógica proporcionada por el entorno y la convierte al formato digital comprensible del controlador, luego el microcontrolador procesa la información y proporciona el resultado deseado en la salida.
((wysiwyg_imageupload:451:))
ATmega16 tiene un sistema ADC integrado de 10 bits y 8 canales. Algunas de las características básicas del ADC Armega16 son:
· 8 canales.
· Resolución de 10 bits.
· Rango de voltaje de entrada de 0 a Vcc.
· Fuente de voltaje de referencia interna seleccionable de 2,56 V.
· Pin AREF para tensión de referencia externa.
· Interrupción completa de la conversión ADC.
Los canales ADC en el Atmega16 están multiplexados PORTA y usan los pines comunes (pin33 a pin40) con PORTA. El sistema ADC del microcontrolador Atmega16 consta de los siguientes pines:
I. ADC0-ADC7: 8 canales desde el pin 40 al pin 33 del periférico ADC Atmega16.
ii. AREF: Pin32 del microcontrolador Atmega16, el voltaje en el pin AREF actúa como voltaje de referencia para la conversión de ADC, el voltaje de referencia siempre es menor o igual al voltaje de suministro, es decir, Vcc.
III. AVCC: Pin30, este pin es el pin de voltaje de suministro para usar PORTA y ADC; El pin AVCC debe estar conectado a Vcc (voltaje de alimentación del microcontrolador) para usar PORTA y ADC.
Nota: Se puede utilizar una fuente de voltaje de referencia externa en el pin AREF. Sin embargo, el Atmega16 también tiene opciones de voltaje de referencia interna de 2,56 V y Vref = Vcc.
La siguiente figura muestra la configuración de pines del sistema ADC del microcontrolador Atmega16.
Fig. 2: Números de pines del ADC en el microcontrolador ATmega16 AVR
Registros ADC
Para utilizar el periférico ADC Atmega16, es necesario configurar ciertos registros.
I. ADMUX (multiplexor ADC y registro de selección)
Fig. 3: Valores de bits del multiplexor ADC y registro de selección para configurar el periférico ADC en el AVR
Los bits REF(0:1) determinan la fuente de voltaje de referencia, ya sea interna o externa conectada al pin AREF. Los bits MUX (4:0) se utilizan para seleccionar entre canales que proporcionarán datos al ADC para su conversión. El bit ADLAR, cuando se establece en 1, proporciona el resultado ajustado a la izquierda en los registros de datos ADCH y ADCL.
ii. ADCSRA (Registro de estado y control de ADC)
Fig. 4: Configuración del bit de control ADC y registro de estado en el microcontrolador AVR
ÁDEN: Bit de habilitación del ADC, este bit debe establecerse en 1 para encender el ADC.
ADSC: Bit de conversión inicial de ADC, este bit se establece en 1 para iniciar la conversión de ADC; una vez que se completa la conversión, el hardware vuelve a establecer este bit en 0.
A FIND: ADC Auto Trigger Enable, este bit se establece en 1 para habilitar la activación automática de la conversión ADC.
ADIF: indicador de interrupción ADC, este bit se establece en 1 cuando se completa la conversión ADC.
ADIE: Habilitación de interrupción de ADC, este bit se establece en 1 si queremos habilitar la interrupción completa de la conversión de ADC.
ADPS(0:2): Bits de preescalado del ADC, estos bits se utilizan para configurar la frecuencia del reloj del ADC, la configuración de estos bits determina el factor de división por el cual se divide la frecuencia del reloj del microcontrolador para obtener la frecuencia del reloj del ADC. La figura anterior muestra los valores de bits del preescalador para el factor de división respectivo.
Fig. 5: Ecuación de frecuencia de reloj ADC
La frecuencia de reloj del ADC debe estar entre 50 KHz y 200 KHz.
III. ADCH y ADCL (Registros de datos ADC)
Cuando se completa la conversión de ADC, los datos se almacenan en estos dos registros. La configuración de datos depende del valor del bit ADLAR en el registro ADMUX. Si ADLAR=0, los datos se ajustan a la derecha y si ADLAR=1, los datos se ajustan a la izquierda. Lea siempre primero el ADCL y luego el ADCH. En los casos en los que la precisión de 8 bits sea suficiente, establezca el bit ADLAR en 1 para desplazar los datos hacia la izquierda y leer solo el registro de datos ADCH.
Cuando ADLAR = 0,
Fig. 6: Configuración del bit de registro de datos ADC en ADLAR = 0 en el microcontrolador ATmega16 AVR
Cuando ADLAR = 1,
Fig. 7: Configuración del bit de registro de datos ADC en ADLAR = 1 en el microcontrolador ATmega16 AVR
Descripción del circuito
Conecte el circuito como se muestra en el diagrama del circuito. Un condensador cerámico 104 está conectado entre AVcc (pin 30) y Aref (pin 32). AVcc (pin 30) está conectado a una alimentación externa de +5 V.
Explicación del código
Para conectar el dispositivo analógico con el microcontrolador AVR, siga los pasos a continuación para programarlo.
Paso 1: inicializar el ADC
I. Establezca el valor en el registro ADMUX según el canal ADC y el voltaje de referencia.
ii. Configure los bits del Prescaler adecuadamente en el registro ADCSRA.
III. Configure el bit ADEN para habilitar el ADC.
ADC_init vacío (vacío) // inicialización del ADC
Paso 2: leer el valor analógico
I. Ingrese el valor del canal en ADMUX
ii. Inicie la conversión configurando el bit ADSC.
III. Supervise el bit ADIF para completar la conversión.
4. Borre el bit de conversión ADIF. Al escribir 1.
v. El resultado convertido digitalmente ahora está disponible en los registros ADCH y ADCL.
int sin firmar ADC_read (canal de caracteres sin firmar)
{
ch= ch&0b00000111; // el canal debe ser blanco y negro del 0 al 7
ADMUX = canal; //seleccionando canal
ADCSRA =(1<Código fuente del proyecto
###
//Programa para que el ADC lea desde el canal 0 y muestre salida de 8 bits en PORTB
###
Componentes del proyecto
- ATmega16
- CONDUJO