🛠 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

Objectifs

Faire chuter la consommation du Nano classique au réveil près : mettre le ATmega328P en mode power-down (horloges stoppées, SRAM et registres sauvegardés) et le réveiller périodiquement par le watchdog indépendant (~8 s max). Technique de base de tout capteur sur pile bouton ou LiPo.

Matériel

Code complet

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

ISR(WDT_vect) { /* réveil : retour naturel en loop */ }

void setup {
  pinMode(LED_BUILTIN, OUTPUT);
  MCUCR = 0;                       // réveil 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
}

Vérification attendue

Le micro-ampèremètre montre des pics courts (l'impulsion LED de 100 ms) séparés de plateaux très bas : le MCU seul tombe de plusieurs milliampères actifs à quelques microampères en power-down. La LED clignote toutes les ~8 s, preuve que le watchdog réveille bien le sommeil. Retirer le code de sommeil fait immédiatement remonter le plateau de consommation.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels