Kā izmantot Arduino EEPROM, lai saglabātu datus starp enerģijas cikliem

Kā izmantot Arduino EEPROM, lai saglabātu datus starp enerģijas cikliem

Vai zinājāt, ka Arduino var saglabāt datus, kad tas ir izslēgts? Ne skice, kas saglabāta zibatmiņā. Es runāju par mainīgiem datiem EEPROM. Pievienojieties man, jo es parādīšu, kā tajā lasīt un rakstīt, un ko tas var dot jūsu projektiem.





Ja esat jauns Arduino lietotājs, noteikti pārbaudiet mūsu ceļvedis iesācējiem .





Kas ir EEPROM?

EEPROM nozīmē elektriski dzēšama programmējama tikai lasāma atmiņa . Tas ir nemainīgas atmiņas veids. Neuztraucieties, ja nesaprotat, ko tas nozīmē. Tas vienkārši saglabā datus pat ar atvienotu jaudu (atšķirībā no tā RAM , kam nepieciešama elektrība, lai saglabātu visus datus).





EEPROM ir iebūvēts neskaitāmos procesoros, piemēram, laukā programmējamā vārtu masīvā (FPGA), ko izmanto Matrix Creator Pi HAT. Visiem Arduinos ir pieejams EEPROM, taču ietilpība atšķiras atkarībā no modeļa. Noteikti apskatiet mūsu pirkšanas rokasgrāmatu, lai iegūtu sīkāku informāciju par katru tāfeli.

Kā tas darbojas?

EEPROM tiek elektriski izdzēsts un ieprogrammēts, izmantojot Fouler-Nordheim tunelēšana . Lai to varētu izmantot, jums nav jāzina tehniskā informācija. Pamatnoteikums ir tāds, ka elektrība tiek izmantota, lai mainītu bināros datus (kas ir bināri). To var lasīt, izdzēst un pārrakstīt elektroniski.



Par laimi, Arduino valoda ļauj viegli mainīt datus, neprasot datorzinātņu grādu.

Dzīves ilgums

Lai gan EEPROM ir viegli izmantot Arduino, tam ir ierobežots kalpošanas laiks. EEPROM ir paredzēts 100 000 lasīšanas/dzēšanas ciklu apstrādei. Tas nozīmē, ka jūs varat rakstīt un pēc tam izdzēst/pārrakstīt datus 100 000 reižu, pirms EEPROM kļūs nestabils. Īstenībā, Atmel (Arduino 'Chip' ražotāji) pusvadītāji var apstrādāt lielāku vai mazāku ciklu skaitu atkarībā no katra procesora pielaidēm.





Kad atrašanās vieta ir uzrakstīta un izdzēsta pārāk daudz reižu, tā var kļūt neuzticama. Tas var neatgriezt pareizos datus vai atdot vērtību no blakus esošā bita.

Tas var izklausīties pēc daudzām rakstībām, taču šo robežu var viegli sasniegt, ja lasāt un rakstāt programmatiski (a cilpa , piemēram). Datu lasīšana nepasliktina silīciju, to dara tikai rakstīšana . Jūs varat bez bailēm lasīt datus no EEPROM, cik vien vēlaties!





Ir svarīgi atzīmēt, ka šis ierobežojums attiecas uz katru atmiņas vietu. Jūsu Arduino EEPROM var būt pieejamas 1000 vai vairāk atmiņas vietas, tādēļ, ja vienā vietā rakstāt pārāk daudz reižu, tas ietekmē tikai šo atrašanās vietu, nevis kādu citu. Vēlāk es apspriedīšos nodiluma izlīdzināšana , kas var samazināt EEPROM nodilumu, vienmērīgi sadalot datus - to izmanto SSD.

Kam tas noder?

EEPROM ir neticami noderīgs jūsu Arduino projektiem. Tā kā tas atceras datus pat tad, kad tiek atvienota barošana, jūs varat saglabāt Arduino stāvokli. Varbūt jūs varētu uzbūvēt lāzera torni, kas atceras savu stāvokli vai cik daudz “munīcijas” ir palicis. Jūs to varētu izmantot, lai kontrolētu savas ierīces un reģistrētu, cik reizes ierīce tika aktivizēta.

EEPROM ir vislabāk piemērots, piemēram, iestatījumiem vai augstiem rādītājiem. Ja vēlaties regulāri rakstīt sarežģītus datus, varbūt apsveriet Ethernet vairogu (ar iebūvētu SD slotu) vai Raspberry Pi.

Lasi un raksti

Tagad, kad teorija vairs nav pieejama, apskatīsim, kā lasīt un rakstīt dažus datus! Vispirms iekļaujiet bibliotēku (tas ir iekļauts Arduino IDE):

#include

Tagad uzrakstiet dažus datus:

EEPROM.write(0, 12);

Tas raksta skaitli 12 uz EEPROM atrašanās vietu 0 . Katra rakstīšana ilgst 3,3 milisekundes ( jaunkundze , 1000 ms = 1 sekunde). Ievērojiet, kā jūs nevarat rakstīt vēstules ( char ), ir atļauti tikai skaitļi no nulles līdz 255. Tāpēc EEPROM ir ideāli piemērots iestatījumiem vai augstiem rādītājiem, bet ne tik labi spēlētāju vārdiem vai vārdiem. Izmantojot šo metodi, ir iespējams saglabāt tekstu (katru alfabēta burtu var saistīt ar skaitli), tomēr jums būs jābūt vairākām atmiņas vietām - viena vieta katram burtam.

Lūk, kā jūs lasāt šos datus:

interneta ātrums sākas augsts, tad samazinās
EEPROM.read(0);

Nulle ir adrese, uz kuru rakstījāt iepriekš. Ja iepriekš neesat rakstījis uz adresi, tas atgriezīs maksimālo vērtību ( 255 ).

Ir pieejamas dažas nedaudz noderīgākas metodes. Pieņemsim, ka vēlaties saglabāt decimāldaļu vai virkni:

EEPROM.put(2,'12.67');

Tādējādi dati tiek ierakstīti vairākās vietās - kaut ko būtu viegli uzrakstīt pats, taču tas būtu ērti. Jums joprojām būs jāseko līdzi, cik vietās tas ir uzrakstīts, lai nejauši nepārrakstītu savus datus! Jums ir jāizmanto gūt metode, kā vēlreiz iegūt šos datus:

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

Iegūtā vērtība tiek saglabāta pludiņā f mainīgais. Ievērojiet, kā tas tiek inicializēts 0.00f kā vērtību. The f ļauj kompilatoram zināt, ka, iespējams, vēlēsities šajā mainīgajā saglabāt lielu skaitu, tāpēc kompilēšanas laikā tiek iestatītas dažas papildu konfigurācijas.

The EEPROM dokumentācija uz Arduino vietne ir vēl daudz piemēru.

Nēsājiet izlīdzināšanu

Nodiluma izlīdzināšana ir tehnika, ko izmanto, lai samazinātu EEPROM nodilumu un pagarinātu tā kalpošanas laiku. Ja strādājat tikai pie neliela projekta, jums par to nav jāuztraucas.

Vienkāršākais, ko varat darīt, lai saglabātu EEPROM dzīvību, ir ierobežot rakstīšanu noteiktā vietā. To var izdarīt, vispirms izlasot adresi, un, ja vērtība, kuru vēlaties rakstīt, jau ir, tā nav jāraksta vēlreiz (atcerieties, ka datu lasīšana nekaitē). Lūk, kā jūs to darītu:

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

Tas ir diezgan vienkāršs koda bits, taču tas darbojas tikai veseliem skaitļiem! Tā vietā, lai no jauna izgudrotu riteni, izmantojiet Arduino EEPROM bibliotēkā iebūvēto funkciju:

EEPROM.update(address, val);

Šai metodei ir tieši tāds pats paraksts kā rakstīt metode, lai gan tas var krasi samazināt nepieciešamo rakstīšanas gadījumu skaitu!

Ja jums ir jāraksta daudz datu un jūs uztrauc silīcija nolietošanās, varat izsekot, cik daudz rakstāt, lai gan tas izmanto vairāk datu. Šeit ir aptuvena ieviešana pseidokods :

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

Jums būs jāsaglabā adrese un writeCount EEPROM (un writeCount būs jāsadala pa adreses vietām). Lielākoties šāds aizsardzības līmenis nebūs vajadzīgs. Arī Arduinos ir tik lēti, tāpēc jums var būt vieglāk iegādāties rezerves kopiju!

Tagad jums vajadzētu zināt pietiekami daudz, lai izveidotu satriecošus projektus. Paziņojiet mums, ja jūs gatavojat kaut ko foršu! Vai varat atpazīt visas attēlos redzamās ierīces? Atstājiet mums komentāru zemāk!

Kopīgot Kopīgot Čivināt E -pasts 5 padomi, kā uzlādēt VirtualBox Linux iekārtas

Vai esat noguris no virtuālo mašīnu piedāvātās sliktās veiktspējas? Lūk, kas jums jādara, lai uzlabotu VirtualBox veiktspēju.

Lasīt Tālāk
Saistītās tēmas
  • DIY
  • Arduino
  • Elektronika
Par autoru Džo Koburns(Publicēti 136 raksti)

Džo ir absolvējis datorzinātnes Linkolnas universitātē, Lielbritānijā. Viņš ir profesionāls programmatūras izstrādātājs, un, kad viņš nelido ar droniem un neraksta mūziku, viņu bieži var atrast, fotografējot vai veidojot video.

Vairāk no Joe Coburn

Abonējiet mūsu biļetenu

Pievienojieties mūsu informatīvajam izdevumam, lai iegūtu tehniskus padomus, pārskatus, bezmaksas e -grāmatas un ekskluzīvus piedāvājumus!

Noklikšķiniet šeit, lai abonētu
Kategorija Diy