Panimula sa EEPROM sa Arduino

Subukan Ang Aming Instrumento Para Sa Pagtanggal Ng Mga Problema





Sa post na ito maiintindihan namin kung ano ang EEPROM, kung paano nakaimbak ang data ng built in na EEPROM Arduino board's Ang Microcontroller at praktikal din na subukan kung paano magsulat at magbasa ng data sa EEPROM ng isang pares ng mga halimbawa.

Panimula sa EEPROM sa Arduino

Bakit EEPROM?

Bago namin tanungin kung ano ang EEPROM? Napakahalagang malaman kung bakit ginagamit ang EEPROM para sa imbakan sa una. Kaya't, nakakakuha kami ng malinaw na ideya sa EEPROMs.



Maraming mga aparato ng pag-iimbak na magagamit sa mga araw na ito, mula sa mga aparatong pang-imbak na magnetiko tulad ng mga hard disk ng computer, mga recorder ng tape ng cassette ng paaralan, daluyan ng optikong imbakan tulad ng mga CD, DVD, Blu-ray disk at solidong memorya ng estado tulad ng SSD (Solid State Drive) para computer at Memory card atbp.

Ito ang mga mass imbakan aparato na maaaring mag-imbak ng data tulad ng musika, mga video, mga dokumento atbp mula sa mas mababa sa ilang Kilobytes sa multi-Terabytes. Ang mga ito ay hindi nababagabag na memorya na nangangahulugang, ang data ay maaaring mapanatili kahit na matapos ang lakas ay naputol sa medium ng pag-iimbak.



Ang aparato na naghahatid ng nakapapawing pagod na musika o mga popping video tulad ng computer o smartphone ay nag-iimbak ng ilang kritikal na data tulad ng data ng pagsasaayos, data ng boot, mga password, data ng bio-metric, data ng pag-login atbp.

Ang nabanggit na data na ito ay hindi maitatabi sa mga mass storage device para sa mga kadahilanang panseguridad at ang data na ito ay maaaring mabago ng mga gumagamit nang hindi sinasadya na maaaring humantong sa hindi paggana ng aparato.

Ang data na ito ay tumatagal lamang ng ilang mga byte sa ilang mga Megabyte, ang pagkonekta ng isang maginoo na imbakan aparato tulad ng magnetic o optical medium sa mga chips ng processor ay hindi posible sa ekonomiya at pisikal.

Kaya, ang mga kritikal na data na ito ay nakaimbak sa mga chips ng pagproseso mismo.

Ang Arduino ay hindi naiiba mula sa computer o smartphone. Mayroong maraming mga pangyayari kung saan kailangan nating mag-imbak ng ilang kritikal na data na hindi dapat mabura kahit na naputol ang kuryente, halimbawa ng data ng sensor.

Sa ngayon, magkakaroon ka sana ng ideya kung bakit kailangan namin ng EEPROM sa microprocessors at microcontrollers chips.

Ano ang EEPROM?

Ang EEPROM ay kumakatawan sa Electrically Erasable Programmable Read Only Memory. Ito rin ay isang di-pabagu-bago na memorya na mababasa at maisulat byte matalino

Ginagawa itong antas ng pagbabasa at pagsusulat ng byte-level mula sa iba pang mga alaala ng semiconductor. Halimbawa ng memorya ng flash: pagbabasa, pagsusulat at pagbubura ng data sa paraan ng pag-block.

Ang isang bloke ay maaaring ilang daan-daang hanggang libu-libong mga piraso, na magagawa para sa pag-iimbak ng masa, ngunit hindi para sa pagpapatakbo ng 'Basahin Lamang ang Memory' sa mga microprocessor at microcontroller, na kailangang i-access ang byte ng byte data.

Sa Arduino Uno board (ATmega328P) mayroon itong board 1KB o 1024 bytes ng EEPROM. Ang bawat byte ay maaaring mai-access nang paisa-isa ang bawat byte ay may address na mula 0 hanggang 1023 (iyon ang kabuuang 1024).

Ang Address (0-1023) ay isang lokasyon ng memorya kung saan maiimbak ang aming data.

Sa bawat address maaari kang mag-imbak ng 8-bit na data, mga numerong digit mula 0 hanggang 255. Ang aming data ay nakaimbak sa binary form, kaya kung isulat namin ang bilang 255 sa EEPROM maiimbak nito ang digit bilang 11111111 sa isang address at kung mag-iimbak tayo ng zero, itatabi nito bilang 00000000.

Maaari ka ring mag-imbak ng teksto, mga espesyal na character, alphanumeric character atbp sa pamamagitan ng pagsulat ng naaangkop na programa.

Ang mga detalye sa konstruksyon at pagtatrabaho ay hindi tinalakay dito na maaaring pahabain ang artikulong ito at maaari ka naming antokin. Tumungo sa YouTube o Google, may mga kagiliw-giliw na artikulo / video tungkol sa konstruksyon at pagtatrabaho ng EEPORM.

Huwag malito ang EEPROM sa EPROM:

Sa madaling sabi ang EPROM ay isang Eleksyong Programmable Read Only Memory na nangangahulugang maaari itong mai-program (iimbak ang memorya) nang elektrikal, ngunit hindi mabubura nang electrically.

Gumagamit ito ng maliwanag na ningning ng ilaw na Ultraviolet sa itaas ng chip ng imbakan na binubura ang nakaimbak na data. Ang EEPROM ay dumating bilang kapalit ng EPROM at ngayon ay hindi na ginagamit sa anumang mga elektronikong aparato.

Huwag malito ang Flash Memory para sa EEPROM:

Ang isang memorya ng flash ay isang semiconductor at di-pabagu-bago na memorya na kung saan ay maaari ring mabura at ma-program na electrically, sa katunayan ang flash memory ay nagmula sa EEPROM. Ngunit ang pag-access ng memorya na tama sa block o sa madaling salita, na-access ang paraan ng memorya at ang konstruksyon nito ay naiiba mula sa EEPROM.

Ang Arduino Uno (ATmega328P Microcontroller) ay isport din ng 32KB ng flash memory para sa pag-iimbak ng programa.

Haba ng buhay ng EEPROM:

Tulad ng anumang iba pang daluyan ng elektronikong imbakan, ang EEPROM ay mayroon ding wakas na basahin, isulat, burahin ang mga pag-ikot. Ngunit ang problema ay mayroon itong isa sa pinakamaliit na habang-buhay na ihambing sa anumang iba pang uri ng memorya ng semiconductor.

Sa EEPROM ng Arduino, inangkin ni Atmel ang tungkol sa 100000 (isang lakh) na cycle ng pagsulat bawat cell. Kung ang temperatura ng iyong silid ay mas mababa mas malaki ang habang-buhay ng EEPROM.

Mangyaring tandaan na ang pagbabasa ng data mula sa EEPROM ay hindi nakakaapekto nang malaki sa habang-buhay.

Mayroong mga panlabas na EEPROM IC na maaaring ma-interfaced Arduino nang madali sa kapasidad ng memorya mula 8 KB, 128KB, 256 KB atbp na may haba ng buhay na humigit-kumulang na 1 milyong mga cycle ng pagsulat bawat cell.

Tinapos nito ang EEPROM, ngayon ay nakakuha ka ng sapat na kaalaman sa teoretikal tungkol sa EEPROMs.

Sa sumusunod na seksyon matututunan namin kung paano subukan ang EEPROM sa arduino nang praktikal.

Paano Masubukan ang EEPROM sa Arduino

Upang maipatupad ito, ang kailangan mo lamang ay isang USB cable at Arduino Uno board, handa ka nang umalis.

Mula sa mga paliwanag sa itaas naintindihan namin na ang EEPROMs ay may Address kung saan iniimbak namin ang aming data. Maaari kaming mag-imbak ng 0 hanggang 1023 mga lokasyon sa Arduino Uno. Tumatanggap ang bawat lokasyon ng 8-bits o isang byte.

Sa halimbawang ito ay mag-iimbak kami ng data sa isang address. Upang mabawasan ang pagiging kumplikado ng programa at panatilihing maikli ang programa hangga't maaari, mag-iimbak kami ng solong digit na integer (0 hanggang 9) sa isang address mula 0 hanggang 9.

Code ng Programa # 1

Ngayon, i-upload ang code sa Arduino:
//------------------Program Developed by R.GIRISH-------------------//
#include
int inputAddress = 0
int inputValue = 0
int ReadData = 0
boolean Readadd = true
boolean Readval = true
void setup()
{
Serial.begin(9600)
Serial.println('Enter the address (0 to 9)')
Serial.println('')
while(Readadd)
{
inputAddress = Serial.read()
if(inputAddress > 0)
{
inputAddress = inputAddress - 48
Readadd = false
}
}
Serial.print('You have selected Address: ')
Serial.println(inputAddress)
Serial.println('')
delay(2000)
Serial.println('Enter the value to be stored (0 to 9)')
Serial.println('')
while(Readval)
{
inputValue = Serial.read()
if(inputValue > 0)
{
inputValue = inputValue - 48
Readval = false
}
}
Serial.print('The value you entered is: ')
Serial.println(inputValue)
Serial.println('')
delay(2000)
Serial.print('It will be stored in Address: ')
Serial.println(inputAddress)
Serial.println('')
delay(2000)
Serial.println('Writing on EEPROM.....')
Serial.println('')
EEPROM.write(inputAddress, inputValue)
delay(2000)
Serial.println('Value stored successfully!!!')
Serial.println('')
delay(2000)
Serial.println('Reading from EEPROM....')
delay(2000)
ReadData = EEPROM.read(inputAddress)
Serial.println('')
Serial.print('The value read from Address ')
Serial.print(inputAddress)
Serial.print(' is: ')
Serial.println(ReadData)
Serial.println('')
delay(1000)
Serial.println('Done!!!')
}
void loop()
{
// DO nothing here.
}
//------------------Program Developed by R.GIRISH-------------------//

OUTPUT:

Kapag na-upload na ang code, buksan ang serial monitor.

Hihilingin sa iyo na ipasok ang address mula 0 hanggang 9. Mula sa output sa itaas, ipinasok ko ang address 3. Sa gayon, magtatago ako ng isang integer na halaga sa lokasyon (address) 3.

Ngayon, hihimokin ka nitong magpasok ng isang digit na halaga ng integer mula 0 hanggang 9. Mula sa output sa itaas, ipinasok ko ang halagang 5.

Kaya, ngayon ang halaga 5 ay maiimbak sa lokasyon ng address 3.

Kapag naipasok mo na ang halaga, isusulat nito ang halaga sa EEPROM.

Ipapakita nito ang isang mensahe ng tagumpay, na nangangahulugang ang halaga ay nakaimbak.

Pagkatapos ng ilang segundo ay babasahin nito ang halaga na nakaimbak sa naka-puna na address at ipapakita nito ang halaga sa serial monitor.

Bilang konklusyon, nagsulat at nabasa namin ang mga halagang mula sa EEPROM ng microcontroller ng Arduino.

Ngayon, gagamitin namin ang EEPROM para sa pagtatago ng password.

Magpapasok kami ng isang 6 na numero ng numero (walang mas kaunti o wala pa) password, maiimbak ito sa 6 na magkakaibang address (bawat address para sa bawat digit) at isang karagdagang address para sa pagtatago ng '1' o '0'.

Kapag naipasok mo na ang password, iimbak ng karagdagang address ang halagang '1' na nagpapahiwatig na ang password ay nakatakda at hihilingin sa iyo ng programa na ipasok ang password upang I-ON ang LED.

Kung ang karagdagang nakaimbak na halaga ng address ay '0' o anumang ibang halaga ay naroroon, hihilingin sa iyo na lumikha ng bagong 6 na digit na password.

Sa pamamagitan ng pamamaraang nasa itaas, maaaring makilala ng programa kung nagtakda ka na ng isang password o kailangang lumikha ng isang bagong password.

Kung ang ipinasok na password ay tama ang pagbuo ng LED sa pin # 13 na glows, kung ang ipinasok na password ay hindi tama, ang LED ay hindi mamumula at ang serial monitor ay mag-uudyok na ang iyong password ay mali.

Code ng Programa # 2

I-upload ngayon ang code:
//------------------Program Developed by R.GIRISH---------------//
#include
int passExistAdd = 200
const int LED = 13
int inputAddress = 0
int word1 = 0
int word2 = 0
int word3 = 0
int word4 = 0
int word5 = 0
int word6 = 0
int wordAddress1 = 0
int wordAddress2 = 1
int wordAddress3 = 2
int wordAddress4 = 3
int wordAddress5 = 4
int wordAddress6 = 5
int passwordExist = 0
boolean ReadVal1 = true
boolean ReadVal2 = true
boolean ReadVal3 = true
boolean ReadVal4 = true
boolean ReadVal5 = true
boolean ReadVal6 = true
int checkWord1 = 0
int checkWord2 = 0
int checkWord3 = 0
int checkWord4 = 0
int checkWord5 = 0
int checkWord6 = 0
void setup()
{
Serial.begin(9600)
pinMode(LED, OUTPUT)
digitalWrite(LED, LOW)
passwordExist = EEPROM.read(passExistAdd)
if(passwordExist != 1)
{
Serial.println('Enter a new 6 number password:')
while(ReadVal1)
{
word1 = Serial.read()
if(word1 > 0)
{
word1 = word1 - 48
ReadVal1 = false
}
}
while(ReadVal2)
{
word2 = Serial.read()
if(word2 > 0)
{
word2 = word2 - 48
ReadVal2 = false
}
}
while(ReadVal3)
{
word3 = Serial.read()
if(word3 > 0)
{
word3 = word3 - 48
ReadVal3 = false
}
}
while(ReadVal4)
{
word4 = Serial.read()
if(word4 > 0)
{
word4 = word4 - 48
ReadVal4 = false
}
}
while(ReadVal5)
{
word5 = Serial.read()
if(word5 > 0)
{
word5 = word5 - 48
ReadVal5 = false
}
}
while(ReadVal6)
{
word6 = Serial.read()
if(word6 > 0)
{
word6 = word6 - 48
ReadVal6 = false
}
}
Serial.println('')
Serial.print(word1)
Serial.print(word2)
Serial.print(word3)
Serial.print(word4)
Serial.print(word5)
Serial.print(word6)
EEPROM.write(wordAddress1, word1)
EEPROM.write(wordAddress2, word2)
EEPROM.write(wordAddress3, word3)
EEPROM.write(wordAddress4, word4)
EEPROM.write(wordAddress5, word5)
EEPROM.write(wordAddress6, word6)
EEPROM.write(passExistAdd,1)
Serial.println(' Password saved Sucessfully!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
if(passwordExist == 1)
{
Serial.println('')
Serial.println('Please enter the 6 digit number password:')
while(ReadVal1)
{
word1 = Serial.read()
if(word1 > 0)
{
word1 = word1 - 48
ReadVal1 = false
}
}
while(ReadVal2)
{
word2 = Serial.read()
if(word2 > 0)
{
word2 = word2 - 48
ReadVal2 = false
}
}
while(ReadVal3)
{
word3 = Serial.read()
if(word3 > 0)
{
word3 = word3 - 48
ReadVal3 = false
}
}
while(ReadVal4)
{
word4 = Serial.read()
if(word4 > 0)
{
word4 = word4 - 48
ReadVal4 = false
}
}
while(ReadVal5)
{
word5 = Serial.read()
if(word5 > 0)
{
word5 = word5 - 48
ReadVal5 = false
}
}
while(ReadVal6)
{
word6 = Serial.read()
if(word6 > 0)
{
word6 = word6 - 48
ReadVal6 = false
}
}
checkWord1 = EEPROM.read(wordAddress1)
if(checkWord1 != word1)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord2 = EEPROM.read(wordAddress2)
if(checkWord2 != word2)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord3 = EEPROM.read(wordAddress3)
if(checkWord3 != word3)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord4 = EEPROM.read(wordAddress4)
if(checkWord4 != word4)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord5 = EEPROM.read(wordAddress5)
if(checkWord5 != word5)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord6 = EEPROM.read(wordAddress6)
if(checkWord6 != word6)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
digitalWrite(LED, HIGH)
Serial.println('')
Serial.println('LED is ON')
Serial.println('')
Serial.println('Press Reset Button.')
}
}
void loop()
{
}
//------------------Program Developed by R.GIRISH---------------//

OUTPUT:

Buksan ang serial monitor ay hihimokin ka nito upang lumikha ng isang 6 digit na password sa numero.

Ipasok ang anumang 6 na digit na password at tandaan ito at pindutin ang enter. Ngayon ang password ay naiimbak na.

Maaari mong pindutin ang pindutan ng pag-reset o idiskonekta ang USB cable mula sa PC, na ginambala ang supply sa Arduino board.

Ngayon, muling ikonekta ang USB cable, buksan ang serial monitor, na mag-uudyok sa iyo upang ipasok ang nai-save na 6 na password.

Ipasok ang tamang password na mamula ng LED.

Kung nais mong baguhin ang password baguhin ang digit mula sa code:

int passExistAdd = 200

Ang linya sa itaas ay ang karagdagang address na tinalakay namin dati. Baguhin saanman mula 6 hanggang 1023. Ang 0 hanggang 5 mga address ay nakalaan para sa pagtatago ng 6 na digit na password.

Ang pagpapalit ng karagdagang adres na ito ay magpapaloko sa programa na ang password ay hindi pa nilikha at hinihikayat kang lumikha ng isang bagong 6 na password.

Kung mayroon kang anumang mga katanungan tungkol sa EEPROM sa Arduino tutorial na ito, mangyaring ipahayag sa mga komento, maaari kang makatanggap ng mabilis na tugon.




Nakaraan: Sa Kasalukuyang Kasalukuyang Cut-off Power Supply Paggamit ng Arduino Susunod: Mobile Phone Controlled Robot Car na Paggamit ng DTMF Module