Как да използвате Arduino EEPROM за запазване на данни между захранващи цикли

Как да използвате Arduino EEPROM за запазване на данни между захранващи цикли

Знаете ли, че Arduino може да съхранява данни, когато е изключен? Не скицата, съхранявана във флаш паметта. Говоря за променливи данни в EEPROM. Присъединете се към мен, докато ви показвам как да четете и пишете и какво може да направи за вашите проекти.





Ако сте нов в Arduino, не забравяйте да разгледате нашия ръководство за начинаещи .





Какво е EEPROM?

EEPROM означава електрически изтриваема програмируема памет само за четене . Това е вид енергонезависима памет. Не се притеснявайте, ако не разбирате какво означава това. Той просто съхранява данни дори при изключено захранване (за разлика от RAM , който се нуждае от електричество, за да запази всякакви данни).





EEPROM е вграден в безброй процесори, като полево програмируемия масив на порта (FPGA), използван в Matrix Creator Pi HAT. Всички Arduinos имат наличен EEPROM, но капацитетът варира според модела. Не забравяйте да разгледате нашето ръководство за покупки за повече подробности за всяка дъска.

Как работи?

EEPROM се изтрива електрически и се програмира с помощта Тунелиране на Fowler-Nordheim . Не е нужно да знаете техническите подробности, за да можете да го използвате. Основната предпоставка е, че електричеството се използва за промяна на двоичните данни (какво е двоично). Може да се чете, изтрива и преписва по електронен път.



За щастие, Език Arduino улеснява промяната на данните, без да се нуждаете от диплома по компютърни науки.

Продължителност на живота

Въпреки че е лесно да използвате EEPROM в Arduino, той има ограничен живот. EEPROM е определен за обработка на 100 000 цикъла на четене/изтриване. Това означава, че можете да пишете и след това да изтривате/презаписвате данни 100 000 пъти, преди EEPROM да стане нестабилен. В действителност, Атмел (производителите на Arduino 'Chip') полупроводници могат да обработват по -голям или по -малък брой цикли, в зависимост от допустимите отклонения на всеки процесор.





След като местоположението е написано и изтрито твърде много пъти, то може да започне да става ненадеждно. Може да не върне правилните данни или да върне стойността от съседен бит.

Това може да звучи като много писане, но може да бъде лесно да се достигне тази граница, ако четете и пишете програмно (в цикъл , например). Четенето на данни не разгражда силиция, прави само писането . Можете да четете данни от EEPROM колкото искате без страх!





Важно е да се отбележи, че това ограничение се прилага за всяко място в паметта. Вашият Arduino може да има налични 1000 или повече места за памет в EEPROM, така че ако пишете твърде много пъти на едно място, това е засегнато само това местоположение, а не някое от другите. По -късно ще обсъждам изравняване на износване , което може да намали износването на EEPROM, като разпределя данните равномерно - нещо, което SSD дисковете използват.

За какво е полезно?

EEPROM е изключително полезен за вашите проекти на Arduino. Тъй като той запомня данни, дори когато захранването е изключено, можете да съхранявате състоянието на Arduino. Може би бихте могли да изградите лазерна кула, която да помни позицията си или колко „амуниции“ са останали. Можете да го използвате, за да контролирате уредите си и да регистрирате колко пъти е бил активиран.

EEPROM е най-подходящ за неща като настройки или високи резултати. Ако искате редовно да пишете сложни данни, може би помислете за Ethernet щит (с вграден SD слот) или Raspberry Pi.

Чети и пиши

Сега, когато теорията е на път, нека да разгледаме как да четем и записваме някои данни! Първо, включете библиотеката (тя идва с Arduino IDE):

#include

Сега напишете някои данни:

EEPROM.write(0, 12);

Това записва номера 12 до местоположението на EEPROM 0 . Всяко писане отнема 3,3 милисекунди ( Госпожица , 1000ms = 1 секунда). Забележете как не можете да пишете букви ( char ), са разрешени само числата от нула до 255. Ето защо EEPROM е идеален за настройки или високи резултати, но не е толкова добър за имена или думи на играчи. Възможно е да съхранявате текст, използвайки този метод (можете да картографирате всяка буква от азбуката до число), но ще трябва да имате няколко места в паметта - по едно място за всяка буква.

Ето как четете тези данни:

рутер в мазето слаб сигнал горе
EEPROM.read(0);

Нула е адресът, на който сте писали по -рано. Ако преди не сте писали на адрес, той ще върне максималната стойност ( 255 ).

Има някои малко по -полезни методи. Кажете, че искате да съхранявате десетична запетая или низ:

EEPROM.put(2,'12.67');

Това записва данните на множество места - нещо, което би било лесно да напишете сами, но все пак е удобно. Все пак ще трябва да следите на колко места е написано това, за да не презапишете случайно данните си! Трябва да използвате вземете метод за извличане на тези данни отново:

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

Стойността от get се съхранява в поплавъка е променлива. Забележете как това се инициализира с 0.00f като стойност. The е позволява на компилатора да знае, че може да искате да съхранявате голям брой в тази променлива, така че той настройва някои допълнителни конфигурации по време на компилацията.

The Документация на EEPROM на Уебсайт на Arduino има още много примери.

Изравняване на износване

Изравняването на износване е техника, използвана за намаляване на износването и увеличаване на живота на EEPROM. Ако работите само по малък проект, може да не се притеснявате за това.

Най -простото нещо, което можете да направите, за да запазите живота на EEPROM, е да ограничите записите си до определено място. Можете да направите това, като първо прочетете адреса и ако стойността, която искате да напишете, вече присъства, няма нужда да я пишете отново (не забравяйте, четенето на данни не вреди). Ето как бихте направили това:

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

Това е доста прост код, но работи само за цели числа! Вместо да преоткривате колелото, използвайте функцията, вградена в библиотеката Arduino EEPROM:

EEPROM.update(address, val);

Този метод има абсолютно същия подпис като пиши метод, въпреки че може драстично да намали броя на необходимите записи!

Ако трябва да напишете много данни и сте загрижени за износването на силиция, можете да следите колко записи пишете, въпреки че това използва повече данни. Ето грубо изпълнение в псевдокод :

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

Ще трябва да съхранявате адрес и writeCount в EEPROM (и writeCount ще трябва да бъде разделен на различни адреси). През по -голямата част от времето това ниво на защита няма да е необходимо. Arduinos също са толкова евтини, така че може да ви е по -лесно да закупите резервно копие!

Сега трябва да знаете достатъчно, за да направите някои страхотни проекти. Кажете ни, ако направите нещо готино! Можете ли да разпознаете всички устройства на снимките? Оставете ни коментар по -долу!

Дял Дял Туит електронна поща 5 съвета за зареждане на вашите VirtualBox Linux машини

Уморени ли сте от лошото представяне на виртуалните машини? Ето какво трябва да направите, за да увеличите производителността на VirtualBox.

Прочетете Напред
Свързани теми
  • Направи си сам
  • Arduino
  • Електроника
За автора Джо Кобърн(136 статии са публикувани)

Джо е завършил компютърни науки от университета в Линкълн, Великобритания. Той е професионален разработчик на софтуер и когато не лети с дронове или пише музика, често може да бъде намерен да прави снимки или да произвежда видеоклипове.

Още от Джо Кобърн

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, рецензии, безплатни електронни книги и изключителни оферти!

Щракнете тук, за да се абонирате