Mi objetivo es generar una interrupción en un procesador Atmega328P cada segundo más o menos, usando un consumo de corriente promedio sustancialmente menor que el temporizador de vigilancia incorporado.
Puede ver en la hoja de datos que con el temporizador de vigilancia activado, el consumo de corriente a 5 V y 25 °C es de alrededor de 6,5 µA:
Con él deshabilitado, hemos bajado a alrededor de 100 nA:
Algo intermedio, digamos 1 µA, podría resultar en un funcionamiento sustancialmente más prolongado con una batería, pero aún permitir que el procesador se active y verifique cosas como el nivel de luz actual, la temperatura, ese tipo de cosas.
He estado experimentando con esto:
La idea es que el condensador se cargue rápidamente (50 µs) a través de la resistencia que limita la corriente a unos 22 mA (suponiendo que funcione a 5 V por el momento). Luego, la salida pasa a alta impedancia y esperamos una interrupción descendente para activar el procesador y solucionarlo.
Código de prueba:
const byte capacitor = 2;
const byte LED = 13;
volatile byte fired = true;
void myISR ()
{
digitalWrite (LED, HIGH);
fired = true;
}
void setup()
{
pinMode (LED, OUTPUT);
attachInterrupt (0, myISR, FALLING);
}
void loop()
{
if (fired)
{
delay (1000);
digitalWrite (LED, LOW);
digitalWrite (capacitor, HIGH);
pinMode (capacitor, OUTPUT);
delayMicroseconds (50);
EIFR = bit (INTF0); // clear flag for interrupt 0
pinMode (capacitor, INPUT); // high impedance
digitalWrite (capacitor, LOW);
fired = false;
} // end of if fired
}
Este código no tiene el código de suspensión, no es realmente relevante para la pregunta.
Las pruebas indican que esto da un retraso de aproximadamente 970 ms desde que empiezo a cargar el capacitor hasta que se dispara la interrupción, que es lo que quiero.
¿Es esta la mejor manera (o al menos una forma razonable) de generar una señal de despertador temporizada con un consumo mínimo de energía?
Calculo que el consumo medio sería:
22 mA / (1 / 50 µs) = 1.1 µA
¿Eso parece correcto? ¿O es incluso menos ya que el capacitor tomaría menos corriente mientras se carga? Como, aproximadamente la mitad de eso?
Este esquema no solo depende del voltaje de suministro, como ha notado, sino que también depende de la geometría de nivel atómico precisa de los transistores de entrada, específicamente su umbral de fuga y voltaje.
Si desea una potencia aún más baja que el WDT, entonces debería considerar usar un reloj de cristal y el temporizador asíncrono. La hoja de datos establece el consumo de energía típico para este método en 0,8 µA a 1,8 V y 0,9 µA a 3 V, lo que hace que una extrapolación de 1,1 µA a 5 V sea muy razonable.
Considere usar un procesador separado, como el PIC12LF1571 . Su consumo actual es:
Typical sleep current is 30 nA @ 25 °C (maximum 270 nA @ 85 °C)
Typical WDT takes an additional 550 nA @ 25 °C (maximum 750 nA @ 85 °C)
Total: typical 850 nA @ 25 °C, and maximum 1.02 µA @ 85 °C.
El WDT puede cronometrar desde 1 ms hasta 256 (1 s es una de las opciones). Todo lo que necesita agregar es una tapa de desacoplamiento. Es una pieza de 3.3V.
El chip cuesta alrededor de 75 centavos y viene en paquetes DIP, SOIC o MSOP de 8 pines .
el fotón
nick gammon
el fotón