Arduino – impiego semplice ed avanzato della memoria EEPROM

EEPROM, acronimo di “Electrically Erasable Programmable Read Only Memory” è un tipo di memoria non volatile destinata a memorizzare dati (ad esempio per la configurazione di un dispositivo) che devono essere mantenuti quando viene tolta l’alimentazione elettrica.
Se pensiamo alle variabili dichiarate in un listato, queste possono subire modifiche durante il funzionamento del programma. Un esempio può esserne l’incremento determinato da una serie di pressioni di un pulsante. Tuttavia se riavviamo la scheda Arduino, qualunque sia l’attuale valore assunto da tale variabile, questo sarà ripristinato al valore dichiarato all’inizio del listato. Per evitare ciò e mantenerlo quindi in memoria in seguito ad uno spegnimento della scheda si ricorre all’uso della memoria EEPROM, gestibile facilmente grazie all’apposita libreria ufficiale.

In base al modello, i microcontrollori che si posono trovare sulle varie schede Arduino sono dotati di diverse capienze in memoria:

MicrocontrolloreCapacità EEPROM
Atmega 168512B
Atmega 3281kB (1024B)
Atmega 1280 o 25604kB (4096B)

Ciascun byte di memoria può essere interpretato come una casella in cui è possibile memorizzare un valore intero a 8bit, vale a dire compreso tra 0 e (2^8 – 1) = 255. Ciascuna casella può essere richiamata mediante il suo indirizzo, che consiste in un valore intero compreso tra 0 e il numero di bytes totale della memoria meno 1. Ad esempio per il microcontrollore Atmega328 che è dotato di 1024bytes (caselle) di memoria EEPROM, gli indirizzi vanno da 0 a 1023.

Le varie celle di memoria sono gestibili mediante le seguenti istruzioni messe a disposizione della libreria ufficiale:

EEPROM.read(indirizzo); → restituisce il valore intero memorizzato nella cella avente l’indirizzo indicato.

EEPROM.write(indirizzo, valore); → scrive il valore nella cella avente l’indirizzo indicato.

EEPROM.update(indirizzo, valore); → effettua la scrittura solo se il valore indicato è diverso dal valore precedentemente memorizzato.

La differenza tra write e update è radicale in quanto permette di risparmiare un ciclo di scrittura se il valore da memorizzare non è cambiato rispetto al precedente. Quale è quindi il vantaggio? Innanzitutto la scrittura/modifica di un valore memorizzato richiede un tempo di 3.3ms.

Poi la memoria EEPROM non ha una vita illimitata, ma è garantita fino a circa 100000 cicli di scrittura!!

Lo scopo di questa memoria è infatti quello di mantenere salvati dei valori che determinano la configurazione di un dato sistema, i quali non devono essere quindi soggetti a modifiche frequenti.

24,738 total views, 15 views today