Estoy usando un MCP3561 ADC (Hoja de datos) para convertir las lecturas analógicas de una célula de carga en señales digitales para ser procesadas por un microcontrolador ATSAMD20G16 (Hoja de datos) . He configurado el ADC para que muestre las siguientes propiedades:
Prescaler: 2
Tasa de sobremuestreo: 98304
Ganancia: 1
Conversión continua
Esto corresponde a un intervalo de muestreo de aproximadamente 100ms dada la Ecuación 4.3 en la página 27 de la hoja de datos del ADC y un reloj maestro de 8 MHz de la MCU. Mi aplicación sondea continuamente el registro IRQ del ADC para comprobar el bit !DR_STATUS. Cuando este bit indica que los datos están listos, el programa lee el contenido del registro de datos del ADC y lo transfiere a la MCU a través de SPI.
He configurado mi bucle principal para imprimir el valor de la lectura del ADC y el intervalo de tiempo entre las lecturas a través del puerto serie. Observo un intervalo consistente de 98-99ms entre muestras. Sin embargo, ocasionalmente, el intervalo entre muestras se duplica. La ocurrencia de esta duplicación es impredecible; a veces hay un grupo de intervalos dobles en rápida sucesión, otras veces toma 20 o 30 segundos antes de que ocurra un intervalo doble.
Edité mi función de lectura del ADC para alternar un pin GPIO en el MCU cada vez que lee una muestra para poder correlacionar la salida en serie con una señal en el osciloscopio. Luego eliminé cada pieza de código extraño de mi bucle principal, incluyendo las declaraciones de impresión en serie, con la esperanza de aislar la causa de esta anomalía. Desafortunadamente, el comportamiento persiste, y no estoy más cerca de una respuesta.
¿Alguien ha experimentado este comportamiento (o algo similar) al utilizar este CI? Si es así, ¿pudisteis determinar la causa/desarrollar una solución? Cualquier idea será apreciada.
Gracias de antemano.