Turinys:

Duomenų skaitymas ir rašymas į išorinį EEPROM naudojant „Arduino“: 5 žingsniai
Duomenų skaitymas ir rašymas į išorinį EEPROM naudojant „Arduino“: 5 žingsniai
Anonim
Duomenų skaitymas ir rašymas į išorinį EEPROM naudojant „Arduino“
Duomenų skaitymas ir rašymas į išorinį EEPROM naudojant „Arduino“

EEPROM reiškia elektriškai ištrinamą programuojamą tik skaitomą atmintį.

EEPROM yra labai svarbus ir naudingas, nes tai yra nepastovi atminties forma. Tai reiškia, kad net ir išjungus plokštę, EEPROM mikroschema vis tiek išsaugo jai parašytą programą. Taigi, kai išjungiate plokštę ir vėl įjungiate, galite paleisti programą, kuri buvo parašyta EEPROM. Taigi iš esmės EEPROM saugo ir vykdo programą, kad ir kokia ji būtų. Tai reiškia, kad galite išjungti įrenginį, laikyti jį išjungtą 3 dienas, grįžti ir įjungti, ir jis vis tiek gali paleisti jame užprogramuotą programą. Taip veikia dauguma buitinių elektroninių prietaisų.

Šį projektą remia LCSC. Aš naudoju elektroninius komponentus iš LCSC.com. LCSC yra tvirtai įsipareigojusi pasiūlyti platų autentiškų, aukštos kokybės elektroninių komponentų pasirinkimą už geriausią kainą su pasauliniu laivybos tinklu į daugiau nei 200 šalių. Užsiregistruokite šiandien ir gaukite 8 USD nuolaidą už pirmąjį užsakymą.

EEPROM taip pat yra labai efektyvus tuo, kad atskirus tradicinio EEPROM baitus galima savarankiškai skaityti, ištrinti ir perrašyti. Daugelyje kitų rūšių nepastovios atminties to padaryti negalima. Serijiniai EEPROM įrenginiai, tokie kaip 24 serijos „Microchip“EEPROM, leidžia pridėti daugiau atminties prie bet kurio įrenginio, galinčio kalbėti I²C.

Prekės

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 MHz krištolas
  4. Bandomoji Lenta
  5. Rezistorius 4,7 kΩ x 2
  6. Kondensatorius 22 pF x 2

1 žingsnis: EEPROM pagrindai

EEPROM pagrindai
EEPROM pagrindai

„Microchip 24LC2512“mikroschemą galima įsigyti 8 kontaktų DIP pakuotėje. 24LC512 kaiščiai yra gana tiesūs ir susideda iš maitinimo (8), GND (4), apsaugos nuo rašymo (7), SCL/SDA (6, 5) ir trijų adresų kaiščių (1, 2, 3).

Trumpa ROM istorija

Ankstyvieji „Stored -Program“tipo kompiuteriai, tokie kaip staliniai skaičiuotuvai ir klaviatūros vertėjai, pradėjo naudoti ROM kaip diodų matricos ROM. Tai buvo atmintis, sudaryta iš atskirų puslaidininkinių diodų, uždėtų ant specialiai organizuotos PCB. Tai užleido vietą „Mask ROM“atsiradus integruotiems grandynams. Kaukės ROM buvo panašus į „Diode Matrix ROM“, tik jis buvo įdiegtas daug mažesniu mastu. Tačiau tai reiškė, kad negalėjote tiesiog perkelti poros diodų su lituokliu ir perprogramuoti. Kaukės ROM turėjo būti užprogramuotas gamintojo ir vėliau nebuvo pakeistas.

Deja, kaukių ROM buvo brangus ir užtruko ilgai, nes kiekviena nauja programa reikalavo visiškai naujo prietaiso, kurį turėjo pagaminti liejykla. Tačiau 1956 m. Ši problema buvo išspręsta išradus PROM (programuojamą ROM), kuris leido kūrėjams patiems programuoti lustus. Tai reiškė, kad gamintojai galėjo pagaminti milijonus to paties neužprogramuoto įrenginio, todėl jis tapo pigesnis ir praktiškesnis. Tačiau į PROM buvo galima įrašyti tik vieną kartą naudojant aukštos įtampos programavimo įrenginį. Užprogramavus PROM įrenginį, nebuvo galimybės grąžinti įrenginio į neprogramuotą būseną.

Tai pasikeitė 1971 m., Kai buvo išrastas EPROM (ištrinamas programuojamas ROM), kuris, be akronimo pridėjus dar vieną raidę, suteikė galimybę ištrinti įrenginį ir grąžinti jį į „tuščią“būseną naudojant stiprų UV šviesos šaltinį. Teisingai, turėjote apšviesti ryškią šviesą IC, kad ją perprogramuotumėte, kaip tai šaunu? Na, pasirodo, tai gana šaunu, nebent esate kūrėjas, dirbantis su programine įranga, tokiu atveju tikrai norėtumėte, kad galėtumėte perprogramuoti įrenginį naudodami elektrinius signalus. Tai pagaliau tapo realybe 1983 m., Sukūrus EEPROM (Electrically Erasable Programmable ROM) ir su tuo mes pasiekiame dabartinį sunkų akronimą.

2 žingsnis: EEPROM savybės

Yra du pagrindiniai EEPROM, kaip duomenų saugojimo metodo, trūkumai. Daugelyje programų privalumai nusveria minusus, tačiau prieš juos įtraukdami į kitą dizainą, turėtumėte juos žinoti.

Visų pirma, technologija, leidžianti veikti EEPROM, taip pat riboja, kiek kartų ją galima perrašyti. Tai susiję su elektronų įstrigimu tranzistoriuose, sudarančiuose ROM, ir kaupiasi tol, kol įkrovimo skirtumas tarp „1“ir „0“yra neatpažįstamas. Tačiau nesijaudinkite, daugumos EEPROM maksimalus perrašymo skaičius yra 1 milijonas ar daugiau. Kol nerašysite nuolat į EEPROM, mažai tikėtina, kad pasieksite šį maksimumą. Antra, jei pašalinsite maitinimą, EEPROM nebus ištrintas, tačiau jis neribos jūsų duomenų neribotą laiką. Elektronai gali nukristi iš tranzistorių ir per izoliatorių, laikui bėgant efektyviai ištrindami EEPROM. Tačiau tai paprastai įvyksta bėgant metams (nors tai gali pagreitinti šiluma). Dauguma gamintojų teigia, kad jūsų duomenys yra saugūs EEPROM 10 ar daugiau metų kambario temperatūroje. Ir dar vienas dalykas, kurį turėtumėte atsiminti, pasirinkdami savo projektui EEPROM įrenginį. EEPROM talpa matuojama baitais, o ne baitais. 512K EEPROM talpins 512 KB duomenų, kitaip tariant, tik 64 KB.

3 žingsnis: „Arduino“aparatinės įrangos prijungimas

„Arduino“aparatinės įrangos prijungimas
„Arduino“aparatinės įrangos prijungimas
„Arduino“aparatinės įrangos prijungimas
„Arduino“aparatinės įrangos prijungimas

Gerai, dabar žinodami, kas yra EEPROM, prijunkime vieną ir pažiūrėkime, ką jis gali padaryti! Kad mūsų įrenginys kalbėtų, turėsime prijungti maitinimą ir I²C nuoseklias linijas. Visų pirma, šis įrenginys veikia esant 5 V nuolatinei įtampai, todėl prijungsime jį prie mūsų „Arduino UNO“5 V išvesties. Be to, norint, kad ryšys vyktų tinkamai, I²C linijoms reikės traukiamųjų rezistorių. Šių rezistorių vertė priklauso nuo norimų perduoti linijų talpos ir dažnio, tačiau gera nekritinių programų nykščio taisyklė tiesiog laikoma kΩ diapazone. Šiame pavyzdyje naudosime 4,7 kΩ ištraukiamus rezistorius.

Šiame įrenginyje yra trys smeigtukai, skirti pasirinkti I²C adresą, tokiu būdu galite turėti daugiau nei vieną EEPROM magistralėje ir adresuoti juos skirtingai. Galite tiesiog įžeminti juos visus, bet mes juos prijungsime, kad vėliau pamokoje galėtume įdėti didesnės talpos įrenginį.

Mes naudosime duonos lentą, kad sujungtume viską. Žemiau pateiktoje diagramoje parodyta teisinga daugelio I²C EEPROM įrenginių, įskaitant mūsų parduodamą 24 serijos „Microchip“EEPROM, prijungimas.

4 žingsnis: skaitymas ir rašymas

Dažniausiai naudojant EEPROM kartu su mikrovaldikliu, iš tikrųjų nereikės matyti viso atminties turinio vienu metu. Jūs tiesiog skaitysite ir rašysite baitus čia ir ten, jei reikia. Tačiau šiame pavyzdyje mes parašysime visą failą į EEPROM ir tada perskaitysime jį atgal, kad galėtume jį peržiūrėti savo kompiuteryje. Tai turėtų mums padėti įsisąmoninti idėją naudoti EEPROM, taip pat pajusti, kiek duomenų tikrai telpa mažame įrenginyje.

Rašyti kažką

Mūsų pavyzdinis eskizas paprasčiausiai paims bet kokį baitą, patekusį per nuoseklųjį prievadą, ir įrašys jį į EEPROM, stebėdamas, kiek baitų įrašėme į atmintį.

Atminties baitas į EEPROM paprastai įrašomas trimis etapais:

  1. Siųskite svarbiausią atminties adreso baitą, į kurį norite rašyti.
  2. Siųskite mažiausiai atminties adreso, į kurį norite rašyti, baitą.
  3. Siųskite duomenų baitą, kurį norite išsaugoti šioje vietoje.

Tikriausiai yra keletas pagrindinių žodžių, kurie tiesiog nepaaiškina:

Atminties adresai

Jei įsivaizduojate visus 512 Kbit EEPROM baitus, stovinčius eilutėje nuo 0 iki 64000 - nes yra 8 bitai iki baito ir todėl galite sutalpinti 64000 baitų į 512 Kbit EEPROM, tada atminties adresas yra vieta eilutę, kurioje rasite konkretų baitą. Turime nusiųsti tą adresą EEPROM, kad jis žinotų, kur įdėti siunčiamą baitą.

Reikšmingiausi ir mažiausiai reikšmingi baitai

Kadangi 256 Kbit EEPROM yra 32 000 galimų vietų - ir 255 yra didžiausias skaičius, kurį galite užkoduoti viename baite - mes turime išsiųsti šį adresą dviem baitais. Pirma, siunčiame svarbiausią baitą (MSB) - šiuo atveju pirmuosius 8 bitus. Tada siunčiame mažiausiai reikšmingą baitą (LSB) - antrus 8 bitus. Kodėl? Kadangi prietaisas tikisi juos gauti, tai viskas.

Puslapio rašymas

Rašyti vieną baitą vienu metu yra gerai, tačiau dauguma EEPROM įrenginių turi vadinamąjį „puslapio rašymo buferį“, kuris leidžia vienu metu rašyti kelis baitus taip pat, kaip ir vieną baitą. Mes pasinaudosime tuo savo pavyzdiniame eskize. EEPROM naudoja vidinį skaitiklį, kuris automatiškai padidina atminties vietą kiekvienu gautu duomenų baitu. Kai atminties adresas bus išsiųstas, galėsime jį sekti iki 64 baitų duomenų. EEPROM daro prielaidą (teisingai), kad 312 adresas, po kurio eina 10 baitų, įrašys 0 baitą 312 adresu, 1 baitą 313 adresu, 2 baitą 314 adresu ir pan.

Skaityk Kažką

Skaitymas iš EEPROM iš esmės vyksta tuo pačiu trijų žingsnių procesu, kaip ir rašymas EEPROM:

  1. Siųskite svarbiausią atminties adreso baitą, į kurį norite rašyti.
  2. Siųskite mažiausiai atminties adreso, į kurį norite rašyti, baitą.
  3. Paprašykite duomenų baito toje vietoje.

5 žingsnis: schemos ir kodas

Schemos ir kodas
Schemos ir kodas

Kodas:

#įtraukti

#define eeprom 0x50 // apibrėžia pagrindinį EEPROM adresą

void setup () {

Wire.begin (); // sukuria vielos objektą

Serial.begin (9600);

nepasirašytas int adresas = 0; // pirmasis EEPROM adresas

Serial.println ("Mes rašome pašto kodą 22222, pašto kodą"); for (adresas = 0; adresas <5; adresas ++) writeEEPROM (eeprom, address, '2'); // Įrašo 22222 į EEPROM

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

void loop () {

/*funkcijoje loop () nieko nėra, nes nenorime, kad arduino pakartotinai rašytų tą patį EEPROM. Mes norime tik vienkartinio rašymo, todėl naudojant ciklą () išvengiama naudojant EEPROM.*/}

// apibrėžia funkciją writeEEPROM

void writeEEPROM (int deviceaddress, unsigned int eeaddress, byte data) {Wire.beginTransmission (prietaiso adresas); Wire.write ((int) (el. Adresas >> 8)); // rašo MSB Wire.write ((int) (eeaddress & 0xFF)); // rašo LSB Wire.write (duomenys); Wire.endTransmission (); }

// apibrėžia funkciją readEEPROM

baitas skaitymasEEPROM (int įrenginio adresas, nepasirašytas int eadresas) {baitas rdata = 0xFF; Wire.beginTransmission (įrenginio adresas); Wire.write ((int) (el. Adresas >> 8)); // rašo MSB Wire.write ((int) (eeaddress & 0xFF)); // rašo LSB Wire.endTransmission (); Wire.requestFrom (deviceaddress, 1); if (Wire.available ()) rdata = Wire.read (); grąžinti rdata; }

Rekomenduojamas: