La mayoría de los microcontroladores (p. Ej., AVR, MSP430, PIC, etc.) admiten diferentes modos de suspensión. El modo de reposo "más profundo" es el que supone el consumo de energía más bajo (por ejemplo, "Apagar", "Apagar"), pero todos los sistemas de reloj generalmente se detienen en estos modos y me parece que esa es la única forma de " despertar "de ellos es a través de un estímulo externo (por ejemplo, interrupciones de cambio de pin, restablecimiento de chip). ¿Me estoy perdiendo de algo? ¿Existen métodos increíblemente bajos para generar una señal de activación periódica para una MCU?
Asumiendo que mi objetivo es minimizar el consumo de energía (es decir, dormir profundamente el mayor tiempo posible, permanecer despierto lo más brevemente posible), mientras me despierto periódicamente para ejecutar una función, ¿cuál es la forma común de lograr este tipo de comportamiento? Para simplificar aún más las cosas, supongamos que mi función no tiene estado (no tengo que recordar nada del pasado para realizarla).
He tenido cierto éxito al usar el WDT en el MSP430 para obtener este efecto. Acabo de hacer que mi rutina principal sea mi función, con la última línea permitiendo que el temporizador de vigilancia expire después de un cierto período y entrando en LPM4.5 o como se llame el modo de "sueño profundo". El resultado neto es que se realiza la función, el MCU duerme, el WDT caduca y el chip se reinicia, hasta la náusea. Parece funcionar, solo preguntándome si hay una forma "mejor" o "más elegante" o "más eficiente de energía" de obtener este tipo de comportamiento.
Todavía no he probado este enfoque con un AVR, pero creo que el WDT está más "hambriento de energía" en los AVR que en el MSP430, por lo que puede ser menos atractivo para trabajos de baja potencia. ¿Quizás no existe un enfoque "universal" de baja potencia, y tiene que usar las herramientas que ofrece una línea de productos determinada? Sé que la nueva línea picoPower tiene muchas características geniales como Event System y Sleep Walking que en algunos casos apenas requieren que la CPU esté despierta si puedes hacer que tu aplicación se ajuste a esa estructura ...
Muy bien de mi vagabundeo, deja aquí lo que tendrás que decir :)
¡Editar ejemplos concretos que ilustran técnicas también sería genial!