ATmega328P ejecutándose en CR2032 tiene problemas con el código de temporización / suspensión a medida que el voltaje se deprecia con el tiempo

4

Tengo un ATmega328P funcionando a 16 Mhz en CR2032 con algunos sensores y radio desde hace una semana. Comenzó a más de 3 voltios y actualmente mide a 2,96 voltios. En la actualidad, no estoy usando reguladores de impulso para regular esto. Utilizo el modo de suspensión de bajo consumo de energía utilizando las bibliotecas jee lib , duermo durante unos segundos y luego me levanto para menos de un segundo, tome algunas lecturas, transmita y vuelva a dormir nuevamente.

Últimamente, noté que la duración del sueño se había reducido en unos pocos órdenes de magnitud. Parece que duerme durante unos 50 o más milisegundos, en lugar del sueño de 5 segundos en el que solía trabajar. Si cambio a 2xAA (2.84 voltios), todavía obtengo el ciclo completo de sueño de 5 segundos.

¿Este comportamiento se debe a que el ATmega328P vuelve a usar los 8 MHz internos en lugar de los 16 MHz externos? ¿También no está seguro de cómo funciona la sincronización / suspensión con 2xAA a 2,84 voltios pero no con CR2032 a 2,96 voltios?

    
pregunta user46743

2 respuestas

2

Algunas cosas. Lo más probable es que esté midiendo la batería sin carga. Incluso si está conectado y funcionando, un multímetro no ve tomas de energía rápidas. Se necesita un osciloscopio para realizar tomas de energía de milisegundos. Recuerde, los CR2032 están diseñados para un uso a largo plazo de baja corriente. 250mAh a unos pocos mA. Sus micro y sensores que salen del sueño causan inrush, y la alta ESR (resistencia en serie equivalente) del CR2032 como causa la caída de voltaje. ¿Tiene un condensador de desacoplamiento en paralelo cerca de las clavijas de alimentación?

Y las caídas de voltaje no harán que el ATmega caiga a una velocidad más lenta. Esa es una característica demasiado avanzada para la mayoría de los micros bajos. Continuará intentando ejecutándose a 16 MHz, con un reloj inestable. Los apagones son probables.

Puede ejecutar el ATmega a 8MHz para todos los voltajes para evitar el problema, y ajustar sus demoras / temporizadores en función de eso.

    
respondido por el Passerby
7

Parece que está ejecutando el MCU fuera del área de operación segura con una celda de monedas. De acuerdo con la hoja de datos de ATmega328P , página 316, la tensión de alimentación segura mínima para 16MHz es de aproximadamente 3.8V (las marcas rojas son mios). Deberías esperar ver un comportamiento errático en ese caso. En la práctica, solo estás haciendo overclocking en tu MCU. Consulte lo que Russell McMahon tiene que decir sobre esto .

EncuantoalapreguntadeAAcontralaceldadelamoneda,tienequeverconelhechodequelosAAtienentasasdedescargamuchomásaltas(losAApuedenproporcionarunospocosamperios).Lasceldasdemonedas( ver una hoja de datos de muestra ) pueden proporcionar hasta unos pocos mA para pulsos cortos.

    
respondido por el Ricardo

Lea otras preguntas en las etiquetas