Com utilitzar Arduino EEPROM per desar dades entre cicles de potència

Com utilitzar Arduino EEPROM per desar dades entre cicles de potència

Sabíeu que Arduino pot emmagatzemar dades quan està apagat? No l’esbós emmagatzemat a la memòria flash. Parlo de dades variables a l’EEPROM. Uniu-vos a mi mentre us mostro com llegir-lo i escriure-hi, i què pot fer per als vostres projectes.





Si no coneixeu Arduino, comproveu el nostre guia per a principiants .





Què és EEPROM?

EEPROM significa memòria de només lectura programable esborrable elèctricament . És un tipus de memòria no volàtil. No us preocupeu si no enteneu què significa això. Simplement emmagatzema dades fins i tot amb l’energia eliminada (a diferència de RAM , que necessita electricitat per conservar qualsevol dada).





EEPROM està integrada en una infinitat de processadors, com ara la matriu de portes programable de camp (FPGA) que s’utilitza al Matrix Creator Pi HAT. Tots els Arduinos tenen EEPROM disponible, però la capacitat varia segons el model. Consulteu la nostra guia de compra per obtenir més informació sobre cada tauler.

Com funciona?

EEPROM s'esborra elèctricament i es programa mitjançant Túnel Fowler-Nordheim . No cal conèixer els detalls tècnics per poder utilitzar-lo. La premissa bàsica és que l’electricitat s’utilitza per canviar les dades binàries (el que és binari). Es pot llegir, esborrar i tornar a escriure electrònicament.



Afortunadament, el Llenguatge Arduino facilita el canvi de dades sense necessitat de llicenciatura en informàtica.

Esperança de vida

Tot i que és fàcil d’utilitzar EEPROM a l’Arduino, té una vida limitada. EEPROM s’especifica per gestionar 100.000 cicles de lectura / esborrat. Això significa que podeu escriure i després esborrar / tornar a escriure dades 100.000 vegades abans que l'EEPROM sigui inestable. En realitat, Atmel (Els fabricants del 'xip' Arduino) poden gestionar un nombre superior o inferior de cicles, depenent de les toleràncies de cada processador.





Un cop escrita i esborrada una ubicació massa vegades, pot començar a ser poc fiable. És possible que no retorni les dades correctes o que retorni el valor d’un bit veí.

Pot semblar un munt d’escriptures, però pot ser fàcil assolir aquest límit si es llegeix i s’escriu per programació (en un fitxer bucle , per exemple). La lectura de dades no degrada el silici, només ho fa l’escriptura . Podeu llegir les dades d’EEPROM tant com vulgueu sense por.





És important tenir en compte que aquest límit s'aplica a cada ubicació de memòria. És possible que el vostre Arduino tingui 1.000 o més ubicacions de memòria disponibles a EEPROM, de manera que si escriviu massa vegades en una ubicació, només afectarà la ubicació i no cap de les altres. Més endavant parlaré anivellament de desgast , que pot reduir el desgast de l'EEPROM distribuint les dades de manera uniforme, cosa que fan servir els discs SSD.

Per a què serveix?

EEPROM és increïblement útil per als vostres projectes Arduino. Com que recorda les dades fins i tot quan se suprimeix l'alimentació, podeu emmagatzemar l'estat de l'Arduino. Potser podríeu construir una torreta làser que recordi la seva posició o la quantitat de 'munició' que queda. Podeu utilitzar-lo per controlar els aparells i registrar quantes vegades s'ha activat l'aparell.

EEPROM és la més adequada per a configuracions o puntuacions altes. Si voleu escriure regularment dades complexes, podeu considerar un blindatge Ethernet (amb ranura SD integrada) o un Raspberry Pi.

Llegeix i escriu

