🛠 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

Objetivos

Dormir el ATmega32U4 en modo power-down (consumo a nivel de microamperios en el MCU) y despertarlo cada segundo con el watchdog, mediante programación directa en C para AVR. Comprender las implicaciones de este modo en una placa: el USB se desconecta durante el sueño y el Monitor serie ya no muestra nada.

Material

Código completo

// Sommeil power-down + reveil 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 reveil = false;

ISR(WDT_vect) {          // le watchdog reveille : travail minimal
  reveil = 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 reveil
  delay(30);
  digitalWrite(LED_BUILTIN, LOW);
  dormir1s;                       // ~1 s de sommeil profond
}

Verificación esperada

El LED 13 parpadea brevemente cada segundo. Al insertar un amperímetro entre la fuente de alimentación y la placa, se observa una fuerte caída de la corriente durante el sueño en comparación con el estado de vigilia. > NO VERIFICADO: la ficha del proyecto no proporciona un valor oficial de consumo a nivel de la placa; las curvas del datasheet del 32U4 se refieren solo al MCU, no a la placa completa (regulador, LED incluidos).

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales