Come utilizzare Arduino EEPROM per salvare i dati tra cicli di alimentazione

Sapevi che Arduino può memorizzare i dati quando è spento? Sto parlando dell'EEPROM, quindi unisciti a me mentre ti mostro come leggere e scrivere ad esso.

Sapevi che Arduino può memorizzare i dati quando è spento?  Sto parlando dell'EEPROM, quindi unisciti a me mentre ti mostro come leggere e scrivere ad esso.
Annuncio pubblicitario

Sapevi che Arduino può memorizzare i dati quando è spento? Non lo schizzo memorizzato nella memoria flash. Sto parlando di dati variabili nella EEPROM. Unisciti a me mentre ti mostro come leggere e scrivere e cosa può fare per i tuoi progetti.

Se sei nuovo di Arduino, assicurati di dare un'occhiata alla nostra guida per principianti. Guida introduttiva ad Arduino: Guida per principianti Guida introduttiva ad Arduino: Guida per principianti Arduino è una piattaforma di prototipazione elettronica open source basata su hardware flessibile e facile da usare e software. È pensato per artisti, designer, hobbisti e chiunque sia interessato a creare oggetti o ambienti interattivi. Leggi di più .

Cos'è EEPROM?

EEPROM sta per memoria di sola lettura programmabile cancellabile elettricamente . È un tipo di memoria non volatile. Non ti preoccupare se non capisci cosa significhi. Memorizza semplicemente i dati anche con la potenza rimossa (a differenza della RAM A Guida rapida e sporca alla RAM: Che cosa è necessario sapere Una guida rapida e sporca alla RAM: Che cosa è necessario sapere La RAM è un componente cruciale di ogni computer, ma può essere confusi per capire se non sei un guru della tecnologia.In questo post, scomposizione in termini facili da comprendere.Per saperne di più, che ha bisogno di energia elettrica per conservare tutti i dati).

Colpo di esempio EEPROM

EEPROM è integrato in una miriade di processori, come l'FPGA (Field-programmable gate array) utilizzato in Matrix Creator Matrix Creator per Raspberry Pi Review Matrix Creator per Raspberry Pi Review Matrix Creator è un coltellino svizzero per il tuo Pi, con 15 sensori, una suite di protocolli di comunicazione, un anello di LED RGB, un array di microfoni e molto altro! Leggi di più Pi HAT. Tutti gli Arduinos hanno EEPROM disponibile, ma la capacità varia a seconda del modello. Assicurati di dare un'occhiata alla nostra guida all'acquisto Guida all'acquisto di Arduino: quale scheda dovresti acquistare? Guida all'acquisto di Arduino: quale scheda si dovrebbe ottenere? Ci sono così tanti diversi tipi di tavole Arduino là fuori, ti verrebbe perdonato per essere stato confuso. Quale dovresti comprare per il tuo progetto? Aiutaci, con questa guida all'acquisto di Arduino! Leggi di più per maggiori dettagli su ciascuna scheda.

Come funziona?

La EEPROM viene cancellata elettricamente e programmata utilizzando il tunneling di Fowler-Nordheim . Non è necessario conoscere i dettagli tecnici per poterlo utilizzare. La premessa di base è che l'elettricità viene utilizzata per modificare i dati binari (cosa è binario Cosa è binario? [Tecnologia spiegata] Cosa è binario? [Tecnologia spiegata] Dato che il binario è così assolutamente fondamentale per l'esistenza dei computer, sembra strano che non abbiamo mai affrontato l'argomento prima - quindi oggi avevo pensato di dare una breve panoramica di ciò che è binario ... Leggi di più). Può essere letto, cancellato e riscritto elettronicamente.

Fortunatamente, il linguaggio Arduino semplifica la modifica dei dati, il tutto senza bisogno di una laurea in informatica.

EEPROM Close Up

Aspettativa di vita