Ara que la teoria ha quedat fora del camí, vegem com llegir i escriure algunes dades. En primer lloc, incloeu la biblioteca (ve amb l'IDE Arduino):

#include

Ara escriviu algunes dades:

EEPROM.write(0, 12);

Això escriu el número 12 a la ubicació EEPROM 0 . Cada escriptura triga 3,3 mil·lisegons ( Senyora , 1000ms = 1 segon). Fixeu-vos en com no podeu escriure cartes ( char ), només es permeten els números de zero a 255. Per això, EEPROM és ideal per a configuracions o puntuacions altes, però no tan bona per als noms o paraules dels jugadors. És possible emmagatzemar text mitjançant aquest mètode (podeu assignar cada lletra de l'alfabet a un número), però haureu de tenir diverses ubicacions de memòria, una ubicació per a cada lletra.

A continuació s’explica com llegiu aquestes dades:

com extreure imatge de pdf
EEPROM.read(0);

Zero és l'adreça a la qual heu escrit anteriorment. Si abans no heu escrit cap adreça, us retornarà el valor màxim ( 255 ).

Hi ha alguns mètodes una mica més útils disponibles. Digueu que voleu emmagatzemar una cadena o un decimal.

EEPROM.put(2,'12.67');

Això escriu les dades a diverses ubicacions, cosa que seria fàcil d’escriure vosaltres mateixos, però útil, però. Tot i així, haureu de fer un seguiment de quantes ubicacions s’han escrit, de manera que no sobreescriviu les vostres dades per error. Heu d'utilitzar el fitxer aconseguir mètode per recuperar aquestes dades de nou:

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

El valor de get s’emmagatzema al float f variable. Fixeu-vos en com s’inicialitza això 0,00f com a valor. El f fa saber al compilador que és possible que vulgueu emmagatzemar un gran nombre en aquesta variable, de manera que estableix algunes configuracions addicionals durant la compilació.

El Documentació EEPROM al Lloc web Arduino té molts més exemples.

Anivellament contra el desgast

L’anivellament contra el desgast és una tècnica que s’utilitza per reduir el desgast i augmentar la vida útil de l’EEPROM. Si només esteu treballant en un petit projecte, potser no us haureu de preocupar d’això.

El més senzill que podeu fer per preservar la vida de l'EEPROM és limitar les vostres escriptures a un lloc concret. Podeu fer-ho llegint primer l'adreça i, si el valor que voleu escriure ja és present, no cal tornar-lo a escriure (recordeu, la lectura de dades no fa mal). A continuació s'explica com ho faríeu:

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

Això és una mica senzill de codi, però només funciona per a enters. En lloc de reinventar la roda, utilitzeu la funció integrada a la biblioteca Arduino EEPROM:

EEPROM.update(address, val);

Aquest mètode té exactament la mateixa signatura que el fitxer escriure mètode, tot i que pot reduir dràsticament el nombre d’escriptures necessàries.

Si necessiteu escriure moltes dades i us preocupa desgastar el silici, podeu fer un seguiment de quantes escriptures feu, tot i que utilitza més dades. Aquí hi ha una implementació aproximada a pseudocodi :

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

Haureu d’emmagatzemar adreça i writeCount a EEPROM (i writeCount s’haurà de dividir entre ubicacions d’adreça). La majoria de les vegades, aquest nivell de protecció no serà necessari. Els arduinos també són tan econòmics, de manera que és possible comprar una còpia de seguretat més fàcilment.

Ara hauríeu de saber prou per fer alguns projectes impressionants. Feu-nos-ho saber si feu alguna cosa divertida. Podeu reconèixer tots els dispositius de les imatges? Deixa’ns un comentari a continuació!

Compartir Compartir Tweet Correu electrònic 5 consells per sobrecarregar les vostres màquines VirtualBox Linux

Cansat del baix rendiment que ofereixen les màquines virtuals? Això és el que heu de fer per millorar el rendiment del VirtualBox.

Llegiu a continuació
Temes relacionats
  • Bricolatge
  • Arduino
  • Electrònica
Sobre l'autor Joe Coburn(136 articles publicats)

Joe és llicenciat en Informàtica per la Universitat de Lincoln, Regne Unit. És un desenvolupador de programari professional i, quan no fa drons voladors ni escriu música, sovint se’l pot trobar fent fotos o produint vídeos.

Més de Joe Coburn

Subscriu-te al nostre butlletí

Uniu-vos al nostre butlletí per obtenir consells tècnics, ressenyes, llibres electrònics gratuïts i ofertes exclusives.

Feu clic aquí per subscriure-us