Увод у ЕЕПРОМ у Ардуину

Испробајте Наш Инструмент За Елиминисање Проблема





У овом посту ћемо разумети шта је ЕЕПРОМ, како се подаци чувају на уграђеном ЕЕПРОМ-у Ардуино плоче Микроконтролер и такође практично тестирајте како писати и читати податке на ЕЕПРОМ-у на неколико примера.

Увод у ЕЕПРОМ у Ардуину

Зашто ЕЕПРОМ?

Пре него што питамо шта је ЕЕПРОМ? Веома је важно знати зашто се ЕЕПРОМ уопште користи за складиштење. Тако да, имамо јасну идеју о ЕЕПРОМ-овима.



Данас је доступно много уређаја за складиштење података, почев од магнетних уређаја за складиштење попут тврдог диска рачунара, старих школских касетофона, оптичког медија за складиштење попут ЦД-а, ДВД-а, Блу-раи дискова и ССД меморије попут ССД-а (Солид Стате Дриве) за рачунари и меморијске картице итд.

То су уређаји за масовно складиштење података који могу да чувају податке попут музике, видео записа, докумената итд., Од само неколико килобајта до мулти-терабајта. То је трајна меморија, што значи да се подаци могу задржати чак и након прекида напајања на медију за складиштење.



Уређај који испоручује умирујућу музику или видео записе који искачу из очију, попут рачунара или паметног телефона, чува неке кључне податке као што су подаци о конфигурацији, подаци о покретању, лозинке, биометријски подаци, подаци за пријаву итд.

Ови поменути подаци не могу се чувати у уређајима за масовно складиштење података из безбедносних разлога, а такође би их корисници могли ненамерно изменити што би могло довести до квара уређаја.

Ови подаци узимају само неколико бајтова до неколико мегабајта, јер повезивање конвенционалног уређаја за складиштење попут магнетног или оптичког медија са процесорским чиповима није економски и физички изводљиво.

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

Ардуино се не разликује од рачунара или паметних телефона. Постоји неколико околности у којима морамо да чувамо неке критичне податке који се не смеју избрисати чак и након прекида напајања, на пример податке сензора.

До сада бисте већ имали идеју зашто нам је потребан ЕЕПРОМ на микропроцесорима и чиповима микроконтролера.

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

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

Читање и писање на нивоу бајта разликује се од осталих полупроводничких меморија. На пример флеш меморија: блок читање, писање и брисање података.

Блок може бити неколико стотина до хиљада битова, што је изводљиво за масовно складиштење, али не и за операције „Само за читање меморије“ у микропроцесорима и микроконтролерима, којима треба приступ бајт-бајт подацима.

На плочи Ардуино Уно (АТмега328П) има 1КБ или 1024 бајта ЕЕПРОМ-а. Сваком бајту се може приступити појединачно, сваки бајт има адресу у распону од 0 до 1023 (то је укупно 1024).

Адреса (0-1023) је меморијска локација на којој ће се чувати наши подаци.

На свакој адреси можете да сачувате 8-битне податке, нумеричке цифре од 0 до 255. Наши подаци се чувају у бинарном облику, па ако записујемо број 255 у ЕЕПРОМ, он ће на адресу сачувати цифру као 11111111, а ако сачувамо нулу, чуваће се као 00000000.

Такође можете да сачувате текст, специјалне знакове, алфанумеричке знакове итд. Писањем одговарајућег програма.

Овде се не расправља о детаљима конструкције и раду, што би овај чланак могло учинити дугим, а ми можемо да вас успавамо. Крените ка ИоуТубеу или Гооглеу, има занимљивих чланака / видео снимака у вези са конструкцијом и радом ЕЕПОРМ-а.

Не мешајте ЕЕПРОМ са ЕПРОМ:

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

Користи јак сјај ултраљубичастог светла изнад чипа за складиштење који брише сачуване податке. ЕЕПРОМ је дошао као замена за ЕПРОМ и сада се ретко користи у било којим електронским уређајима.

Не бркајте Фласх меморију за ЕЕПРОМ:

Фласх меморија је полупроводничка и нехлапна меморија која се такође електрично брише и електрички програмира, заправо флеш меморија је изведена из ЕЕПРОМ-а. Али приступ меморији у блоковском смислу, или другим речима, приступа се начину меморије и његова конструкција се разликује од ЕЕПРОМ-а.

Ардуино Уно (микроконтролер АТмега328П) такође поседује 32 КБ флеш меморије за складиштење програма.

Животни век ЕЕПРОМ-а:

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

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

Имајте на уму да читање података из ЕЕПРОМ-а не утиче значајно на животни век.

Постоје спољни ЕЕПРОМ ИЦ-ови који се лако могу повезати са Ардуином, капацитета меморије од 8 КБ, 128КБ, 256 КБ итд., Са животним веком од око 1 милион циклуса писања по ћелији.

То закључује ЕЕПРОМ, сада бисте стекли довољно теоријског знања о ЕЕПРОМ-овима.

У следећем одељку ћемо научити како да практично тестирамо ЕЕПРОМ на ардуину.

Како тестирати ЕЕПРОМ у Ардуину

Да бисте то применили, потребан вам је само УСБ кабл и Ардуино Уно плоча, спремни сте за употребу.

Из горњих објашњења схватили смо да ЕЕПРОМ-ови имају адресу на којој чувамо наше податке. У Ардуино Уно можемо да ускладиштимо 0 до 1023 локације. Свака локација може да прими 8-бит или један бајт.

У овом примеру чуваћемо податке на адреси. Да бисмо смањили сложеност програма и да би програм био краћи, сачуваћемо једноцифрени цели број (0 до 9) на адреси од 0 до 9.

Програмски код # 1

Сада отпремите код у Ардуино:
//------------------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-------------------//

ИЗЛАЗ:

Након што се код отпреми, отворите серијски монитор.

Затражиће од вас да унесете адресу у распону од 0 до 9. Из горњег резултата сам унео адресу 3. Дакле, чуваћу целобројну вредност на локацији (адреси) 3.

Сада ће се од вас тражити да унесете једноцифрену целобројну вредност у опсегу од 0 до 9. Из горњег излаза унео сам вредност 5.

Дакле, сада ће вредност 5 бити сачувана на адресној локацији 3.

Једном када унесете вредност, она ће је записати на ЕЕПРОМ.

Приказаће се порука о успеху, што значи да је вредност сачувана.

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

У закључку смо написали и прочитали вредности из ЕЕПРОМ-а Ардуино-овог микроконтролера.

Сада ћемо користити ЕЕПРОМ за чување лозинке.

Унећемо лозинку од 6 цифара (ни мање ни више), чуваће се на 6 различитих адреса (свака адреса за сваку цифру) и једној додатној адреси за чување „1“ или „0“.

Једном када унесете лозинку, додатна адреса ће сачувати вредност „1“ која означава да је лозинка постављена и програм ће тражити да унесете лозинку да бисте укључили ЛЕД.

Ако је додатна адреса сачувана вредност „0“ или је присутна било која друга вредност, затражиће од вас да креирате нову шестоцифрену лозинку.

Горњим методом програм може да идентификује да ли сте већ поставили лозинку или треба да креирате нову лозинку.

Ако је унета лозинка тачна, ЛЕД за уградњу на пин # 13 светли, ако је унета лозинка нетачна, ЛЕД неће светлити и серијски монитор ће затражити да је лозинка погрешна.

Програмски код # 2

Сада отпремите код:
//------------------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---------------//

ИЗЛАЗ:

Отворите серијски монитор од вас ће бити затражено да креирате шестоцифрену лозинку.

Унесите било коју 6-цифрену лозинку, забележите је и притисните ентер. Сада је лозинка сачувана.

Можете притиснути дугме за ресетовање или одспојити УСБ кабл са рачунара, због чега је напајање Ардуино плоче прекинуто.

Сада поново повежите УСБ кабл, отворите серијски монитор, који ће тражити да унесете сачувану шестоцифрену лозинку.

Унесите тачну лозинку ЛЕД лампица ће светлити.

Ако желите да промените лозинку, промените цифру из кода:

инт пассЕкистАдд = 200

Горњи ред је додатна адреса о којој смо раније разговарали. Промените било где са 6 на 1023. 0 до 5 адреса резервисано је за чување шестоцифрене лозинке.

Промена ове додатне адресе заварава програм да лозинка још није створена и тражиће од вас да креирате нову шестоцифрену лозинку.

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




Претходно: Прекид струјног напајања помоћу Ардуина Следеће: Роботски аутомобил којим управља мобилни телефон помоћу ДТМФ модула