eeprom-contre.ino
La EEPROM de 1 KB del ATmega328P conserva datos sin alimentación: este contador de arranques sobrevive a cortes de corriente. La palabra mágica evita leer ruido en el primer lanzamiento; el patrón de toda persistencia en Nano.
Hardware
Un Arduino Nano clásico (ATmega328P a 16 MHz, formato DIL de 30 patillas para breadboard, USB mini-B, lógica de 5 V, pin RESET abajo a la izquierda). Arduino Nano sola; la EEPROM es interna del chip, sin componente externo.
Cableado
Sin cableado; para reiniciar el contador, flashea cualquier sketch que llame a EEPROM.put(0, 0).
Funcionamiento
EEPROM.get/put leen/escriben tipos arbitrarios (aquí uint32_t en 4 bytes). Cada put solo escribe los bytes que cambian, preservando la vida de las celdas.
Ejecución
En el IDE de Arduino, selecciona la placa Arduino Nano y el procesador ATmega328P, elige el puerto serie y carga. El rail de 5 V de la placa conviene a sensores de 5 V; si no, usa 3,3 V en pines compatibles.
Variantes
Guarda un búfer circular de medidas para un registrador de respaldo, o una tabla de consignas editable por serie sin reflash.
eeprom-contre.ino
// L'EEPROM 1 Ko du 328P survit a la coupure : compteur de demarrages.
// Attention : ecriture use la cellule (~100 000 cycles) : journalisez.
#include <EEPROM.h>
const int ADRESSE = 0;
const uint32_t MAGIC = 0xA5A51234; // verifie que l'EEPROM est initialisee
void setup() {
Serial.begin(9600);
uint32_t magic = 0;
EEPROM.get(ADRESSE + 4, magic);
uint32_t compteur;
if (magic != MAGIC) {
compteur = 0;
EEPROM.put(ADRESSE + 4, MAGIC);
Serial.println(F("EEPROM initialisee"));
} else {
EEPROM.get(ADRESSE, compteur);
}
compteur++;
EEPROM.put(ADRESSE, compteur);
Serial.print(F("Demarrage n°"));
Serial.println(compteur);
// Lecture de controle apres ecriture (bonne habitude AVR)
uint32_t verif;
EEPROM.get(ADRESSE, verif);
Serial.println(verif == compteur ? F("verif OK") : F("verif KO"));
}
void loop() {}