Hoe gebruik je Arduino EEPROM om data te bewaren tussen powercycles

Hoe gebruik je Arduino EEPROM om data te bewaren tussen powercycles / DIY

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 verwijderbaar programmeerbaar leesbaar 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, wat elektriciteit nodig heeft om gegevens te bewaren).

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 behulp van 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.

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 is Atmel (de fabrikant van de Arduino “spaander”) halfgeleiders kunnen een hoger of lager aantal cycli aan, afhankelijk van de toleranties van elke processor.

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 (in a lus, bijvoorbeeld). Het lezen van gegevens verslechtert het silicium niet, alleen schrijven doet. 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 bespreken slijtage nivellering, wat EEPROM-slijtage kan verminderen door gelijkmatig gegevens te verspreiden - iets dat SSD's De resterende levensduur van uw SSD schatten Hoe u de resterende levensduur van uw SSD kunt schatten Alle SSD's hebben een beperkte levensduur vanwege schrijfcycli (hoewel deze levensduur veel langer is dan u zou kunnen 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 “ammunitie” is over. 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 gegevens wilt schrijven, overweeg dan misschien een ethernet-schild 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 ​​internetbesturingssysteem 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-sleuf) of een Raspberry Pi Raspberry Pi: de onofficiële tutorial Raspberry Pi: The Unofficial Tutorial Of je nu een pi-eigenaar bent die meer wil leren of een potentiële eigenaar van dit apparaat met creditcardformaat, dit is geen gids die je wilt missen. Lees verder .

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 (Mevrouw, 1000ms = 1 seconde). Merk op hoe je geen brieven kunt schrijven (verkolen) zijn alleen de cijfers van nul tot 255 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, wordt de maximumwaarde geretourneerd (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! Je moet de gebruiken krijgen methode om deze gegevens opnieuw op te halen:

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

De waarde van get wordt opgeslagen in de float f variabel. 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 in tijdens de compilatie.

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.

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, is het niet nodig om het opnieuw te schrijven (onthoud dat het lezen van gegevens geen kwaad kan). Zo zou je dat doen:

int safeWrite (int data, address) if (EEPROM.read (address)! = data) EEPROM.write (adres, gegevens); 

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 (adres, val);

Deze methode heeft exact dezelfde signatuur als de schrijven methode, 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 adres = 0 var writeCount = 0 if (writeCount> 75.000) writeCount = 0 adres + = 1 EEPROM.write (adres, gegevens)

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 makkelijker om een ​​back-up te kopen!

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

Ontdek meer over: Arduino, elektronica.