🛠 Low-power : mode power-down et watchdog

Arduino Nano (Classic, ATmega328P) · avance · Schéma : IMG-nano-classic-avance-9-nanoc-low-power-watchdog.svg — Arduino Nano sur batterie avec LED de faible consommation, réveil périodique par watchdog en mode power-down du ATmega328P

Objetivos

Reducir el consumo del Nano clásico durante el sueño profundo: poner el ATmega328P en modo power-down (relojes detenidos, SRAM y registros guardados) y despertarlo periódicamente mediante el watchdog independiente (~8 s máximo). Técnica básica de cualquier sensor alimentado por pila de botón o LiPo.

Material

Código completo

// Sommeil power-down + reveil watchdog ~8 s (ATmega328P)
#include <avr/sleep.h>
#include <avr/wdt.h>
#include <avr/power.h>

ISR(WDT_vect) { /* reveil : retour naturel en loop */ }

void setup {
  pinMode(LED_BUILTIN, OUTPUT);
  MCUCR = 0;                       // reveil bas niveau
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_enable;
  wdt_reset;
  WDTCR = _BV(WDIE) | _BV(WDP3) | _BV(WDP0);  // IT watchdog ~8 s
  power_adc_disable;             // coupe les peripheriques inutiles
  power_timer1_disable;
  power_usart0_disable;
}

void loop {
  digitalWrite(LED_BUILTIN, HIGH); // pouls de 100 ms entre deux sommeils
  delay(100);
  digitalWrite(LED_BUILTIN, LOW);
  wdt_reset;
  WDTCR = _BV(WDIE) | _BV(WDP3) | _BV(WDP0);  // rearme (bit WDTCE)
  sleep_cpu;                     // power-down jusqu'au prochain WDT
}

Verificación esperada

El microamperímetro muestra picos cortos (el impulso del LED de 100 ms) separados por mesetas muy bajas: el MCU solo pasa de varios miliamperios activos a unos pocos microamperios en power-down. El LED parpadea cada ~8 s, lo que demuestra que el watchdog despierta correctamente el sueño. Eliminar el código de sueño hace que la meseta de consumo suba inmediatamente.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales