Johdanto EEPROM: iin Arduinossa

Kokeile Instrumenttia Ongelmien Poistamiseksi





Tässä viestissä aiomme ymmärtää, mikä EEPROM on, miten tietoja tallennetaan sisäänrakennettuun EEPROMiin Arduino-levyt Mikrokontrolleri ja myös käytännössä testata kuinka kirjoittaa ja lukea tietoja EEPROM: lla muutamalla esimerkillä.

Johdanto EEPROM: iin Arduinossa

Miksi EEPROM?

Ennen kuin kysytään, mikä EEPROM on? On erittäin tärkeää tietää, miksi EEPROMia käytetään ensisijaisesti varastointiin. Joten saamme selvän käsityksen EEPROM: ista.



Nykyään on paljon tallennuslaitteita, jotka vaihtelevat magneettisista tallennuslaitteista, kuten tietokoneen kiintolevyt, vanhan koulun kasettinauhurit, optiset tallennusvälineet, kuten CD-, DVD-, Blu-ray-levyt ja SSD-muisti, kuten SSD (Solid State Drive). tietokoneet ja muistikortit jne.

Nämä ovat massamuistilaitteita, jotka voivat tallentaa tietoja, kuten musiikkia, videoita, asiakirjoja jne., Vain muutamasta kilotavusta useisiin teratavuihin. Nämä ovat haihtumatonta muistia, mikä tarkoittaa, että data voidaan säilyttää myös sen jälkeen, kun virta on katkaistu tallennusvälineelle.



Laite, joka tuottaa korvan rauhoittavaa musiikkia tai silmiinpistäviä videoita, kuten tietokone tai älypuhelin, tallentaa tärkeät tiedot, kuten määritystiedot, käynnistystiedot, salasanat, biometriset tiedot, kirjautumistiedot jne.

Mainittuja tietoja ei voida tallentaa massamuistilaitteisiin turvallisuussyistä, ja myös käyttäjät voivat muokata näitä tietoja tahattomasti, mikä voi johtaa laitteen toimintahäiriöön.

Nämä tiedot vievät vain muutaman tavun muutamaan megatavuun, tavanomaisen tallennuslaitteen, kuten magneettisen tai optisen välineen, liittäminen prosessorisiruihin ei ole taloudellisesti ja fyysisesti mahdollista.

Joten nämä kriittiset tiedot tallennetaan itse prosessisiruihin.

Arduino ei eroa tietokoneesta tai älypuhelimista. On useita olosuhteita, joissa meidän on tallennettava joitain kriittisiä tietoja, joita ei saa pyyhkiä edes virran katkaisun jälkeen, esimerkiksi anturitiedot.

Tähän mennessä sinulla olisi ollut käsitys, miksi tarvitsemme EEPROMia mikroprosessoreissa ja mikro-ohjainsiruissa.

Mikä on EEPROM?

EEPROM tarkoittaa sähköisesti pyyhittävää ohjelmoitavaa vain lukumuistia. Se on myös haihtumaton muisti, jota voidaan lukea ja kirjoittaa tavu viisas.

Tavuustason lukeminen ja kirjoittaminen tekee siitä eron muista puolijohdemuisteista. Esimerkiksi flash-muisti: tietojen lukeminen, kirjoittaminen ja poistaminen lohkoittain.

Lohko voi olla muutamasta sadasta tuhanteen bittiä, mikä on mahdollista massamuistiin, mutta ei mikroprosessoreiden ja mikrokontrollerien 'vain luku -muistiin', jotka tarvitsevat tavutietoja tavuina.

Arduino Uno -taulussa (ATmega328P) sillä on 1 kt tai 1024 tavua EEPROM-muistia. Jokaiseen tavuun pääsee erikseen, jokaisen tavun osoite on 0-1023 (yhteensä 1024).

Osoite (0-1023) on muistipaikka, johon tietomme tallennetaan.

