¿El ADC arduino (ATMEGA328P) realmente solo toma muestras periódicamente?

3

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.

    
pregunta Majenko

3 respuestas

2

El motivo de la incapacidad para leer el ADC sin problemas es la forma en que me estaba mostrando.

Han pasado tres años desde que hice esta pregunta (cómo pasa el tiempo) y recientemente la redescubrí después de que alguien la votara, así que tengo que intentarlo y recordarlo todo ahora ...

Básicamente, estaba leyendo el ADC con regularidad, pero la salida de la pantalla se estaba realizando a través de PAL o VGA (ahora no puedo recordar) en una pantalla TFT. Por supuesto, como es tarde en la noche en ese momento, olvidé que dibujar un marco si la pantalla toma tiempo, y que durante ese tiempo no se puede muestrear el ADC, por lo tanto, los pasos.

Lección aprendida: dormir sobre un problema hace que la respuesta sea obvia.

    
respondido por el Majenko
2

¿Error DAC? : dice que la traza del alcance muestra los valores de entrada ADC de Arduino PERO aparentemente está mostrando una señal analógica. Supongo que hay un DAC de algún tipo en el proceso para convertir las lecturas de ADC de nuevo a analógicas.
 La traza da la apariencia de un DAC con un error masivo en un bit de nivel medio. por ejemplo, el bit de dirección A2 del DAC puede tener un valor de resistencia que es, por ejemplo, 10 veces más pequeño.

Prueba: gira el bote MUY despacio, ¿desaparecen los pasos gruesos?
 es decir, obtienes un nivel suavemente descendente.
 Si el nivel disminuye de esa manera a cualquier velocidad de barrido, es probable que tenga un error de bit basado en el mensaje ADC.
 O, posiblemente, un microcontrolador con un error de bit en el hardware DAC del IC (menos probable).

Velocidad de ADC: Falla lo anterior -

La sensación general de la web es que puedes hacerlo mejor que lo que estás viendo.
 Si ese barrido de bote está en, por ejemplo, 0.1 segundos, su tasa bruta de pasos es de aproximadamente 10 mS.  SIN EMBARGO, parece que hay pequeños pasos en declive en su forma de onda - perhaops 10 por paso bruto, por un ministep de, por ejemplo, 1 mS.  Incluso eso es más largo de lo que cabría esperar.

Esta discusión sugiere fkHz de 10's. - 77 kHz es mencionado.

Ámbito basado en Arduino da una idea de la velocidad esperada.

Monitor de energía usando ADC nuevamente, una guía.

Útil

    
respondido por el Russell McMahon
0

Hay un ADC y 6 entradas, muestrea cada entrada 3 veces (creo), luego se mueve a la siguiente entrada, etc.

    
respondido por el Razvan

Lea otras preguntas en las etiquetas