Hoe gebruik je Arduino EEPROM om data te bewaren tussen powercycles

Wist je dat de Arduino gegevens kan opslaan wanneer deze is uitgeschakeld? Ik heb het over de EEPROM, dus ga met me mee als ik je laat zien hoe je het moet lezen en schrijven.

Wist je dat de Arduino gegevens kan opslaan wanneer deze is uitgeschakeld?  Ik heb het over de EEPROM, dus ga met me mee als ik je laat zien hoe je het moet lezen en schrijven.
Advertentie

Wist je dat de Arduino gegevens kan opslaan wanneer deze is uitgeschakeld? Niet de schets die is opgeslagen in het flash-geheugen. Ik heb het over variabele gegevens in de EEPROM. Ga met me mee als ik je laat zien hoe je het moet lezen en schrijven en wat het kan doen voor je projecten.

Als je Arduino nog niet kent, lees dan onze beginnershandleiding Aan de slag met Arduino: een beginnershandleiding Aan de slag met Arduino: een beginnersgids Arduino is een open-sourceprotocol voor prototyping van elektronica op basis van flexibele, gebruiksvriendelijke hardware en software. Het is bedoeld voor kunstenaars, ontwerpers, hobbyisten en iedereen die geïnteresseerd is in het maken van interactieve objecten of omgevingen. Lees verder .

Wat is EEPROM?

EEPROM staat voor elektrisch wisbaar programmeerbaar alleen-lezen geheugen . Het is een type niet-vluchtig geheugen. Maak je geen zorgen als je niet begrijpt wat dat betekent. Het slaat gewoon gegevens op, zelfs als de stroom is verwijderd (in tegenstelling tot RAM A Quick & Dirty Guide to RAM: wat u moet weten Een snelle en vuile gids voor RAM: wat u moet weten RAM is een cruciaal onderdeel van elke computer, maar het kan wees verwarrend om te begrijpen of je geen technische goeroe bent. In dit bericht geven we het overzicht in gemakkelijk te begrijpen termen Lees meer, dat elektriciteit nodig heeft om gegevens te bewaren).

EEPROM voorbeeld shot

EEPROM is ingebouwd in een groot aantal processoren, zoals de veldprogrammeerbare poortarray (FPGA) die wordt gebruikt in de Matrix Creator Matrix Creator voor Raspberry Pi Review Matrix Creator voor Raspberry Pi Review De Matrix Creator is een Zwitsers zakmes voor uw Pi, met 15 sensoren, een reeks communicatieprotocollen, een reeks RGB-LED's, een microfoonarray en meer! Lees meer Pi HAT. Alle Arduino's hebben EEPROM beschikbaar, maar de capaciteit verschilt per model. Zorg ervoor dat u onze koopgids bekijkt Arduino Koopwijzer: welk bord moet u kopen? Arduino Koopwijzer: welk bord moet je kopen? Er zijn zoveel verschillende soorten Arduino-boards, dat je zou worden vergeven dat je in de war was. Welke moet je kopen voor je project? Laat ons helpen, met deze Arduino koopgids! Lees meer voor meer informatie over elk bord.

Hoe werkt het?

EEPROM wordt elektrisch gewist en geprogrammeerd met Fowler-Nordheim-tunneling . U hoeft de technische details niet te kennen om het te kunnen gebruiken. Het uitgangspunt is dat elektriciteit wordt gebruikt om de binaire data te veranderen (wat is binary What Is Binary? [Technology Explained] What Is Binary? [Technology Explained] Aangezien binary zo absoluut fundamenteel is voor het bestaan ​​van computers, lijkt het vreemd dat we hebben het onderwerp nooit eerder aangepakt - dus vandaag had ik gedacht dat ik een kort overzicht zou geven van wat binaire ... Lees meer). Het kan elektronisch worden gelezen, gewist en herschreven.

Gelukkig maakt de Arduino-taal het eenvoudig om gegevens te wijzigen, allemaal zonder dat je een graad in computerwetenschappen nodig hebt.

EEPROM Close Up

Levensverwachting

Hoewel het gemakkelijk is om EEPROM te gebruiken in de Arduino, heeft het een beperkte levensduur. EEPROM is gespecificeerd voor 100.000 lees- / wiscycli. Dit betekent dat u 100.000 keer kunt schrijven en vervolgens gegevens kunt wissen / opnieuw kunt schrijven voordat de EEPROM onstabiel wordt. In werkelijkheid kan Atmel (de fabrikant van de Arduino "Chip") halfgeleiders een groter of kleiner aantal cycli aan, afhankelijk van de toleranties van elke processor.

EEPROM Close Up

Zodra een locatie te vaak is weggeschreven en gewist, kan deze onbetrouwbaar worden. Mogelijk worden niet de juiste gegevens geretourneerd of wordt de waarde van een naburig bit geretourneerd.

Dit klinkt misschien als een hoop schrijfwerk, maar het kan gemakkelijk zijn om deze limiet te bereiken als je programmatisch leest en schrijft (bijvoorbeeld in een lus ). Lezen van gegevens tast het silicium niet aan, alleen schrijven doet dat . Je kunt gegevens lezen van EEPROM zo veel als je wilt zonder angst!

Het is belangrijk op te merken dat deze limiet van toepassing is op elke geheugenlocatie. Uw Arduino heeft mogelijk 1000 of meer geheugenlocaties beschikbaar in EEPROM, dus als u te vaak naar één locatie schrijft, heeft alleen die locatie invloed op u en geen enkele andere locatie. Later zal ik het hebben over draagnivellering, wat EEPROM-slijtage kan verminderen door gelijkmatig gegevens te verspreiden - iets dat SSD's De resterende levensduur van uw SSD schatten Hoe de resterende levensduur van uw SSD te schatten Alle SSD's hebben een beperkte levensduur door schrijven cycli (hoewel deze levensduur veel langer is dan je zou denken). U kunt als volgt inschatten hoe dicht u bij het einde bent. Meer lezen maakt gebruik van.

Waar is het nuttig voor?

EEPROM is ongelooflijk handig voor uw Arduino-projecten. Omdat het gegevens onthoudt, zelfs als de stroom is verwijderd, kunt u de status van de Arduino opslaan. Misschien kun je een lasertoren bouwen Pew Pew! Hoe een laser torentje te bouwen met een Arduino Pew Pew! Hoe maak je een laser torentje met een Arduino te bouwen Ben je verveeld? Kan net zo goed een lasertoren bouwen. Lees meer dat zijn positie onthoudt of hoeveel "munitie" overblijft. Je zou het kunnen gebruiken om je apparaten te besturen Besturingsapparatuur van een Arduino: de start van domotica Besturingsapparatuur van een Arduino: de start van domotica De laatste keer heb ik je een paar manieren laten zien om je Arduino-projecten spraakgestuurd te maken via SiriProxy, OS X's ingebouwde spraakbare items en enkele Automator-scripting, of zelfs een speciale hardware-chip voor spraakherkenning. Ik ... Lees meer en registreer hoe vaak uw apparaat is geactiveerd.

EEPROM is het meest geschikt voor zaken als instellingen of hoge scores. Als je regelmatig complexe data wilt schrijven, overweeg dan misschien een ethernet shield Geef je Arduino-project zijn eigen mini-webserver, met een Ethernet-schild Geef je Arduino-project zijn eigen mini-webserver, met een Ethernet-schild Een tijdje geleden heb ik je laten zien hoe om een ​​internetbedieningssysteem voor je Arduino in te stellen - maar het moest verbonden blijven met een computer via USB om de internetverbinding te behouden .... Lees Meer (met ingebouwde SD slot) of een Raspberry Pi Raspberry Pi: The Niet-officiële zelfstudie Raspberry Pi: de onofficiële zelfstudie Of je nu een pi-eigenaar bent die meer wil leren of een potentiële eigenaar van dit apparaat voor creditcardformaat, dit is geen gids die je wilt missen. Lees verder .