Kuhunkin osoitteeseen voit tallentaa 8-bittistä dataa, numeerisia numeroita välillä 0 - 255. Tietomme tallennetaan binaarimuodossa, joten jos kirjoitamme numeron 255 EEPROMiin, se tallentaa numeron 11111111 osoitteeseen ja jos tallennamme nollan, se tallennetaan nimellä 00000000.

Voit myös tallentaa tekstiä, erikoismerkkejä, aakkosnumeerisia merkkejä jne. Kirjoittamalla sopivan ohjelman.

Rakennuksen yksityiskohdista ja työskentelystä ei keskustella tässä, mikä saattaa pidentää tätä artikkelia ja saatamme tehdä sinusta unisen. Suuntaa kohti YouTubea tai Googlea, on mielenkiintoinen artikkeli / video EEPORM: n rakentamisesta ja toiminnasta.

Älä sekoita EEPROMia EPROM: iin:

Pähkinänkuoressa EPROM on sähköisesti ohjelmoitava vain luku -muisti, mikä tarkoittaa, että se voidaan ohjelmoida (tallentaa muistia) sähköisesti, mutta sitä ei voida poistaa sähköisesti.

Se hyödyntää ultraviolettivalon kirkasta kiiltoa tallennuspiirin yläpuolella, mikä poistaa tallennetut tiedot. EEPROM tuli EPROM: n tilalle ja sitä ei juuri nyt käytetä missään elektronisessa laitteessa.

Älä sekoita EEPROM-muistia:

Flash-muisti on puolijohde- ja haihtumaton muisti, joka on myös sähköisesti pyyhittävä ja sähköisesti ohjelmoitava, itse asiassa flash-muisti on peräisin EEPROM-muistista. Mutta lohkoittain muistiin pääsy tai toisin sanoen tapa käyttää muistia ja sen rakenne eroaa EEPROMista.

Arduino Unolla (ATmega328P-mikrokontrolleri) on myös 32 kt: n flash-muisti ohjelmien tallennusta varten.

EEPROM: n käyttöikä:

Kuten kaikilla muilla sähköisillä tallennusvälineillä, EEPROMilla on myös rajalliset luku-, kirjoitus- ja pyyhkäisyjaksot. Mutta ongelmana on, että sen käyttöikä on pienin verrattuna muihin puolijohdemuisteihin.

Arduinon EEPROM: lla Atmel vaati noin 100000 (yksi järvi) kirjoitusjaksoa solua kohden. Jos huonelämpötila on matalampi, sitä pidempi EEPROM-käyttöikä on.

Huomaa, että tietojen lukeminen EEPROMista ei vaikuta merkittävästi käyttöikään.

On olemassa ulkoisia EEPROM-IC: itä, jotka voidaan liittää Arduinoon helposti muistikapasiteetilla, joka vaihtelee välillä 8 kt, 128 kt, 256 kt jne. Ja joiden käyttöikä on noin miljoona kirjoitusjaksoa solua kohden.

EEPROM päättyy, nyt olisit hankkinut tarpeeksi teoreettista tietoa EEPROM: ista.

Seuraavassa osassa opitaan, miten EEPROM testataan arduinolla käytännössä.

Kuinka testata EEPROMia Arduinossa

Tämän toteuttamiseksi tarvitset vain USB-kaapelin ja Arduino Uno -kortin, olet valmis menemään.

Yllä olevista selityksistä ymmärrimme, että EEPROM: eilla on osoite, johon tallennamme tietoja. Voimme tallentaa 0-1023 sijaintia Arduino Unoon. Kuhunkin sijaintiin mahtuu 8 bittiä tai yksi tavu.

Tässä esimerkissä aiomme tallentaa tietoja osoitteeseen. Ohjelman monimutkaisuuden vähentämiseksi ja ohjelman pitämiseksi mahdollisimman lyhyenä aiomme tallentaa yksinumeroisen kokonaisluvun (0-9) osoitteeseen 0-9.