Mentre è facile da usare EEPROM in Arduino, ha una durata limitata. EEPROM è specificato per gestire 100.000 cicli di lettura / cancellazione. Ciò significa che è possibile scrivere e quindi cancellare / riscrivere i dati 100.000 volte prima che l'EEPROM diventi instabile. In realtà, i semiconduttori Atmel (i produttori dei chip "Arduino") possono gestire un numero maggiore o minore di cicli, a seconda delle tolleranze di ciascun processore.

EEPROM Close Up

Una volta che un luogo è stato scritto e cancellato troppe volte può iniziare a diventare inaffidabile. Potrebbe non restituire i dati corretti o restituire il valore da un bit adiacente.

Questo può sembrare un sacco di scritture, ma può essere facile raggiungere questo limite se si legge e si scrive a livello di programmazione (in un ciclo, per esempio). La lettura dei dati non degrada il silicio, solo la scrittura lo fa . Puoi leggere i dati da EEPROM quanto vuoi senza paura!

È importante notare che questo limite si applica a ciascuna posizione di memoria. Il tuo Arduino può avere 1.000 o più posizioni di memoria disponibili in EEPROM, quindi se scrivi troppe volte in una posizione, è solo quella posizione a essere influenzata, e non nessuna delle altre. Più avanti parlerò del livellamento dell'usura, che può ridurre l'usura delle EEPROM distribuendo i dati in modo uniforme - qualcosa che gli SSD Come stimare la durata residua del tuo SSD Come stimare la durata residua del tuo SSD Tutti gli SSD hanno una durata limitata a causa della scrittura cicli (sebbene questa durata sia molto più lunga di quanto si possa pensare). Ecco come puoi stimare quanto sei vicino alla fine. Leggi di più usa.

Per cosa è utile?

EEPROM è incredibilmente utile per i tuoi progetti Arduino. Poiché ricorda i dati anche quando viene tolta l'alimentazione, è possibile memorizzare lo stato di Arduino. Forse potresti costruire una torretta laser Pew Pew! Come costruire una torretta laser con un banco Pew di Arduino! Come costruire una torretta laser con un Arduino Sei annoiato? Potrebbe anche costruire una torretta laser. Leggi altro che ricorda la sua posizione o quante "munizioni" rimangono. Potresti usarlo per controllare i tuoi dispositivi Control Appliances From An Arduino: L'inizio delle apparecchiature di controllo domotico da un Arduino: l'inizio dell'automazione domestica L'ultima volta, ti ho mostrato alcuni modi per rendere i tuoi progetti Arduino controllati tramite SiriProxy, OS Gli elementi vocaboli incorporati di X e alcuni script di Automator o persino un chip hardware di riconoscimento vocale dedicato. Io ... Leggi altro, e registra quante volte il tuo apparecchio è stato attivato.

EEPROM è più adatto per cose come le impostazioni o i punteggi più alti. Se si desidera scrivere regolarmente dati complessi, prendere in considerazione uno scudo Ethernet. Dare al progetto Arduino un proprio mini-server Web, con uno scudo Ethernet, dare al proprio progetto Arduino un proprio mini-server Web, con uno scudo Ethernet Qualche tempo fa, vi ho mostrato come per configurare un sistema di controllo internet per il tuo Arduino - ma doveva rimanere connesso a un computer tramite USB per mantenere la connessione Internet .... Leggi di più (con slot SD integrato) o un Raspberry Pi Raspberry Pi: The Tutorial non ufficiale Raspberry Pi: The Unofficial Tutorial Se sei un attuale proprietario di Pi che vuole saperne di più o un potenziale proprietario di questo dispositivo di dimensioni di una carta di credito, questa non è una guida da non perdere. Leggi di più .

EEPROM Close Up

Leggere e scrivere

Ora che la teoria è fuori mano, diamo un'occhiata a come leggere e scrivere alcuni dati! Innanzitutto, includi la libreria (questa viene fornita con l'IDE Arduino):

#include 

Ora scrivi alcuni dati:

 EEPROM.write(0, 12); 

Questo scrive il numero 12 nella posizione EEPROM 0 . Ogni scrittura impiega 3, 3 millisecondi ( ms, 1000ms = 1 secondo). Si noti come non è possibile scrivere lettere ( char ), sono consentiti solo i numeri da zero a 255. Questo è il motivo per cui EEPROM è l'ideale per le impostazioni o i punteggi più alti, ma non così bene per i nomi dei giocatori o le parole. È possibile memorizzare il testo utilizzando questo metodo (è possibile associare ogni lettera dell'alfabeto a un numero), tuttavia è necessario disporre di più posizioni di memoria, una posizione per ogni lettera.

Ecco come leggi questi dati:

 EEPROM.read(0); 

Zero è l'indirizzo che hai scritto in precedenza. Se non hai ancora scritto un indirizzo, restituirà il valore massimo ( 255 ).

Ci sono alcuni metodi leggermente più utili disponibili. Supponi di voler memorizzare una posizione decimale o una stringa:

 EEPROM.put(2, "12.67"); 

Questo scrive i dati in più posizioni - qualcosa che sarebbe facile da scrivere, ma a portata di mano non maneggiando. Dovrai comunque tenere traccia del numero di posizioni in cui è stato scritto, in modo da non sovrascrivere accidentalmente i tuoi dati! Devi usare il metodo get per recuperare di nuovo questi dati:

 float f = 0.00f; EEPROM.get(2, f); 

Il valore di get viene memorizzato nella variabile float f . Si noti come questo è inizializzato con 0.00f come valore. Il f consente al compilatore di sapere che è possibile memorizzare un numero elevato in questa variabile, quindi imposta alcune configurazioni aggiuntive durante la compilazione.

La documentazione EEPROM sul sito Web di Arduino ha molti altri esempi.

Indossare il livellamento

Il livellamento dell'usura è una tecnica utilizzata per ridurre l'usura e aumentare la vita di EEPROM. Se lavori solo su un piccolo progetto, potresti non aver bisogno di preoccuparti di questo.

EEPROM Close Up

La cosa più semplice che puoi fare per preservare la vita di EEPROM è limitare le tue scritture ad una particolare posizione. Puoi farlo leggendo prima l'indirizzo, e se il valore che vuoi scrivere è già presente, non c'è bisogno di scriverlo di nuovo (ricorda, la lettura dei dati non fa male). Ecco come lo faresti:

 int safeWrite(int data, address) { if(EEPROM.read(address) != data) { EEPROM.write(address, data); } } 

Questo è un bel po 'di codice, tuttavia funziona solo con numeri interi! Invece di reinventare la ruota, usa la funzione integrata nella libreria EEPROM di Arduino:

 EEPROM.update(address, val); 

Questo metodo ha esattamente la stessa firma del metodo di scrittura, sebbene possa ridurre drasticamente il numero di scritture necessarie!

Se hai bisogno di scrivere molti dati e sei preoccupato di consumare il silicio, puoi tenere traccia di quante scritture fai, anche se questo usa più dati. Ecco una implementazione approssimativa in pseudocodice:

 var address = 0 var writeCount = 0 if(writeCount>75, 000) writeCount = 0 address += 1 EEPROM.write(address, data) 

Sarà necessario memorizzare l'indirizzo e scrivereCount in EEPROM (e scrivereCount dovrà essere diviso tra le posizioni degli indirizzi). La maggior parte delle volte, questo livello di protezione non sarà necessario. Gli Arduinos sono così economici, quindi potresti trovare più facile acquistare un backup!

Ora dovresti sapere abbastanza per realizzare progetti fantastici. Facci sapere se fai qualcosa di interessante! Riesci a riconoscere tutti i dispositivi nelle immagini? Lasciaci un commento qui sotto!

In this article