Jak používat EEPROM Arduino k ukládání dat mezi napájecími cykly

Jak používat EEPROM Arduino k ukládání dat mezi napájecími cykly

Věděli jste, že Arduino může ukládat data, když je vypnuté? Ne skica uložená ve flash paměti. Mluvím o proměnných datech v EEPROM. Připojte se ke mně, když vám ukážu, jak ji číst a psát a co může udělat pro vaše projekty.





Pokud jste v Arduinu noví, podívejte se na náš průvodce pro začátečníky .





Co je EEPROM?

EEPROM znamená elektricky vymazatelná programovatelná paměť jen pro čtení . Je to typ energeticky nezávislé paměti. Pokud nerozumíte tomu, co to znamená, nedělejte si starosti. Jednoduše ukládá data i při odpojeném napájení (na rozdíl od RAM , která potřebuje elektřinu k uchování jakýchkoli dat).





Paměť EEPROM je integrována do nesčetných procesorů, jako je například pole programovatelné brány (FPGA) používané v Matrix Creator Pi HAT. Všechny Arduino mají k dispozici EEPROM, ale kapacita se liší podle modelu. Podívejte se na náš nákupní průvodce, kde najdete další podrobnosti o každé desce.

Jak to funguje?

EEPROM je elektricky vymazána a naprogramována pomocí Tunelování Fowler-Nordheim . Abyste ji mohli používat, nemusíte znát technické detaily. Základním předpokladem je, že ke změně binárních dat (co je binární) se používá elektřina. Lze jej číst, mazat a přepisovat elektronicky.



Naštěstí Jazyk Arduino umožňuje snadnou změnu dat, a to vše bez znalosti počítačových věd.

Délka života

I když je snadné používat EEPROM v Arduinu, má omezenou životnost. EEPROM je určena ke zpracování 100 000 cyklů čtení/mazání. To znamená, že můžete zapsat a poté 100 000krát vymazat/znovu zapsat data, než se stane EEPROM nestabilní. V realitě, Atmel (Výrobci polovodičů Arduino „Chip“) mohou zvládnout vyšší nebo nižší počet cyklů v závislosti na tolerancích každého procesoru.





Jakmile bylo místo zapsáno a vymazáno příliš mnohokrát, může začít být nespolehlivé. Nemusí vrátit správná data nebo vrátit hodnotu ze sousedního bitu.

Může to znít jako mnoho zápisů, ale může být snadné dosáhnout tohoto limitu, pokud čtete a píšete programově (v smyčka , například). Čtení dat nedegraduje křemík, dělá jen psaní . Bez obav můžete číst data z EEPROM, kolik chcete!





Je důležité si uvědomit, že tento limit platí pro každé místo v paměti. Vaše Arduino může mít v paměti EEPROM k dispozici 1 000 nebo více paměťových míst, takže pokud na jedno místo zapisujete příliš mnohokrát, ovlivní se pouze toto místo, nikoli žádné jiné. Později budu diskutovat vyrovnávání opotřebení , což může snížit opotřebení EEPROM rovnoměrným rozdělením dat - něco, co SSD používají.

K čemu je to užitečné?

EEPROM je neuvěřitelně užitečná pro vaše projekty Arduino. Protože si pamatuje data, i když je odpojeno napájení, můžete uložit stav Arduina. Možná byste mohli postavit laserovou věž, která by si pamatovala svou polohu nebo kolik zbývá „munice“. Můžete jej použít k ovládání vašich spotřebičů a zaznamenávat, kolikrát byl váš spotřebič aktivován.

EEPROM je nejvhodnější pro věci, jako je nastavení nebo vysoké skóre. Pokud chcete pravidelně zapisovat složitá data, zvažte ethernetový štít (s vestavěným slotem SD) nebo Raspberry Pi.

Číst a psát

Nyní, když je teorie mimo, pojďme se podívat na to, jak číst a zapisovat některá data! Nejprve zahrňte knihovnu (dodává se s IDE Arduino):

#include

Nyní napište několik údajů:

EEPROM.write(0, 12);

Toto napíše číslo 12 na místo EEPROM 0 . Každý zápis trvá 3,3 milisekundy ( slečna , 1000 ms = 1 sekunda). Všimněte si, jak nemůžete psát písmena ( char ), povolena jsou pouze čísla od nuly do 255. To je důvod, proč je EEPROM ideální pro nastavení nebo vysoké skóre, ale není tak dobrý pro jména hráčů nebo slova. Pomocí této metody je možné ukládat text (každé písmeno abecedy můžete namapovat na číslo), budete však muset mít více paměťových míst - jedno místo pro každé písmeno.

Data čtete takto:

jak otevřít soubor .dat ve Windows 10
EEPROM.read(0);

Nula je adresa, na kterou jste psali dříve. Pokud jste na adresu dosud nezapsali, vrátí maximální hodnotu ( 255 ).

Existuje několik mírně užitečnějších metod. Řekněme, že chcete uložit desetinné místo nebo řetězec:

EEPROM.put(2,'12.67');

To zapisuje data na více míst - něco, co by bylo snadné napsat sami, ale přesto užitečné. Stále budete muset sledovat, na kolik míst to bylo zapsáno, abyste omylem nepřepsali svá data! Musíte použít dostat metoda k opětovnému načtení těchto dat:

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

Hodnota z get je uložena do floatu F proměnná. Všimněte si, jak je to inicializováno pomocí 0,00 f jako hodnota. The F umožňuje kompilátoru vědět, že do této proměnné budete chtít uložit velké množství, takže během kompilace nastaví některé další konfigurace.

The Dokumentace EEPROM na Web Arduino má spoustu dalších příkladů.

Nivelační vyrovnávání

Vyrovnávání opotřebení je technika používaná ke snížení opotřebení a prodloužení životnosti EEPROM. Pokud pracujete pouze na malém projektu, nemusíte si s tím dělat starosti.

Nejjednodušší věc, kterou můžete udělat pro zachování životnosti paměti EEPROM, je omezit zápisy na konkrétní místo. Můžete to provést tak, že si nejprve přečtete adresu, a pokud je hodnota, kterou chcete zapsat, již přítomna, není třeba ji psát znovu (pamatujte, čtení dat neškodí). Postupujete takto:

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

To je docela jednoduchý kousek kódu, ale funguje pouze pro celá čísla! Místo toho, abyste znovu vynalezli kolo, použijte funkci zabudovanou v knihovně EEPROM Arduino:

EEPROM.update(address, val);

Tato metoda má přesně stejný podpis jako napsat metoda, ačkoli to může drasticky snížit počet potřebných zápisů!

Pokud potřebujete zapsat hodně dat a máte obavy z opotřebení křemíku, můžete sledovat, kolik zápisů děláte, i když to využívá více dat. Zde je hrubá implementace v pseudo kód :

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

Budete muset uložit adresu a writeCount do EEPROM (a writeCount bude třeba rozdělit mezi umístění adres). Většinu času nebude tato úroveň ochrany nutná. Arduino je také levné, takže pro vás může být jednodušší koupit zálohu!

Nyní byste měli vědět dost na to, abyste mohli dělat úžasné projekty. Dejte nám vědět, pokud vytvoříte něco skvělého! Poznáte všechna zařízení na obrázcích? Zanechte nám komentář níže!

Podíl Podíl tweet E-mailem 5 tipů, jak dobít své stroje VirtualBox Linux

Jste unaveni špatným výkonem, který nabízejí virtuální stroje? Zde je to, co byste měli udělat, abyste zvýšili výkon svého VirtualBoxu.

Číst dále
Související témata
  • DIY
  • Arduino
  • Elektronika
O autorovi Joe Coburn(136 publikovaných článků)

Joe je absolventem informatiky na University of Lincoln, UK. Je profesionálním vývojářem softwaru, a když zrovna neletí drony nebo nepíše hudbu, často ho lze zastihnout při fotografování nebo produkci videí.

Více od Joe Coburn

Přihlaste se k odběru našeho zpravodaje

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné elektronické knihy a exkluzivní nabídky!

Kliknutím sem se přihlásíte k odběru
Kategorie Diy