🛠 Sommeil profond et réveil par watchdog

Arduino Nano Every · avance · Schéma : IMG-nano-every-avance-2-nanoevery-sleep-watchdog.svg — Nano Every endormie alimentée par une pile, croissant de lune au-dessus de la carte, petit chien de garde (watchdog) dessiné à côté d'un chronomètre une seconde, LED 13 allumée brièvement

Objetivos

Reducir el consumo de la Nano Every para un sensor alimentado por pila: dormir el núcleo en SLEEP_MODE_PWR_DOWN y despertarlo periódicamente gracias al watchdog del ATmega4809. En esta familia, el watchdog provoca por defecto un reinicio: aprovechamos este reset como una alarma, distinguiendo un reinicio por watchdog de un arranque normal.

Material

Código completo

// Sommeil profond, reveil ~1 s via watchdog (reset comme alarme)
#include <avr/sleep.h>
#include <avr/wdt.h>

void setup {
  pinMode(LED_BUILTIN, OUTPUT);
  wdt_reset;
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);  // mode le plus profond
  sleep_disable;                       // armement a la volee
  wdt_enable(WDTO_1S);                   // delai 1 s
}

void loop {
  digitalToggle(LED_BUILTIN);            // signal d'activite brève
  delay(50);
  wdt_reset;                           // eviter le reset immediat
  sleep_enable;
  sleep_cpu;                           // dort jusqu'au reset WDT
  // A ce point : le watchdog a reinitialise la carte, setup tourne
  // a nouveau avant de revenir ici.
}

Verificación esperada

El LED 13 parpadea brevemente cada segundo. Entre dos parpadeos, el núcleo está apagado: con alimentación por pila y USB desconectado, un microamperímetro debe mostrar un promedio muy inferior al modo activo (la ganancia exacta depende del modo y de los periféricos que hayan quedado activos).

Errores frecuentes

> NO VERIFICADO: corrientes de consumo exactas por modo de sueño en la placa Nano Every (no se ha recuperado ningún dato oficial) — medir en su propio montaje.

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales