Sisukord:

Andmete lugemine ja kirjutamine välisele EEPROM -ile Arduino abil: 5 sammu
Andmete lugemine ja kirjutamine välisele EEPROM -ile Arduino abil: 5 sammu

Video: Andmete lugemine ja kirjutamine välisele EEPROM -ile Arduino abil: 5 sammu

Video: Andmete lugemine ja kirjutamine välisele EEPROM -ile Arduino abil: 5 sammu
Video: Failidega opereerimine: lugemine ja kirjutamine 2024, November
Anonim
Andmete lugemine ja kirjutamine välisele EEPROM -ile Arduino abil
Andmete lugemine ja kirjutamine välisele EEPROM -ile Arduino abil

EEPROM tähistab elektriliselt kustutatavat programmeeritavat kirjutuskaitstud mälu.

EEPROM on väga oluline ja kasulik, kuna see on püsimälu vorm. See tähendab, et isegi kui plaat on välja lülitatud, säilitab EEPROM -kiip sellele kirjutatud programmi. Nii et kui lülitate plaadi välja ja seejärel uuesti sisse, saate käivitada EEPROM -ile kirjutatud programmi. Põhimõtteliselt salvestab ja juhib EEPROM programmi, olenemata sellest. See tähendab, et saate seadme välja lülitada, hoida seda 3 päeva väljalülitatuna, tagasi tulla ja sisse lülitada ning see võib ikkagi käivitada sellesse programmeeritud programmi. Nii töötab enamik olmeelektroonikaseadmeid.

Seda projekti rahastab LCSC. Olen kasutanud LCSC.com elektroonilisi komponente. LCSC-l on kindel kohustus pakkuda laia valikut ehtsaid ja kvaliteetseid elektroonikakomponente parima hinnaga ülemaailmse laevandusvõrguga üle 200 riigi. Registreeruge juba täna ja saate esimese tellimuse eest 8 dollarit allahindlust.

EEPROM on väga tõhus ka selle poolest, et traditsioonilise EEPROM -i üksikuid baite saab iseseisvalt lugeda, kustutada ja ümber kirjutada. Enamiku muud tüüpi püsimälu puhul ei saa seda teha. Seeria EEPROM-seadmed, nagu Microchip 24-seeria EEPROM, võimaldavad teil lisada rohkem mälu igale seadmele, mis räägib I²C keelt.

Tarvikud

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 MHz kristall
  4. Leivalaud
  5. Takisti 4,7 kΩ x 2
  6. Kondensaator 22 pF x 2

Samm: EEPROMi põhitõed

EEPROMi põhitõed
EEPROMi põhitõed

Microchip 24LC2512 kiipi saab osta 8 -kontaktilise DIP -paketina. 24LC512 tihvtid on üsna sirgjoonelised ja koosnevad toiteallikast (8), GND (4), kirjutuskaitsest (7), SCL/SDA (6, 5) ja kolmest aadressinõelast (1, 2, 3).

ROM -i lühike ajalugu

Varased "Stored -Program" tüüpi arvutid - näiteks lauaarvutid ja klaviatuuritõlgid - hakkasid kasutama ROM -i dioodmaatriks -ROM -i kujul. See oli mälu, mis koosnes spetsiaalselt organiseeritud PCB -le paigutatud diskreetsetest pooljuhtdioodidest. See andis integraallülituste tulekuga võimaluse maski ROMile. Mask ROM sarnaneb palju dioodmaatriksi ROMiga, ainult seda rakendati palju väiksemas ulatuses. See aga tähendas, et te ei saanud lihtsalt paari dioodi jootekolbiga ringi liigutada ja ümber programmeerida. Mask ROM tuli programmeerida tootja poolt ja seda ei saanud hiljem muuta.

Kahjuks oli Mask ROM kallis ja selle valmistamine võttis kaua aega, sest iga uue programmi jaoks oli vaja valukojas toota täiesti uus seade. 1956. aastal aga lahendati see probleem PROM (Programmable ROM) leiutisega, mis võimaldas arendajatel kiipe ise programmeerida. See tähendas, et tootjad saaksid toota miljoneid sama programmeerimata seadet, mis muutis selle odavamaks ja praktilisemaks. PROM-i saab aga kõrgepinge programmeerimisseadme abil kirjutada ainult üks kord. Pärast PROM -seadme programmeerimist ei olnud võimalik seadet programmeerimata olekusse tagasi viia.

