Corso base di Arduino: come gestire la EEPROM

Oggi vedremo le tecniche per conservare le informazioni nella memoria di Arduino, anche quando manca la corrente elettrica.

Avatar di Elettronica Open Source

a cura di Elettronica Open Source

banner prova1

Quando si toglie l'alimentazione elettrica ad Arduino, si sa, tutti i dati elaborati nella sua RAM vengono irrimediabilmente persi. Vediamo quali sono le tecniche per conservare le informazioni nella memoria della famosa scheda di sviluppo, anche quando manca la corrente elettrica.

Ormai quasi tutti i microcontrollori ne posseggono una. Arduino ha una piccola memoria, la EEPROM, che ha la capacità di trattenere le informazioni anche in assenza di alimentazione elettrica, proprio come una microscopica memoria di massa. Esistono alcune librerie che permettono la scrittura e la lettura di tale memoria, in modo da conservare alcuni dati importanti.

Le funzioni per la gestione della EEPROM

La EEPROM è una memoria composta da 1024 byte (almeno per il modello di MCU ATmega328). E' un insieme di celle, ognuna delle quali direttamente accessibile attraverso un indirizzo. Ogni cella può contenere una informazione. La libreria di Arduino gestisce alcune potenti funzioni, le più importanti delle quali sono:

  • EEPROM.read(address)        Legge un dato dalla EEPROM a un particolare indirizzo
  • EEPROM.write(addr, val)     Scrive un dato nella EEPROM a un indirizzo specificato

Ne esistono delle altre e il programmatore, ovviamente può crearne ulteriormente, secondo le proprie esigenze.

Ciclo di vita della EEPROM

La EEPROM, purtroppo, non è scrivibile all'infinito ma può essere sottoposta a memorizzazione solamente per 100.000 volte. Si tratta di un valore, comunque, estremamente elevato. In fase di programmazione basterebbe pianificare un numero minimo di scritture ed evitare le memorizzazioni inutili, ossia si devono scongiurare le registrazioni di un determinato valore quando lo stesso risulta già presente in memoria.

Un semplice conta persone con memoria

L'esempio che segue è un semplice conta persone o conta pezzi che incrementa una variabile ogni volta che si preme un pulsante, simulando l'azione di una fotocellula che rileva un raggio di luce interrotto solo dal passaggio di qualcosa. Il conteggio è visualizzato attraverso il monitor seriale dell'IDE di Arduino. La particolarità sta nel fatto che se dovesse mancare la tensione alla scheda, il conteggio non si perde e non si azzera ma riprende dal punto lasciato, appena il circuito è nuovamente alimentato. I valori incrementali sono infatti memorizzati in EEPROM. Il secondo pulsante ha il compito di azzerare il valore, memorizzando 0 semplicemente in memoria. La figura 1 mostra lo schema elettrico del dispositivo.

figura 1 schema elettrico
Figura 1: schema elettrico del conta persone con memoria

Lo sketch

Il programma, in figura 2, è molto semplice. Inoltre risulta estremamente commentato. La funzione setup() ha solo lo scopo di definire la velocità di comunicazione seriale e d'impostare, quale ingresso, i pin 6 (per il pulsante azzera) e 7 (per il pulsante di incremento). La funzione loop(), ripetuta continuamente e all'infinito, attende la pressione dei tasti. Se viene premuto il tasto di azzeramento, il programma memorizza il valore 0 sulla prima cella della EEPROM dimenticando, di fatto, il numero di oggetti o persone contate. Se viene premuto, invece, il tasto d'incremento il programma:

  • Legge il contenuto della EEPROM
  • Incrementa tale valore
  • Memorizza in EEPROM il nuovo valore
  • Visualizza le informazioni anche sul monitor seriale
  • Congela il programma in caso di pressione prolungata del pulsante, evitando inutili e ripetitivi incrementi al passaggio di una sola persona

Il listato è molto semplice è non prevede molte caratteristiche utili quali, ad esempio, il controllo dell'overflow o dell'anti rimbalzo per i pulsanti.

figura 2 sketch
Figura 2: lo sketch

La figura 3 mostra, infine, il monitor seriale durante il funzionamento del sistema.

figura 3 monitor seriale
Figura 3: monitor seriale

Tom's Consiglia

Per chi inizia ora e voglia dotarsi di tutto l'occorrente, Arduino Uno si trova facilmente a un prezzo abbordabile.