Како користити Ардуино ЕЕПРОМ за спремање података између циклуса напајања

Како користити Ардуино ЕЕПРОМ за спремање података између циклуса напајања

Да ли сте знали да Ардуино може да складишти податке када је искључен? Не скица сачувана у флеш меморији. Говорим о променљивим подацима у ЕЕПРОМ -у. Придружите ми се док вам показујем како да читате и пишете и шта то може учинити за ваше пројекте.





Ако сте нови у Ардуину, обавезно погледајте наше водич за почетнике .





Шта је ЕЕПРОМ?

ЕЕПРОМ означава електрично избрисива програмабилна меморија само за читање . То је врста сталне меморије. Не брините ако не разумете шта то значи. Једноставно складишти податке чак и када је напајање искључено (за разлику од РАМ , којој је потребна електрична енергија да задржи било које податке).





ЕЕПРОМ је уграђен у безброј процесора, као што је поље програмабилних врата (ФПГА) које се користи у Матрик Цреатор Пи ХАТ-у. Сви Ардуини имају на располагању ЕЕПРОМ, али капацитет се разликује по моделу. Обавезно погледајте наш водич за куповину за више детаља о свакој плочи.

Како то функционише?

ЕЕПРОМ се електрично брише и програмира помоћу Тунелирање Фовлер-Нордхеим . Не морате знати техничке детаље да бисте могли да га користите. Основна премиса је да се електрична енергија користи за промену бинарних података (шта је бинарно). Може се читати, брисати и поново писати електронским путем.



На срећу, Ардуино језик олакшава промену података, све без потребе за дипломом из рачунарства.

Очекивано трајање живота

Иако је лако користити ЕЕПРОМ у Ардуину, он има ограничен век трајања. ЕЕПРОМ је специфициран за руковање 100.000 циклуса читања/брисања. То значи да можете уписати, а затим избрисати/поново записати податке 100.000 пута пре него што ЕЕПРОМ постане нестабилан. У стварности, Атмел (произвођачи Ардуино 'Цхип') полупроводника могу да поднесу већи или мањи број циклуса, у зависности од толеранција сваког процесора.





Након што је локација написана и избрисана превише пута, може почети да постаје непоуздана. Можда неће вратити тачне податке, нити вредност из суседног бита.

Ово може звучати као много писања, али може бити лако доћи до ове границе ако читате и пишете програмски (у петља , на пример). Читање података не разграђује силицијум, само писање ради . Без страха можете читати податке са ЕЕПРОМ -а колико год желите!





Важно је напоменути да се ово ограничење односи на сваку меморијску локацију. Ваш Ардуино може имати 1.000 или више меморијских локација доступних у ЕЕПРОМ -у, па ако пишете превише пута на једну локацију, то ће утицати само на ту локацију, а не на било коју другу. Касније ћу разговарати изравнавање хабања , који може смањити трошење ЕЕПРОМ -а равномерном дистрибуцијом података - нешто што ССД дискови користе.

За шта је то корисно?

ЕЕПРОМ је невероватно користан за ваше Ардуино пројекте. Будући да памти податке чак и кад је напајање искључено, могли бисте похранити стање Ардуина. Можда бисте могли да направите ласерску куполу која памти њен положај или колико је „муниције“ преостало. Помоћу њега можете управљати својим апаратима и евидентирати колико је пута ваш уређај био активиран.

ЕЕПРОМ је најприкладнији за ствари попут поставки или високих резултата. Ако желите редовно писати сложене податке, размислите о Етхернет штиту (са уграђеним СД слотом) или Распберри Пи-у.

Читају и пишу

Сада када је теорија на путу, погледајмо како читати и писати неке податке! Прво укључите библиотеку (долази са Ардуино ИДЕ -ом):

#include

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

EEPROM.write(0, 12);

Ово уписује број 12 на локацију ЕЕПРОМ -а 0 . Свако писање траје 3,3 милисекунде ( Госпођа , 1000мс = 1 секунда). Обратите пажњу на то како не можете писати писма ( цхар ), дозвољени су само бројеви од нуле до 255. Због тога је ЕЕПРОМ идеалан за поставке или високе резултате, али није тако добар за имена играча или речи. Ову методу је могуће складиштити (можете пресликати свако слово абецеде у број), међутим мораћете да имате више меморијских локација - по једно место за свако слово.

Ево како читате те податке:

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

Нула је адреса на коју сте претходно писали. Ако раније нисте писали на адресу, она ће вратити максималну вредност ( 255 ).

Доступне су неке мало корисније методе. Рецимо да желите да сачувате децимално место или низ:

EEPROM.put(2,'12.67');

Ово записује податке на више локација - нешто што би било лако написати сами, али свеједно згодно. И даље ћете морати да пратите колико је локација писало да не бисте случајно преписали своје податке! Морате да користите добити метод за поновно преузимање ових података:

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

Вредност из гет се складишти у флоат ф променљива. Обратите пажњу на то како се ово иницијализује помоћу 0.00ф као вредност. Тхе ф омогућава преводиоцу да зна да бисте можда желели да ускладиштите велики број у овој променљивој, па поставља неке додатне конфигурације током компилације.

Тхе ЕЕПРОМ документација на Ардуино веб локација има још много примера.

Изравнавање хабања

Нивелација хабања је техника која се користи за смањење хабања и продужење века трајања ЕЕПРОМ -а. Ако радите само на малом пројекту, можда нећете морати да бринете о овоме.

Најједноставнија ствар коју можете учинити да сачувате живот ЕЕПРОМ -а је да ограничите своје писање на одређену локацију. То можете учинити тако што ћете прво прочитати адресу, а ако је вредност коју желите да упишете већ присутна, нема потребе да је поново уписујете (запамтите, читање података не штети). Ево како бисте то урадили:

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

То је прилично једноставан код, међутим ради само за целе бројеве! Уместо поновног проналаска точка, користите функцију уграђену у Ардуино ЕЕПРОМ библиотеку:

EEPROM.update(address, val);

Ова метода има потпуно исти потпис као и писати метода, иако може драстично смањити број потребних записа!

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

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

Морате да сачувате адресу и вритеЦоунт у ЕЕПРОМ -у (а вритеЦоунт ће морати да се подели по локацијама адреса). Већину времена овај ниво заштите неће бити неопходан. Ардуино су такође јефтини, па ће вам можда бити лакше да купите резервну копију!

Сада бисте требали знати довољно за стварање сјајних пројеката. Јавите нам ако направите нешто супер! Можете ли препознати све уређаје на сликама? Оставите нам коментар испод!

Објави Објави Твеет Емаил 5 савета за суперпуњење ваших ВиртуалБок Линук машина

Уморни сте од лоших перформанси које нуде виртуелне машине? Ево шта треба да урадите да бисте побољшали перформансе ВиртуалБок -а.

Прочитајте следеће
Повезане теме
  • ДИИ
  • Ардуино
  • Електроника
О аутору Јое Цобурн(136 објављених чланака)

Јое је дипломирао рачунарство на Универзитету Линцолн, УК. Он је професионални програмер софтвера и када не лети беспилотним летелицама или не пише музику, често га се може затећи како фотографише или производи видео записе.

Више од Јоеа Цобурна

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, критике, бесплатне е -књиге и ексклузивне понуде!

Кликните овде да бисте се претплатили