¿Cómo usarlo?
Lista de materiales
- ATmega8
- Protoboard
- 10 Leds
- 10 resistencias de 330 Ohms
- 1 trimpot de 10k
- 1 capacitor cerámico de 100nF
- Cable de protoboard
Un ADC (convertidor analógico – digital) es un dispositivo que nos permite convertir una señal analógica (ya sea de voltaje o corriente) a un valor (normalmente) binario, en donde cada uno de estos valores corresponde a un único valor de voltaje o corriente.
En la conversión de la señal siempre se pierde información que ya no es posible recuperar en proceso inverso, es decir, no se recupera solo con re-convertir la señal. Para minimizar estas pérdidas se puede buscar un dispositivo que tenga una mayor resolución de bits en el convertidor.
En este tutorial aprenderemos a configurar y usar el ADC del ATmega8. Por ejemplo, convertiremos el valor de tensión que nos otorga un trimpot y mostraremos el valor (en binario) obtenido en los puertos del microcontrolador.
Para empezar es necesario recurrir a la hoja de datos o datasheet del dispositivo, misma que encontrarás en el siguiente link:
Características generales

Con respecto al ADC existen dos principales registros, el ADMUX y el ADCSRA. Así que a continuación te mostramos como configurarlos.
ADMUX

Este registro es de 8bits, el menos significativo está a la derecha y el más significativo está a la izquierda. En todo caso hay que destacar que el bit 4 está vacío y por lo tanto siempre estará en 0.
• Bit 7:6 – REFS1:0: Con estos dos bits definimos el voltaje de referencia para el ADC según la siguiente tabla:

En este tutorial usaremos el voltaje de referencia interno de 2.56v, entonces debemos escribir un ‘1’ en los bits 7 y 6 del registro ADMUX. Este voltaje define el rango de conversión para el ADC, es decir que se realizaran las conversiones desde 0 hasta 2.56V. pero posterior a ese valor el ADC estará ‘excedido’ puesto que su referencia será menor al voltaje que estará recibiendo el pin del ADC.
Otro dato importante es que es posible reducir el ruido en la conversión mediante el uso de un capacitor conectado entre el pin AREF y tierra, que para el caso de este tutorial será de 100nF.
Bit 5 – ADLAR: Este bit modifica la forma en la que se registran los resultados de la conversión. Escribir un ‘1’ en el bit 5 del registro ADMUX ajustará los datos hacia la izquierda, de otra forma el registro ya está configurado a la derecha por default.
Es importante tomar en cuenta la configuración ‘izquierda’ o ‘derecha’ puesto que el resultado de la conversión se guarda en los registros ADCL y ADCH, entonces dependiendo de la configuración, será el modo en el que se almacenarán los resultados de las conversiones.
Distribución de datos según la configuración

En esta imagen también se explica que los datos del ADC no se actualizan hasta que se lee registro ‘ADCH’ a excepción de que solo se requieran 8bits de precisión y se ajuste el ADC hacia la izquierda, en ese caso será suficiente con leer solamente ‘ADCH’, de cualquier otra forma primero se debe leer ‘ADCL’ y después ‘ADCH’ para que los registros se actualicen correctamente.
Bits 3:0 – MUX3:0: El valor de estos cuatro bits selecciona cual es el ADC del microcontrolador que vamos a usar, según como se muestra en la siguiente tabla:

En este tutorial usaremos el ADC0, por lo tantor dejaremos los bits 3, 2, 1, y 0 en ‘0’ y con esto concluiremos la configuración del registro ADMUX.
ADCSRA
Este registro también es de 8bits. Al igual que el anterior el bit menos significativo está a la derecha y el más significativo a la izquierda.

- ADEN (ADC Enable).- Bit 7: al escribir un ‘1’ en este bit, se habilita el ADC y escribir un ‘0’ lo apaga.
- ADSC.- Bit 6: Al escribir un ‘1’ en este bit se inicia con las conversiones.
- ADFR.- Bit 5: Escribir un ‘1’ en este bit va a activar el Free Running Mode. En este modo el ADC se está actualizando constantemente y no será solo una sola conversión.
- ADIF.- Bit 4: Este bit se convierte en ‘1’ cuando el ADC termina la conversión y los registros están actualizados.
- ADIE.- Bit 3: Este bit sirve para la activación de una interrupción cuando escribiendo un ‘1’ en él.
- ADPS2:0.- Bits 2:0: Estos bits determinan el factor de división entre la frecuencia a la que esté trabajando el microcontrolador (1MHZ) según la siguiente tabla:

Debemos tomar en cuenta que por default el circuito del ADC requiere una frecuencia entre 50kHz y 200khz para llegar a su máxima resolución. En caso de necesitar una resolución menor a 10bits esta frecuencia podrá ser mayor a 200kHz.
Para el caso de este tutorial usaremos 10bits de resolución y tomando en cuenta que el ATmega8 estará trabajando a 1Mhz podemos usar dos factores de división, el 8 y 16 porque que ambos resultados estarían dentro de la frecuencia que el circuito necesita.
Con esto finalizamos la configuración de los registros.
Ejemplo práctico
A continuación, un programa de ejemplo en donde a través de los puertos B y D mostraremos el valor binario que nos proporciona el ADC. Además tu mismo puedes comprobar si los resultados son correctos con la siguiente formula:

Conexiones

