EEPROM Arduino esempi di lettura

La memoria EEPROM di Arduino consente di salvare dati importanti durante l’esecuzione del programma, come le impostazioni di sistema. Tutte le informazioni saranno salvate anche in caso di spegnimento o riavvio del microcontrollore, perché la memoria non è volatile. Vediamo come lavorare con la memoria EEPROM di Arduino con esempi di scrittura e lettura di diversi tipi di dati utilizzando i comandi della libreria standard EEPROM.h Arduino.




Per questa attività sono necessari:

  • Arduino Uno / Arduino Nano / Arduino Mega

Memoria non volatile EEPROM di Arduino

Memoria EEPROM (Electrically Erasable Programmable Read-Only Memory) di Arduino è un dispositivo di memoria permanente che può conservare i dati scritti per decenni dopo un’interruzione di corrente. La memoria EEPROM può essere riscritta diverse centinaia di migliaia di volte a una temperatura di almeno 24°C e la lettura dei dati è illimitata. La capacità di memoria EEPROM delle schede Arduino più diffuse è la seguente:

  • ATmega168 (scheda Arduino Nano) – 512 byte
  • ATmega328 (scheda Arduino Uno, Arduino Nano) – 1 Kbyte
  • ATmega1280, ATmega2560 (scheda Arduino Mega) – 4 Kbyte

Occorrono circa 3,3 µs per scrivere un byte nella EEPROM e circa 0,4 µs (microsecondi) per leggere un byte. Ogni byte (cella) della EEPROM di Arduino ha come valore predefinito 255 (cioè una cella che non è mai stata scritta). Si noti che se i dati occupano uno spazio maggiore di 1 byte (ad esempio, un numero maggiore di 255), vengono suddivisi in più celle. Questo è un aspetto importante da considerare quando si scrivono grandi numeri nella EEPROM.

Comandi della libreria EEPROM.h di Arduino

Funzione

Descrizione

read()
EEPROM.read(address)
Legge un byte dalla EEPROM all’indirizzo address
write()
EEPROM.write(address, value)
Scrive un byte di valore nella EEPROM all’indirizzo address
update()
EEPROM.update(address, value)
Simile a write(), ma i nuovi dati vengono scritti nella cella solo quando differiscono da quelli già scritti. L’uso di questa funzione prolunga la durata della memoria EEPROM.
get()
EEPROM.get(address, data)
Legge qualsiasi tipo di dati dalla EEPROM di Arduino all’indirizzo specificato address. I dati possono essere di qualsiasi tipo, ad esempio int o float
put()
EEPROM.put(address, data)
Scrive qualsiasi tipo di dati nella EEPROM all’indirizzo address. La funzione scrive solo dati diversi nella cella
EEPROM[]
EEPROM[address]
Consente di trattare i byte della EEPROM come un array. I byte possono essere letti e scritti

Programma Arduino per la scrittura di EEPROM (write)




#include "EEPROM.h"

void setup() {
  Serial.begin(9600);

  EEPROM.write(0, 100);
  delay(2000);

  Serial.println(EEPROM.read(0));
  Serial.println(EEPROM[0]);
 
}
 
void loop() {
 
}

Spiegazione del codice per la scrittura di memoria EEPROM (write):



  1. la funzione EEPROM.write() sovrascrive ogni volta i dati nella cella con indirizzo 0, il che riduce il ciclo di vita della memoria, quindi è meglio usare EEPROM.update().

Programma Arduino per la pulizia di EEPROM (update)

#include "EEPROM.h"

void setup() {
  Serial.begin(9600);

  EEPROM.update(0, 100);
  delay(2000);

  Serial.println(EEPROM.read(0));
  Serial.println(EEPROM[0]);
  
}
 
void loop() {
 
}

Spiegazione del codice per la pulizia di memoria EEPROM (update):

  1. le funzioni di scrittura/lettura/aggiornamento consentono solo il tipo di dati byte e non possono essere utilizzate per float o int. A tale scopo, utilizzare le funzioni put/get.

Programma Arduino per la lettura di EEPROM (read)

#include "EEPROM.h"
int address;
byte value;

void setup() {
  Serial.begin(9600);
  Serial.println(EEPROM.length());
  delay(3000);

  while (address < EEPROM.length()) {
    value = EEPROM.read(address);
    Serial.print("Address: ");
    Serial.print(String(address));
    Serial.print(", value: ");
    Serial.println(String(value));
    address++;
    delay(100);
  }
}
void loop() {
 
}

Spiegazione del codice per la lettura di memoria EEPROM (read):

  1. la funzione EEPROM.length() indica il numero totale di celle della memoria. Se si lavora con un ATmega168 Nano, il ciclo terminerà a 512 celle;
  2. se la memoria non è stata utilizzata, tutti i valori nelle celle saranno 255.

Dimostriamo come scrivere un numero superiore a 255, ad esempio 999, nella EEPROM di Arduino. Quando viene scritto nella EEPROM del microcontrollore, il numero 999 viene diviso nel moltiplicatore (byte alto) e nel numero mancante (byte basso), occupando due spazi nella memoria non volatile (cioè 999 = 3×256 + 231). Per visualizzare il numero memorizzato sulla monitor seriale dell’IDE Arduino, è necessario “assemblarlo” utilizzando la funzione word().

Esempio di utilizzo della EEPROM per scrivere int

#include "EEPROM.h"

int num = 999;
byte hi  = highByte(num);
byte low = lowByte(num);

void setup() {
  Serial.begin(9600);

  EEPROM.update(1, hi);
  EEPROM.update(2, low);

  delay(1000);

  byte val1 = EEPROM.read(1);
  byte val2 = EEPROM.read(2);

  Serial.println("highByte - " + String(val1));
  Serial.println("lowByte  - " + String(val2));

  int NUM = word(hi, low);
  Serial.println("int num  - " + String(NUM));
}

void loop() {
 
}

Spiegazione del codice per utilizzo EEPROM per scrivere int:

  1. il problema principale della memorizzazione di numeri grandi è quello di non sovrascrivere accidentalmente la cella corretta con le nuove informazioni. A tale scopo, si tiene conto della dimensione dei dati da memorizzare utilizzando le funzioni EEPROM.put() e EEPROM.get().

Conclusione. Per cancellare la memoria EEPROM non volatile di Arduino e riportarla alle impostazioni di fabbrica, è necessario sovrascrivere tutte le celle di memoria con il valore 255. A tale scopo si può utilizzare un ciclo for o while. Un semplice esempio di programma di cancellazione EEPROM per Arduino è mostrato qui sopra. Se avete domande sulla EEPROM di Arduino, lasciatele nei commenti a questo articolo.

Rate this post


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.