Tabla de contenido:

Introducción a ADC en microcontrolador AVR - para principiantes: 14 pasos
Introducción a ADC en microcontrolador AVR - para principiantes: 14 pasos

Video: Introducción a ADC en microcontrolador AVR - para principiantes: 14 pasos

Video: Introducción a ADC en microcontrolador AVR - para principiantes: 14 pasos
Video: CURSO AVR - MAPEAR, LINEALIZAR CONVERSIONES ADC DE FORMA SENCILLA Y EFECTIVA 2024, Mes de julio
Anonim
Introducción a ADC en microcontrolador AVR | para principiantes
Introducción a ADC en microcontrolador AVR | para principiantes

En este tutorial conocerás todo lo ADC en el microcontrolador avr

Paso 1: ¿Qué es un ADC?

Un ADC, o convertidor analógico a digital, permite convertir un voltaje analógico en un valor digital que puede ser utilizado por un microcontrolador. Hay muchas fuentes de señales analógicas que a uno le gustaría medir. Hay sensores analógicos disponibles que miden la temperatura, la intensidad de la luz, la distancia, la posición y la fuerza, solo por nombrar algunos.

Paso 2: Cómo funciona ADC en AVR - Microcontrolador

El AVR ADC permite que el microcontrolador AVR convierta voltajes analógicos en valores digitales con pocas piezas externas o ninguna. El ATmega8 presenta un ADC de aproximación sucesiva de 10 bits. ATmega8 tiene un ADC de 7 canales en PortC. El ADC tiene un pin de voltaje de suministro analógico separado, AVCC. AVCC no debe diferir más de ± 0,3 V de VCC. La referencia de voltaje puede estar desacoplada externamente en el pin AREF. AVCC se utiliza como referencia de voltaje. El ADC también se puede configurar para que se ejecute continuamente (el modo de ejecución libre) o para que realice una sola conversión.

Paso 3: Fórmula de conversión de ADC

Fórmula de conversión de ADC
Fórmula de conversión de ADC

Donde Vin es el voltaje en el pin de entrada seleccionado y Vref la referencia de voltaje seleccionada

Paso 4: ¿Cómo configurar ADC en ATmega8?

¿Cómo configurar ADC en ATmega8?
¿Cómo configurar ADC en ATmega8?

Los siguientes registros se utilizan para la implementación de ADC en ATmega8

Selección de multiplexor ADC

Paso 5: Selección de ADLAR

Selección ADLAR
Selección ADLAR
Selección ADLAR
Selección ADLAR

Resultado de ajuste izquierdo de ADC El bit ADLAR afecta la presentación del resultado de la conversión de ADC en el registro de datos de ADC. Escribe uno en ADLAR para ajustar el resultado a la izquierda. De lo contrario, el resultado se ajusta a la derecha

Cuando se completa una conversión de ADC, el resultado se encuentra en ADCH y ADCL. Cuando se lee ADCL, el registro de datos de ADC no se actualiza hasta que se lee ADCH. En consecuencia, si el resultado se deja ajustado y no se requiere más de 8 bits de precisión, es suficiente leer ADCH. De lo contrario, primero se debe leer ADCL y luego ADCH. Bits de selección de canal analógico El valor de estos bits selecciona qué entradas analógicas están conectadas al ADC.

Paso 6: Selección de ADCSRA

Selección ADCSRA
Selección ADCSRA
Selección ADCSRA
Selección ADCSRA

• Bit 7 - ADEN: ADC Habilitar Escribir este bit en uno habilita el ADC. Escribiéndolo a cero, el ADC se apaga

• Bit 6 - ADSC: ADC Iniciar conversión En el modo de conversión simple, escriba este bit en uno para iniciar cada conversión. En el modo de ejecución libre, escriba este bit en uno para iniciar la primera conversión.

• Bit 5 - ADFR: Selección de funcionamiento libre de ADC Cuando este bit está establecido (uno), el ADC funciona en modo de funcionamiento libre. En este modo, el ADC muestrea y actualiza los registros de datos continuamente. Borrar este bit (cero) terminará el modo de funcionamiento libre.

• Bit 4 - ADIF: Bandera de interrupción de ADC Este bit se establece cuando se completa una conversión de ADC y se actualizan los registros de datos. La interrupción de conversión completa de ADC se ejecuta si se establecen el bit ADIE y el bit I en SREG. El hardware borra ADIF al ejecutar el vector de manejo de interrupciones correspondiente. Alternativamente, ADIF se borra escribiendo uno lógico en la bandera.

• Bit 3 - ADIE: habilitación de interrupción de ADC Cuando este bit se escribe en uno y el bit I en SREG está establecido, se activa la interrupción de conversión completa de ADC.

• Bits 2: 0 - ADPS2: 0: ADC Prescaler Seleccionar Bits De acuerdo con la hoja de datos, este prescalar debe configurarse para que la frecuencia de entrada del ADC esté entre 50 KHz y 200 KHz. El reloj ADC se deriva del reloj del sistema con la ayuda de ADPS2: 0 Estos bits determinan el factor de división entre la frecuencia XTAL y el reloj de entrada al ADC.

Paso 7: si desea aprovechar el valor de ADC, debe realizar algunos trabajos que se enumeran a continuación

  • Establecer valor de ADC
  • Configurar el pin del LED de salida
  • Configurar el hardware de ADC
  • Habilitar ADC
  • Iniciar conversiones analógicas a digitales
  • MIENTRAS PARA SIEMPRE

SI el valor ADC es más alto que el valor establecido, encienda el LED ELSE Apague el LED

Paso 8: Establecer el valor ADC

Código: uint8_t ADCValue = 128;

Paso 9: configurar el pin del LED de salida

Código: DDRB | = (1 << PB1);

Paso 10: configurar el hardware ADC

Configurar el hardware de ADC

Esto se hace estableciendo bits en los registros de control del ADC. Primero, configuremos el prescalar para el ADC. De acuerdo con la hoja de datos, este preescalar debe configurarse para que la frecuencia de entrada del ADC esté entre 50 KHz y 200 KHz. El reloj ADC se deriva del reloj del sistema. Con una frecuencia del sistema de 1MHz, un preescalador de 8 dará como resultado una frecuencia ADC de 125 Khz. El preescalado lo establecen los bits ADPS en el registro ADCSRA. De acuerdo con la hoja de datos, los tres bits ADPS2: 0 deben establecerse en 011 para obtener el preescalador 8.

Código: ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

A continuación, establezcamos el voltaje de referencia del ADC. Esto está controlado por los bits REFS en el registro ADMUX. Lo siguiente establece el voltaje de referencia en AVCC.

Código: ADMUX | = (1 << REFS0);

Para configurar el canal que pasa a través del multiplexor al ADC, los bits MUX en el registro ADMUX deben configurarse en consecuencia. Dado que estamos usando ADC5 aquí

Código: ADMUX & = 0xF0; ADMUX | = 5;

Para poner el ADC en modo de ejecución libre, establezca el bit ADFR con el nombre adecuado en el registro ADCSRA:

Código: ADCSRA | = (1 << ADFR);

Se realizará un último cambio de configuración para facilitar la lectura del valor ADC. Aunque el ADC tiene una resolución de 10 bits, esta cantidad de información a menudo no es necesaria. Este valor de 10 bits se divide en dos registros de 8 bits, ADCH y ADCL. Por defecto, los 8 bits más bajos del valor de ADC se encuentran en ADCL, siendo los dos superiores los dos bits más bajos de ADCH. Al establecer el bit ADLAR en el registro ADMUX, podemos alinear a la izquierda el valor de ADC. Esto coloca los 8 bits más altos de la medición en el registro ADCH, y el resto en el registro ADCL. Si luego leemos el registro ADCH, obtenemos un valor de 8 bits que representa nuestra medición de 0 a 5 voltios como un número de 0 a 255. Básicamente, estamos convirtiendo nuestra medición ADC de 10 bits en una de 8 bits. Aquí está el código para establecer el bit ADLAR:

Código:

ADMUX | = (1 << ADLAR); Eso completa la configuración del hardware ADC para este ejemplo. Es necesario configurar dos bits más antes de que el ADC comience a tomar medidas.

Paso 11: Habilite ADC

Para habilitar el ADC, establezca el bit ADEN en ADCSRA:

Código: ADCSRA | = (1 << ADEN);

Paso 12: Inicie las conversiones de analógico a digital

Para iniciar las mediciones de ADC, es necesario establecer el bit ADSC en ADCSRA:

Código: ADCSRA | = (1 << ADSC);

En este punto, el ADC comenzaría a muestrear continuamente el voltaje presentado en ADC5. El código hasta este punto se vería así:

Paso 13: MIENTRAS SIEMPRE

Lo único que queda por hacer es probar el valor de ADC y configurar los LED para que muestren una indicación alta / baja. Dado que la lectura de ADC en ADCH tiene un valor máximo de 255, se eligió un valor de prueba de th para determinar si el voltaje era alto o bajo. Una simple declaración IF / ELSE en los bucles FOR nos permitirá encender el LED correcto:

Código

si (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Enciende el LED

}

demás

{

PORTB & = ~ (1 << PB0); // Apagar LED

}

Paso 14: Al final, el código completo es

Código:

#incluir

int main (vacío)

{

uint8_t ADCValue = 128;

DDRB | = (1 << PB0); // Establecer LED1 como salida

ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Establecer ADC prescalar a 8 - // Frecuencia de muestreo de 125KHz 1MHz

ADMUX | = (1 << REFS0); // Establecer la referencia de ADC a AVCC

ADMUX | = (1 << ADLAR); // Ajuste a la izquierda el resultado de ADC para permitir una lectura fácil de 8 bits

ADMUX & = 0xF0;

ADMUX | = 5; // Los valores de MUX deben cambiarse para usar ADC0

ADCSRA | = (1 << ADFR); // Establecer ADC en modo de ejecución libre

ADCSRA | = (1 << ADEN); // Habilitar ADC

ADCSRA | = (1 << ADSC); // Iniciar conversiones A2D mientras (1) // Bucle para siempre

{

si (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Enciende LED1

}

demás

{

PORTE & = ~ (1 << PB1); // Apagar LED1

}

}

return 0;

}

Primero publique este tutorial Haga clic aquí

Recomendado: