Pubblicato il

EEPROM Arduino Microcontrollore Scrittura e Lettura – Lezione 3

Premessa:

Per questa funzione il microcontrollore dell’arduino UNO dispone di una memoria EEPROM che è simile alla Flash, ma ha caratteristiche leggermente diverse: la Flash è infatti garantita per 10.000 cicli di scrittura, mentre la EEPROM per 100.000. Entrambe le memorie sono invece garantite per 100 anni di ritenzione dei dati se la temperatura è di 25 gradi, altrimenti se si arriva a 85 gradi gli anni scendono a 20.

Interagire con la EEPROM

La particolare natura della memoria EEPROM richiede alcuni cicli di clock per essere scritta corettamente e in più il microcontrollore ha un meccaniscmo di gestione dell’accesso in lettura e scrittura tale da richiedere alcuni accorgimenti specifici. Tutto questo per garantire che le operazioni avvengano nel modo corretto e che il risultato sia garantito. Ciò nonostante, ci possono eesere comunque dei casi, legati agli interrupt, nei quali la scrittura può non andare a buon fine.

La libreria EEPROM di Arduino

La libreria specifica Arduino per scrivere e leggere è denominata a tal caso EEPROM e contiene sostanzialmente solo due funzioni

read()
write()

Per ciascuna delle due funzioni c’è una sintassi da rispettare passando opportuni parametri. Inanzitutto la EEPROM ha una dimensiona precisa, dipendente dal tipo di microcontrollore installato sulla board Arduino. Nel caso di UNO, abbiamo 1024 locazioni distinte di memoria, mentre per board con atmega168 la memoria scende a 512 byte.

La funzione read()

Questa funzione richiede come argomento l’indirizzo della locazioneda leggere, espresso con un intero, e restituisce un valore compreso fra 0 e 255. Le locazioni di EEPROM che non sono mai state scritte e questo vale per l’intera vita del microcontrollore restituiscono il valore 255. Dato che appartiene alla libreria EEPROM, per poter essere inserita corettamente nello sketch, richiederà il nome della libreria come prefisso

EEPROM.read(addr)

Ecco uno sketch esemplicativo:

Librerie:

  • EEPROM LGPL: arduino.cc/en/Reference/EEPROM
#include <EEPROM.h>
int indirizzo = 0;
byte valore;

void setup()
{
   Serial.begin(9600);   // Porta seriale
}

void loop()
{
valore = EEPROM.read(indirizzo);
Serial.print(indirizzo);
Serial.print("\t");
Serial.print(valore, DEC);
Serial.println();
indirizzo = indirizzo + 1;
if (indirizzo == 1024)
   indirizzo = 0;
delay(500);
}

La funzione write()

Complementare alla funzione di lettura delle siingole celle di memoria, questa funzione può memorizzare un qualsiasi valore di tipo byte, ovvero tra 0 e 255, in una delle celle della EEPROM. I due parametri da passare sono (addr, val) sono l’indirizzo della cella da scrivere il valore

Ecco uno sketch esemplicativo:

#include <EEPROM.h>
void setup()
{
   for(int i = 0; i < 1024; i++)
      EEPROM.write(i, i);
}
void loop()
{
}