Paso 8: Cómo la ADC trabaja
Aproximación sucesivas ADC significa que el ADC toma 13 ciclos de reloj para completar la conversión (y ciclos de reloj de 25 para la primera conversión). Hay una señal de reloj dedicado a la ADC "calculada" del reloj principal de Arduino; Esto es porque el ADC es un poco lento y no puede mantenerse con el ritmo de las otras partes del microcontrolador. Requiere una frecuencia de reloj de entrada entre 50 kHz y 200 kHz para obtener la máxima resolución. Si es necesario una resolución menor de 10 bits, la frecuencia de reloj de entrada para el ADC puede ser superior a 200 kHz para obtener una mayor velocidad de muestreo.
Pero, ¿cuánto más altos podemos usar? Hay un par de buenas guías sobre el ADC en los laboratorios de música abierta que sugiero para leer:
- http://www.openmusiclabs.com/Learning/digital/ATmega-ADC/
- http://www.openmusiclabs.com/Learning/digital/ATmega-ADC/in-Depth/
Ya que mi objetivo es conseguir un osciloscopio rápido he decidido limitar la precisión de 8 pedacitos. Esto tiene varios bonos:
- el búfer de datos puede almacenar más datos;
- no pierdas 6 bits de RAM por referencia;
- el ADC puede adquirir más rápido.
El prescaler nos permite dividir la frecuencia por algunos factores, estableciendo los bits de ADPS0-1-2 del registro ADCSRA. Ver la trama de la precisión del artículo de laboratorios de música abierta, podemos ver que para precisión de 8 bits la frecuencia podría ir hasta 1,5 MHz, bueno! Pero puesto que la capacidad de cambiar el factor divisor nos permite cambiar el tipo de adquisición, podemos usarlo también para cambiar la escala de tiempo del osciloscopio.
Es una buena característica sobre los registros de salida: podemos decidir el ajuste de bits de conversión, mediante el establecimiento de ADLAR bit en el registro ADMUX. Si es 0 son derecha ajustada y viceversa (véase la imagen). Puesto que quería precisión de 8 bits Coloque 1 por lo que pude leer solo el registro ADCH e ignorar el ADCL.
He decidido tener un canal de entrada para evitar tener que cambiar de canal y hacia atrás en cada conversión.
Una última cosa acerca de la ADC, tiene diferentes modos cada uno con una fuente de disparo diferentes:
- Modo de funcionamiento libre
- Comparador analógico
- Petición de interrupción externa 0
- Timer/Counter0 compara partido A
- Desbordamiento de Timer/Counter0
- Temporizador/Counter1 comparar partido B
- Desbordamiento del contador de tiempo/Counter1
- Captura de evento de temporizador/Counter1
Yo estaba interesado en el modo de funcionamiento libre que es un modo en el que el ADC convierte la entrada continuamente y lanza una interrupción al final de cada conversión (vector asociado: ADC_vect).