EEPROM Close Up

Lezen en schrijven

Nu de theorie uit de toon valt, laten we eens kijken hoe we wat gegevens kunnen lezen en schrijven! Neem eerst de bibliotheek op (deze komt met de Arduino IDE):

#include 

Schrijf nu wat gegevens:

 EEPROM.write(0, 12); 

Dit schrijft het nummer 12 naar EEPROM locatie 0 . Elke schrijf duurt 3, 3 milliseconden ( ms, 1000ms = 1 seconde). Merk op hoe je geen letters ( char ) kunt schrijven, alleen de getallen van nul tot 255 zijn toegestaan. Dit is de reden waarom EEPROM ideaal is voor instellingen of hoge scores, maar niet zo goed voor spelersnamen of woorden. Het is mogelijk om tekst op te slaan met behulp van deze methode (u kunt elke letter van het alfabet toewijzen aan een getal), maar u moet meerdere geheugenlocaties hebben - één locatie voor elke letter.

Zo lees je die gegevens:

 EEPROM.read(0); 

Nul is het adres waar je eerder naartoe hebt geschreven. Als u nog niet eerder naar een adres hebt geschreven, retourneert het de maximumwaarde ( 255 ).

Er zijn een paar iets nuttiger methoden beschikbaar. Stel dat u een decimale plaats of tekenreeks wilt opslaan:

 EEPROM.put(2, "12.67"); 

Dit schrijft de gegevens naar meerdere locaties - iets dat gemakkelijk is om zelf te schrijven, maar niettemin handig. U moet nog steeds bijhouden hoeveel locaties dit heeft geschreven, zodat u niet per ongeluk uw gegevens overschrijft! U moet de methode get gebruiken om deze gegevens opnieuw op te halen:

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

De waarde van get wordt opgeslagen in de variabele float f . Merk op hoe dit wordt geïnitialiseerd met 0.00f als de waarde. De f laat de compiler weten dat je misschien een groot aantal in deze variabele wilt opslaan, dus het stelt een aantal extra configuraties tijdens de compilatie in.

De EEPROM-documentatie op de Arduino-website heeft nog veel meer voorbeelden.

Wear Leveling

Slijtage nivellering is een techniek die wordt gebruikt om slijtage te verminderen en de levensduur van EEPROM te verlengen. Als u alleen aan een klein project werkt, hoeft u zich hier misschien geen zorgen over te maken.

EEPROM Close Up

Het eenvoudigste wat u kunt doen om de EEPROM-levensduur te behouden, is uw schrijfacties beperken tot een bepaalde locatie. U kunt dit doen door eerst het adres te lezen en als de waarde die u wilt schrijven al aanwezig is, hoeft u deze niet opnieuw te schrijven (onthoud dat het lezen van gegevens geen kwaad kan). Hier is hoe je dat zou doen:

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

Dat is nogal een simpel stukje code, maar het werkt alleen voor gehele getallen! In plaats van het wiel opnieuw uit te vinden, gebruikt u de functie die is ingebouwd in de Arduino EEPROM-bibliotheek:

 EEPROM.update(address, val); 

Deze methode heeft exact dezelfde signatuur als de schrijfmethode, hoewel het aantal benodigde schrijfopdrachten drastisch kan verminderen!

Als u veel gegevens moet schrijven en bezorgd bent over het verslijten van het silicium, kunt u bijhouden hoeveel schrijft u doet, hoewel dit meer gegevens gebruikt. Hier is een ruwe implementatie in pseudocode:

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

U moet adres en writeCount opslaan in EEPROM (en writeCount moet over adreslocaties worden verdeeld). Het merendeel van de tijd zal dit beschermingsniveau niet nodig zijn. Arduinos zijn ook zo goedkoop, dus misschien vind je het gemakkelijker om een ​​back-up te kopen!

Je zou nu genoeg moeten weten om geweldige projecten te maken. Laat het ons weten als je iets leuk maakt! Kun je alle apparaten op de foto's herkennen? Laat hieronder een reactie achter!

In this article