See muutus 1971. aastal, kui leiutati EPROM (kustutatav programmeeritav ROM), mis lisaks akronüümile veel ühe tähe lisamisele tõi kaasa seadme kustutamise ja tugeva UV -valgusallika abil tühja oleku taastamise. Just nii, IC -le tuli selle ümberprogrammeerimiseks heledat valgust heita, kui lahe see on? Selgub, et see on päris lahe, kui te pole arendaja, kes töötab püsivara kallal. Sellisel juhul soovite tõesti, et saaksite seadme ümber programmeerida, kasutades elektrisignaale. See sai lõpuks reaalsuseks 1983. aastal, kui arendati välja EEPROM (Electrically Erasable Programmable ROM) ja sellega jõuame praeguse kohmaka lühendini.

2. samm: EEPROMi veidrused

EEPROMil kui andmete salvestamise meetodil on kaks peamist puudust. Enamikus rakendustes kaaluvad plussid üles miinused, kuid enne EEPROM -i lisamist oma järgmisse disaini peaksite neid teadma.

Esiteks, tehnoloogia, mis paneb EEPROMi tööle, piirab ka selle uuesti kirjutamise kordade arvu. See on seotud sellega, et elektronid jäävad ROM -i moodustavate transistorite lõksu ja kogunevad, kuni laengu erinevus "1" ja "0" vahel on tundmatu. Kuid ärge muretsege, enamiku EEPROM-ide maksimaalne ümberkirjutamisarv on 1 miljon või rohkem. Kuni te pidevalt EEPROM -i ei kirjuta, on ebatõenäoline, et jõuate selle maksimumini. Teiseks ei kustutata EEPROM -i, kui eemaldate sellest toite, kuid see ei hoia teie andmeid lõputult. Elektronid võivad transistoridest ja isolaatori kaudu triivida, kustutades aja jooksul EEPROM -i. See juhtub tavaliselt aastate jooksul (kuigi kuumusega saab seda kiirendada). Enamik tootjaid väidab, et teie andmed on EEPROM -is toatemperatuuril 10 aastat või kauem ohutud. Ja veel üks asi, mida peaksite oma projekti jaoks EEPROM -seadme valimisel meeles pidama. EEPROM -i võimsust mõõdetakse bittides, mitte baitides. 512K EEPROM mahutab 512Kbit andmeid, teisisõnu vaid 64KB.

Samm: Arduino riistvaraühendus

Arduino riistvaraühendus
Arduino riistvaraühendus
Arduino riistvaraühendus
Arduino riistvaraühendus

Olgu, nüüd, kui me teame, mis on EEPROM, ühendame selle ja vaatame, mida see suudab! Seadme rääkimiseks peame ühendama nii toite kui ka I²C jadaühendused. See seade töötab eelkõige 5 V alalisvoolul, nii et me ühendame selle meie Arduino UNO 5 V väljundiga. Samuti vajavad I²C liinid tõmbe takistit, et side toimuks õigesti. Nende takistite väärtus sõltub nende liinide mahtuvusest ja sagedusest, mida soovite edastada, kuid hea rusikareegel mittekriitiliste rakenduste jaoks hoitakse lihtsalt kΩ vahemikus. Selles näites kasutame 4,7 kΩ tõmbetakistit.

Sellel seadmel on kolm tihvti I²C aadressi valimiseks, nii et teil oleks siinis rohkem kui üks EEPROM ja saaksite neid erinevalt adresseerida. Võiksite need kõik lihtsalt maandada, kuid me ühendame need juhtmetega, et saaksime hiljem õpetuses suurema võimsusega seadme sisse lülitada.

Kasutame leivaplaati, et kõik omavahel ühendada. Alloleval diagrammil on näidatud õige ühendamine enamiku I²C EEPROM-seadmete, sealhulgas meie müüdava 24-seeria mikrokiibi EEPROM-i jaoks.

Samm: lugemine ja kirjutamine

Enamiku ajast, kui kasutate EEPROM -i koos mikrokontrolleriga, ei pea te tegelikult kogu mälu sisu korraga nägema. Vajadusel loete ja kirjutate baite siin ja seal. Selles näites kirjutame aga terve faili EEPROM -i ja loeme selle siis uuesti välja, et saaksime seda oma arvutis vaadata. See peaks meile EEPROM -i kasutamise ideega rahule jääma ja andma ka tunde, kui palju andmeid väikesele seadmele tegelikult mahub.

Kirjuta midagi

Meie näidisvisand võtab lihtsalt jadaporti siseneva baidi ja kirjutab selle EEPROM -i, jälgides, mitu baiti oleme mällu kirjutanud.

Mälu baidi kirjutamine EEPROM -i toimub tavaliselt kolmes etapis:

  1. Saatke mäluaadressi kõige olulisem bait, kuhu soovite kirjutada.
  2. Saatke mäluaadressi kõige vähem oluline bait, kuhu soovite kirjutada.
  3. Saatke andmebait, mida soovite sellesse kohta salvestada.

Seal on ilmselt mõned märksõnad, mis seletavad:

Mäluaadressid

Kui kujutate ette kõiki 512 kbitise EEPROM -i baite, mis seisavad reas 0 kuni 64000 - kuna baiti on 8 bitti ja seetõttu saate 512 kbitisele EEPROM -ile mahutada 64000 baiti -, siis on koht mäluaadress rida, kust leiate konkreetse baidi. Peame selle aadressi EEPROMile saatma, et see teaks, kuhu panna saadetav bait.

Kõige olulisemad ja kõige vähem olulised baidid

Kuna 256 Kbitises EEPROM -is on 32 000 võimalikku kohta - ja kuna 255 on suurim arv, mida saate ühe baidi kohta kodeerida -, peame selle aadressi saatma kahe baidiga. Esiteks saadame kõige olulisema baidi (MSB) - sel juhul esimesed 8 bitti. Seejärel saadame kõige vähem olulise baidi (LSB) - teise 8 bitti. Miks? Kuna niimoodi eeldab seade nende vastuvõtmist, on see kõik.

Lehe kirjutamine

Ühe baidi korraga kirjutamine on hea, kuid enamikul EEPROM -seadmetel on midagi, mida nimetatakse "lehe kirjutamise puhveriks", mis võimaldab teil kirjutada mitu baiti korraga samamoodi nagu ühe baidi. Kasutame seda oma näitejoonises ära. EEPROM kasutab sisemist loendurit, mis suurendab automaatselt mälu asukohta iga järgneva vastuvõetud andmebaidiga. Kui mäluaadress on saadetud, saame seda jälgida kuni 64 baiti andmetega. EEPROM eeldab (õigesti), et aadress 312, millele järgneb 10 baiti, salvestab baiti 0 aadressil 312, baiti 1 aadressil 313, baiti 2 aadressil 314 jne.

Lugege midagi

EEPROMist lugemine järgib põhimõtteliselt sama kolmeastmelist protsessi nagu EEPROMile kirjutamine:

  1. Saatke mäluaadressi kõige olulisem bait, kuhu soovite kirjutada.
  2. Saatke mäluaadressi kõige vähem oluline bait, kuhu soovite kirjutada.
  3. Küsige andmebaiti selles kohas.

Samm: skeemid ja kood

Skeem ja kood
Skeem ja kood

Kood:

#kaasake

#define eeprom 0x50 // määratleb EEPROM -i baasaadressi

tühine seadistus () {

Wire.begin (); // loob traadi objekti

Seriaalne algus (9600);

allkirjastamata int aadress = 0; // EEPROMi esimene aadress

Serial.println ("Kirjutame sihtnumbri 22222, postiindeks"); for (aadress = 0; aadress <5; aadress ++) writeEEPROM (eeprom, aadress, '2'); // Kirjutab EEPROM -ile 22222

for (aadress = 0; aadress <5; aadress ++) {Serial.print (readEEPROM (eeprom, address), HEX); }}

void loop () {

/*funktsioonis loop () pole midagi, sest me ei taha, et arduino kirjutaks sama asja korduvalt EEPROMile ikka ja jälle. Soovime lihtsalt ühekordset kirjutamist, nii et EEPROM-ide korral välditakse funktsiooni loop ().*/}

// määratleb funktsiooni writeEEPROM

void writeEEPROM (int seadmeaadress, allkirjastamata int eeaddress, baitandmed) {Wire.beginTransmission (seadmeaadress); Wire.write ((int) (eadress >> 8)); // kirjutab MSB Wire.write ((int) (eeaddress & 0xFF)); // kirjutab LSB Wire.write (andmed); Wire.endTransmission (); }

// määratleb funktsiooni readEEPROM

bait lugedaEEPROM (int seadme aadress, allkirjastamata int eeaddress) {bait rdata = 0xFF; Wire.beginTransmission (seadme aadress); Wire.write ((int) (eadress >> 8)); // kirjutab MSB Wire.write ((int) (eeaddress & 0xFF)); // kirjutab LSB Wire.endTransmission (); Wire.requestFrom (seadme aadress, 1); if (Wire.available ()) rdata = Wire.read (); tagastama rdata; }

Soovitan: