Paano Gumamit ng Arduino EEPROM upang Makatipid ng Data Sa Pagitan ng Mga Power Cycle

Paano Gumamit ng Arduino EEPROM upang Makatipid ng Data Sa Pagitan ng Mga Power Cycle

Alam mo bang ang Arduino ay maaaring mag-imbak ng data kapag naka-off ito? Hindi ang sketch na nakaimbak sa flash memory. Pinag-uusapan ko ang tungkol sa variable na data sa EEPROM. Sumali sa akin habang ipinapakita ko sa iyo kung paano magbasa at sumulat dito, at kung ano ang magagawa nito para sa iyong mga proyekto.





Kung bago ka sa Arduino, tiyaking titingnan mo ang aming mga gabay ng mga nagsisimula .





Ano ang EEPROM?

Ang EEPROM ay nangangahulugang electrically erasable programmable read-only memory . Ito ay isang uri ng di-pabagu-bago na memorya. Huwag mag-alala kung hindi mo naiintindihan kung ano ang ibig sabihin ng alinman sa mga iyon. Nag-iimbak lamang ito ng data kahit na naalis ang kuryente (hindi katulad RAM , na nangangailangan ng kuryente upang mapanatili ang anumang data).





Ang EEPROM ay binuo sa isang napakaraming mga processor, tulad ng field-programmable gate array (FPGA) na ginamit sa Matrix Creator Pi HAT. Ang lahat ng mga Arduino ay may magagamit na EEPROM, ngunit ang kapasidad ay nag-iiba sa bawat modelo. Tiyaking titingnan mo ang aming gabay sa pagbili para sa higit pang mga detalye sa bawat board.

Paano Ito Gumagana?

Ang EEPROM ay electrically burado at naka-program na gamit Fowler-Nordheim tunneling . Hindi mo kailangang malaman ang mga teknikal na detalye upang magamit ito. Ang pangunahing saligan ay ginagamit ang kuryente upang mabago ang binary data (kung ano ang binary). Maaari itong basahin, burahin, at muling isulat nang elektroniko.



Sa kabutihang palad, ang Wika ng Arduino ginagawang madali upang baguhin ang data, lahat nang hindi nangangailangan ng degree sa computer science.

Pag-asa sa Buhay

Habang madaling gamitin ang EEPROM sa Arduino, mayroon itong isang limitadong buhay. Ang EEPROM ay tinukoy upang mahawakan ang 100,000 na basahin / burahin ang mga cycle. Nangangahulugan ito na maaari kang magsulat at pagkatapos burahin / muling isulat ang data nang 100,000 beses bago maging hindi matatag ang EEPROM. Sa totoo, Atmel (ang mga tagagawa ng Arduino 'Chip') semiconductors ay maaaring hawakan ang isang mas mataas o mas mababang bilang ng mga cycle, depende sa mga pagpapahintulot ng bawat at bawat processor.





Kapag ang isang lokasyon ay naisulat at nabura ng maraming beses maaari itong magsimulang maging hindi maaasahan. Maaaring hindi nito ibalik ang tamang data, o ibalik ang halaga mula sa isang kalapit na bit.

Ito ay maaaring katulad ng maraming mga pagsusulat, ngunit maaaring madali itong maabot ang limitasyong ito kung ang pagbabasa at pagsusulat ng program (sa isang loop , Halimbawa). Ang pagbasa ng data ay hindi pinapasama ang silicon, pagsusulat lang ang gumagawa . Maaari mong basahin ang data mula sa EEPROM hangga't gusto mo nang walang takot!





Mahalagang tandaan na nalalapat ang limitasyong ito sa bawat lokasyon ng memorya. Ang iyong Arduino ay maaaring may 1,000 o higit pang mga lokasyon ng memorya na magagamit sa EEPROM, kaya't kung sumulat ka ng masyadong maraming beses sa isang lokasyon, ang lokasyon lamang ang naapektuhan, at hindi ang alinman sa iba pa. Mamaya sa pagtalakay ko pagsusuot ng leveling , na maaaring mabawasan ang pagsusuot ng EEPROM sa pamamagitan ng pamamahagi ng pantay na data - isang bagay na ginagamit ng mga SSD.

Ano ang Kapaki-pakinabang Nito?

Ang EEPROM ay hindi kapani-paniwalang kapaki-pakinabang para sa iyong mga proyekto sa Arduino. Tulad ng naaalala nito ang data kahit na tinanggal ang kuryente, maaari mong iimbak ang estado ng Arduino. Marahil maaari kang bumuo ng isang laser toresilya na naaalala ang posisyon nito o kung magkano ang 'munisyon' na natitira. Maaari mo itong magamit upang makontrol ang iyong mga kasangkapan sa bahay, at mag-log kung gaano karaming beses na naaktibo ang iyong kasangkapan.

Ang EEPROM ay pinakaangkop para sa mga bagay tulad ng mga setting o mataas na marka. Kung nais mong regular na magsulat ng kumplikadong data, baka isaalang-alang ang isang ethernet na kalasag (na may built-in na puwang ng SD) o isang Raspberry Pi.

Magbasa at magsulat

Ngayon na ang teorya ay nasa labas na ng paraan, tingnan natin kung paano magbasa at magsulat ng ilang data! Una, isama ang library (kasama ito ng Arduino IDE):

#include

Sumulat ngayon ng ilang data:

EEPROM.write(0, 12);

Sinusulat nito ang bilang 12 sa lokasyon ng EEPROM 0 . Ang bawat pagsulat ay tumatagal ng 3.3 milliseconds ( MS , 1000ms = 1 segundo). Pansinin kung paano hindi ka maaaring magsulat ng mga titik ( char ), ang mga numero lamang mula zero hanggang 255 ang pinapayagan. Ito ang dahilan kung bakit ang EEPROM ay perpekto para sa mga setting o mataas na marka, ngunit hindi napakahusay para sa mga pangalan ng player o salita. Posibleng mag-imbak ng teksto gamit ang pamamaraang ito (maaari mong mapa ang bawat titik ng alpabeto sa isang numero), subalit kakailanganin mong magkaroon ng maraming mga lokasyon ng memorya - isang lokasyon para sa bawat titik.

Narito kung paano mo nabasa ang data na iyon:

ang pagkilos na ito ay hindi maaaring makumpleto dahil ang file ay bukas sa isa pang programa
EEPROM.read(0);

Zero ang address na isinulat mo dati. Kung hindi ka pa nakasulat sa isang address dati, ibabalik nito ang maximum na halaga ( 255 ).

Mayroong ilang mga bahagyang mas kapaki-pakinabang na pamamaraan na magagamit. Sabihing nais mong mag-imbak ng isang decimal na lugar o string:

EEPROM.put(2,'12.67');

Sinusulat nito ang data sa maraming lokasyon - isang bagay na magiging madali upang isulat ang iyong sarili, ngunit madaling gamitin ang mas kaunti. Kakailanganin mo pa ring subaybayan kung gaano karaming mga lokasyon ang isinulat nito, upang hindi mo sinasadyang ma-overlap ang iyong data! Kailangan mong gamitin ang kumuha ka paraan upang makuha muli ang data na ito:

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

Ang halaga mula sa pagkuha ay nakaimbak sa float f variable. Pansinin kung paano ito pinasimulan 0.00f bilang ang halaga. Ang f ipaalam sa tagatala na baka gusto mong mag-imbak ng isang malaking bilang sa variable na ito, kaya nagtatakda ito ng ilang mga karagdagang pagsasaayos sa panahon ng pagtitipon.

Ang Dokumentasyon ng EEPROM sa Website ng Arduino maraming halimbawa.

Pagsusuot ng Level

Ang leveling ng pagsusuot ay isang pamamaraan na ginagamit upang mabawasan ang pagkasira at madagdagan ang buhay ng EEPROM. Kung nagtatrabaho ka lamang sa isang maliit na proyekto, maaaring hindi mo na kailangang magalala tungkol dito.

Ang pinakasimpleng bagay na maaari mong gawin upang mapanatili ang buhay ng EEPROM ay upang limitahan ang iyong mga pagsusulat sa isang partikular na lokasyon. Magagawa mo ito sa pamamagitan ng pagbabasa muna ng address, at kung ang halagang nais mong isulat ay mayroon na, hindi na kailangang isulat ito muli (tandaan, ang pagbabasa ng data ay hindi nakakasama). Narito kung paano mo gagawin iyon:

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

Iyon ay medyo isang simpleng piraso ng code, subalit gagana lamang ito para sa mga integer! Sa halip na muling maimbento ang gulong, gamitin ang pagpapaandar na naka-built sa Arduino EEPROM library:

EEPROM.update(address, val);

Ang pamamaraang ito ay may eksaktong kaparehong pirma tulad ng sumulat paraan, bagaman maaari itong mabawasan nang husto ang bilang ng mga pagsusulat na kinakailangan!

Kung kailangan mong magsulat ng maraming data, at nababahala tungkol sa pagsusuot ng silicon, maaari mong subaybayan kung gaano karaming mga pagsusulat ang ginagawa mo, bagaman gumagamit ito ng mas maraming data. Narito ang isang magaspang na pagpapatupad sa pseudocode :

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

Kakailanganin mong iimbak ang address at isulat angCount sa EEPROM (at ang splitCount ay kailangang hatiin sa mga lokasyon ng address). Ang karamihan ng oras, ang antas ng proteksyon na ito ay hindi kinakailangan. Ang Arduinos ay napakamura din, kaya maaari mong mas madaling bumili ng backup!

Dapat mo na ngayong malaman ang sapat upang makagawa ng ilang mga kahanga-hangang proyekto. Ipaalam sa amin kung gumawa ka ng isang bagay na cool! Maaari mo bang makilala ang lahat ng mga aparato sa mga larawan? Mag-iwan sa amin ng isang puna sa ibaba!

Magbahagi Magbahagi Mag-tweet Email 5 Mga Tip upang Supercharge ang Iyong Mga VirtualBox Linux Machine

Pagod na sa hindi magandang pagganap na inaalok ng mga virtual machine? Narito kung ano ang dapat mong gawin upang mapalakas ang pagganap ng VirtualBox.

Basahin Susunod
Mga Kaugnay na Paksa
  • DIY
  • Arduino
  • Elektronika
Tungkol sa May-akda Joe Coburn(136 Mga Artikulo Na-publish)

Si Joe ay nagtapos sa Computer Science mula sa University of Lincoln, UK. Siya ay isang propesyonal na developer ng software, at kapag hindi siya lumilipad ng mga drone o sumusulat ng musika, madalas siyang matagpuan na kumukuha ng mga larawan o gumawa ng mga video.

Higit pa Mula kay Joe Coburn

Mag-subscribe sa aming newsletter

Sumali sa aming newsletter para sa mga tip sa tech, pagsusuri, libreng ebook, at eksklusibong deal!

Mag-click dito upang mag-subscribe
Kategorya Diy