🛠 Mode basse consommation : power-down et watchdog

Arduino Micro · avance · Schéma : IMG-micro-avance-3-micro-low-power-watchdog.svg — Arduino Micro en sommeil power-down : horloge 16 MHz coupée, seul le watchdog interne réveille le microcontrôleur toutes les secondes, LED témoin d'une brève activité au réveil

Objectifs

Endormir le ATmega32U4 en mode power-down (consommation au niveau du microampère sur le MCU) et le réveiller toute les secondes avec le watchdog, en écriture AVR C directe. Comprendre ce que ce mode implique sur une carte : l'USB est coupé pendant le sommeil et le Moniteur série ne voit plus rien.

Matériel

Code complet

// Sommeil power-down + réveil par watchdog (~1 s), en AVR C direct.
// Attention : en power-down, l'USB CDC est mort ; pas de Serial pendant le sommeil.
#include <avr/sleep.h>
#include <avr/wdt.h>

volatile bool réveil = false;

ISR(WDT_vect) {          // le watchdog reveille : travail minimal
  réveil = true;
}

void dormir1s {
  MCUSR &= ~(1 << WDRF);           // effacer la raison de reset
  wdt_reset;
  WDTCSR |= (1 << WDCE) | (1 << WDE);  // autoriser la modification
  WDTCSR = (1 << WDP0) | (1 << WDP1) | (1 << WDIE);  // ~1 s, mode interruption
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);               // mode le plus profond
  sleep_enable;
  sei;
  sleep_cpu;                     // dort jusqu'au watchdog
  sleep_disable;
}

void setup {
  pinMode(LED_BUILTIN, OUTPUT);
  wdt_disable;
}

void loop {
  digitalWrite(LED_BUILTIN, HIGH);  // temoin bref du réveil
  delay(30);
  digitalWrite(LED_BUILTIN, LOW);
  dormir1s;                       // ~1 s de sommeil profond
}

Vérification attendue

La LED 13 clignote brièvement chaque seconde. En insérant un ampèremètre entre l'alimentation et la carte, on constate une forte chute du courant pendant le sommeil par rapport à l'éveil. >

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels