He estado experimentando con el ADC de Arduino, y he notado algunos comportamientos extraños. Me pregunto si es normal, o si esto es algo específico (y malo) sobre el ATMEGA328P de Atmel en el que se basa el Uno.
Básicamente, parece que el valor de entrada en el ADC se muestrea a una tasa inferior a la que el ADC está devolviendo valores para:
En esta imagen puede ver la entrada muestreada ejecutándose a toda velocidad conectada a una olla simple. A medida que la olla se barre de lleno a mínimo, la tensión de entrada cae. Como puede ver, los valores devueltos desde el ADC vienen en pasos, donde retorna el mismo valor (o similar) para llamadas múltiples a analogRead()
, antes de caer bruscamente.
¿Qué está pasando aquí realmente? ¿La entrada ADC se ejecuta a una velocidad diferente a la salida de datos? ¿Está mal el código de Arduino leyendo el ADC?
He intentado jugar con el preescalador ADC, y no importa a qué lo configuré (aparte de 1: 2 o 1: 4, donde muere por completo), se lee en pasos como este.
Editar
Se necesitan aproximadamente 32 lecturas ADC sucesivas para que los pasos desaparezcan por completo.