Ohjelmakoodi # 1

Lataa koodi nyt Arduinoon:
//------------------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-------------------//

LÄHTÖ:

Kun koodi on ladattu, avaa sarjamonitori.

Se pyytää sinua antamaan osoitteen, joka vaihtelee 0: sta 9. Yllä olevasta lähdöstä olen kirjoittanut osoitteen 3. Joten tallennan kokonaisluvun sijaintiin (osoite) 3.

Nyt se kehottaa sinua syöttämään yksinumeroisen kokonaisluvun, joka vaihtelee välillä 0-9. Edellä olevasta lähdöstä olen syöttänyt arvon 5.

Joten nyt arvo 5 tallennetaan osoitekohtaan 3.

Kun olet syöttänyt arvon, se kirjoittaa arvon EEPROM-tiedostoon.

Se näyttää onnistumisviestin, mikä tarkoittaa, että arvo on tallennettu.

Muutaman sekunnin kuluttua se lukee arvon, joka on tallennettu kommentoituun osoitteeseen, ja se näyttää arvon sarjaliitännässä.

Lopuksi olemme kirjoittaneet ja lukeneet Arduinon mikrokontrollerin EEPROM-arvot.

Nyt aiomme käyttää EEPROMia salasanan tallentamiseen.

Annamme 6-numeroisen (vähintään tai ei enempää) salasanan, se tallennetaan kuuteen eri osoitteeseen (kukin osoite kullekin numerolle) ja yhdelle lisäosoitteelle '1' tai '0' tallentamiseksi.

Kun olet syöttänyt salasanan, lisäosoitteeseen tallennetaan arvo “1”, mikä osoittaa, että salasana on asetettu, ja ohjelma pyytää sinua syöttämään salasanan LED-valon sytyttämiseksi.

Jos lisäosoitteeseen tallennettu arvo on “0” tai jokin muu arvo on läsnä, se pyytää sinua luomaan uuden 6-numeroisen salasanan.

Edellä mainitulla menetelmällä ohjelma voi tunnistaa, oletko jo asettanut salasanan vai haluatko luoda uuden salasanan.

Jos syötetty salasana on oikea, sisäänrakennettu LED-merkkivalo nastassa 13 palaa, jos syötetty salasana on väärä, LED-merkkivalo ei pala ja sarjamonitori pyytää, että salasanasi on väärä.

Ohjelmakoodi # 2

Lataa koodi nyt:
//------------------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---------------//

LÄHTÖ:

Avaa sarjavalvonta, se kehottaa sinua luomaan 6-numeroisen salasanan.

Syötä mikä tahansa 6-numeroinen salasana, kirjoita se muistiin ja paina Enter. Nyt salasana on tallennettu.

Voit joko painaa nollauspainiketta tai irrottaa USB-kaapelin tietokoneesta, mikä katkaisee virran Arduino-kortille.

Liitä nyt USB-kaapeli uudelleen, avaa sarjamonitori, joka kehottaa sinua syöttämään tallennetun 6-numeroisen salasanan.

Anna oikea salasana, jonka LED-valo palaa.

Jos haluat vaihtaa salasanan, vaihda numero koodista:

int passExistAdd = 200

Yllä oleva rivi on lisäosoite, josta keskustelimme aiemmin. Vaihda missä tahansa välillä 6 - 1023. 0 - 5 osoitetta on varattu 6-numeroisen salasanan tallentamiseen.

Tämän uuden osoitteen muuttaminen hämmentää ohjelmaa, että salasanaa ei ole vielä luotu, ja kehottaa sinua luomaan uuden 6-numeroisen salasanan.

Jos sinulla on kysyttävää tästä EEPROMista Arduino-opetusohjelmassa, ilmaise kommenttisi, saatat saada nopean vastauksen.




Pari: Ylivirran katkaiseva virtalähde Arduinoa käyttämällä Seuraava: Matkapuhelinohjattu robotti-auto DTMF-moduulin avulla