Cuprins:

Citirea și scrierea datelor pe EEPROM externă folosind Arduino: 5 pași
Citirea și scrierea datelor pe EEPROM externă folosind Arduino: 5 pași

Video: Citirea și scrierea datelor pe EEPROM externă folosind Arduino: 5 pași

Video: Citirea și scrierea datelor pe EEPROM externă folosind Arduino: 5 pași
Video: Using Micro SD Card and Data logging with Arduino | Arduino Step by Step Course Lesson 106 2024, Iulie
Anonim
Citirea și scrierea datelor pe EEPROM externă folosind Arduino
Citirea și scrierea datelor pe EEPROM externă folosind Arduino

EEPROM înseamnă Memorie de citire programabilă ștergibilă electric.

EEPROM este foarte importantă și utilă, deoarece este o formă de memorie nevolatilă. Aceasta înseamnă că, chiar și când placa este oprită, cipul EEPROM păstrează în continuare programul care i-a fost scris. Deci, atunci când opriți placa și apoi o reporniți, programul care a fost scris în EEPROM poate fi rulat. Deci, practic, EEPROM stochează și rulează un program indiferent de ce. Aceasta înseamnă că puteți opri un dispozitiv, îl puteți ține oprit timp de 3 zile și vă puteți întoarce și porni și poate rula în continuare programul care a fost programat în el. Așa funcționează majoritatea dispozitivelor electronice pentru consumatori.

Acest proiect este sponsorizat de LCSC. Am folosit componente electronice de la LCSC.com. LCSC are un angajament puternic de a oferi o selecție largă de componente electronice autentice și de înaltă calitate la cel mai bun preț, cu o rețea globală de transport către peste 200 de țări. Înscrieți-vă astăzi și primiți 8 USD de reducere la prima comandă.

EEPROM este, de asemenea, foarte eficientă întrucât octeții individuali dintr-o EEPROM tradițională pot fi citite, șterse și rescrise independent. În majoritatea celorlalte tipuri de memorie nevolatilă, acest lucru nu se poate face. Dispozitivele EEPROM seriale, cum ar fi EEPROM din seria 24 Microchip, vă permit să adăugați mai multă memorie la orice dispozitiv care poate vorbi I²C.

Provizii

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. Cristal de 16 MHz
  4. Pană de pâine
  5. Rezistor 4.7k Ohm x 2
  6. Condensator 22 pF x 2

Pasul 1: Noțiuni de bază EEPROM

Bazele EEPROM
Bazele EEPROM

Cipul Microchip 24LC2512 poate fi achiziționat într-un pachet DIP cu 8 pini. Pinii de pe 24LC512 sunt destul de simpli și constau din putere (8), GND (4), protecție la scriere (7), SCL / SDA (6, 5) și trei pini de adresă (1, 2, 3).

O scurtă istorie a ROM

Primele computere de tip „Stored-Program” - cum ar fi calculatoarele de birou și interpreții de tastatură - au început să utilizeze ROM sub formă de Diode Matrix ROM. Aceasta a fost o memorie formată din diode semiconductoare discrete plasate pe un PCB special organizat. Acest lucru a dat loc Mask ROM-ului odată cu apariția circuitelor integrate. Mask ROM seamănă foarte mult cu Diode Matrix ROM doar că a fost implementat la o scară mult mai mică. Acest lucru însemna, totuși, că nu puteți muta doar câteva diode cu un fier de lipit și reprogramați-l. Masca ROM a trebuit să fie programată de producător și ulterior nu a mai putut fi modificată.

Din păcate, Mask ROM a fost scump și a durat mult timp pentru a fi produs, deoarece fiecare nou program necesită un dispozitiv nou pentru a fi fabricat de o turnătorie. În 1956, însă, această problemă a fost rezolvată prin invenția PROM (Programmable ROM) care le-a permis dezvoltatorilor să programeze singuri cipurile. Aceasta a însemnat că producătorii ar putea produce milioane de același dispozitiv neprogramat, ceea ce l-a făcut mai ieftin și mai practic. PROM, totuși, ar putea fi scris numai o dată folosind un dispozitiv de programare de înaltă tensiune. După ce a fost programat un dispozitiv PROM, nu a existat nicio modalitate de a readuce dispozitivul la starea sa neprogramată.

Acest lucru s-a schimbat în 1971 odată cu invenția EPROM (Erasable Programmable ROM) care - pe lângă adăugarea unei alte litere la acronim - a adus cu sine capacitatea de a șterge dispozitivul și a-l readuce într-o stare „goală” folosind o sursă puternică de lumină UV. Așa este, a trebuit să străluciți o lumină puternică pe IC pentru a o reprograma, cât de cool este asta? Ei bine, se dovedește că este destul de cool, cu excepția cazului în care sunteți un dezvoltator care lucrează la firmware, caz în care ați dori cu adevărat să puteți reprograma dispozitivul folosind semnale electrice. Acest lucru a devenit în cele din urmă o realitate în 1983 odată cu dezvoltarea EEPROM (Electrically Erasable Programmable ROM) și, cu aceasta, ajungem la acronimul dificil din ziua actuală.

Pasul 2: ciudățenii EEPROM

Există două dezavantaje majore ale EEPROM ca metodă de stocare a datelor. În majoritatea aplicațiilor, profesioniștii depășesc dezavantajele, dar ar trebui să fiți conștienți de acestea înainte de a încorpora EEPROM în următorul dvs. design.

În primul rând, tehnologia care face ca EEPROM să funcționeze limitează, de asemenea, de câte ori poate fi rescrisă. Acest lucru are legătură cu electronii care sunt prinși în tranzistoarele care alcătuiesc ROM-ul și se acumulează până când diferența de încărcare dintre un „1” și un „0” este de nerecunoscut. Dar nu vă faceți griji, majoritatea EEPROM-urilor au un număr de rescriere maxim de 1 milion sau mai mult. Atâta timp cât nu scrieți continuu către EEPROM, este puțin probabil să atingeți acest maxim. În al doilea rând, EEPROM nu va fi ștearsă dacă scoateți alimentarea din ea, dar nu va păstra datele dvs. pe termen nelimitat. Electronii pot ieși din tranzistori și prin izolator, ștergând efectiv EEPROM în timp. Acestea fiind spuse, acest lucru se întâmplă de obicei pe parcursul anilor (deși poate fi accelerat de căldură). Majoritatea producătorilor spun că datele dvs. sunt sigure pe EEPROM timp de 10 ani sau mai mult la temperatura camerei. Și mai trebuie să ții cont de un lucru atunci când selectezi un dispozitiv EEPROM pentru proiectul tău. Capacitatea EEPROM este măsurată în biți și nu în octeți. O EEPROM de 512K va conține 512 KB de date, cu alte cuvinte, doar 64 KB.

Pasul 3: Arduino Hardware Hookup

Conectare hardware Arduino
Conectare hardware Arduino
Conectare hardware Arduino
Conectare hardware Arduino

Bine, acum că știm ce este EEPROM, hai să conectăm una și să vedem ce poate face! Pentru a face ca dispozitivul nostru să vorbească, va trebui să conectăm curent, precum și liniile seriale I²C. Acest dispozitiv, în special, rulează la 5VDC, așa că îl vom conecta la ieșirea de 5V a Arduino UNO. De asemenea, liniile I²C vor avea nevoie de rezistențe de tracțiune pentru ca comunicarea să aibă loc corect. Valoarea acestor rezistențe depinde de capacitatea liniilor și de frecvența pe care doriți să o comunicați, dar o regulă bună pentru aplicațiile non-critice este doar menținută în domeniul kΩ. În acest exemplu, vom folosi rezistențe de tracțiune de 4.7kΩ.

Există trei pini pe acest dispozitiv pentru a selecta adresa I²C, astfel puteți avea mai multe EEPROM pe autobuz și le puteți adresa fiecare diferit. Puteți pur și simplu să le împământați pe toate, dar le vom conecta astfel încât să putem introduce un dispozitiv de capacitate mai mare mai târziu în tutorial.

Vom folosi o placă de calcul pentru a conecta totul împreună. Diagrama de mai jos arată conexiunea corectă pentru majoritatea dispozitivelor EEPROM I²C, inclusiv pentru EEPROM din seria Microchip 24 pe care o vindem.

Pasul 4: Citirea și scrierea

De cele mai multe ori, atunci când utilizați o EEPROM împreună cu un microcontroler, nu va trebui să vedeți tot conținutul memoriei simultan. Veți citi și scrie octeți aici și acolo, după cum este necesar. Cu toate acestea, în acest exemplu, vom scrie un întreg fișier în EEPROM și apoi îl vom citi înapoi pentru a-l putea vizualiza pe computerul nostru. Acest lucru ar trebui să ne facă confortabili cu ideea utilizării EEPROM și, de asemenea, să ne ofere o senzație pentru cât de multe date pot încadra într-adevăr pe un dispozitiv mic.

Scrie ceva

Schița noastră de exemplu va lua pur și simplu orice octet care intră peste portul serial și îl scrie în EEPROM, urmărind pe parcurs câte octeți am scris în memorie.

Scrierea unui octet de memorie în EEPROM are loc în general în trei pași:

  1. Trimiteți cel mai semnificativ octet al adresei de memorie pe care doriți să o scrieți.
  2. Trimiteți cel mai puțin semnificativ octet al adresei de memorie pe care doriți să o scrieți.
  3. Trimiteți octetul de date pe care doriți să îl stocați în această locație.

Există probabil câteva cuvinte cheie acolo care explică pur și simplu:

Adrese de memorie

Dacă vă imaginați toți octeții dintr-o EEPROM de 512 Kbit stând într-o linie de la 0 la 64000 - deoarece există 8 biți pe un octet și, prin urmare, puteți încadra 64000 de octeți pe o EEPROM de 512 Kbit - atunci o adresă de memorie este locul în linie unde ați găsi un anumit octet. Trebuie să trimitem acea adresă către EEPROM, astfel încât să știe unde să plaseze octetul pe care îl trimitem.

Octetii cei mai semnificativi și cei mai puțin semnificativi

Deoarece există 32000 de locuri posibile într-o EEPROM de 256 Kbit - și pentru că 255 este cel mai mare număr pe care îl puteți codifica într-un octet - trebuie să trimitem această adresă în doi octeți. În primul rând, trimitem cel mai semnificativ octet (MSB) - primii 8 biți în acest caz. Apoi trimitem cel mai puțin semnificativ octet (LSB) - al doilea 8 biți. De ce? Pentru că așa se așteaptă dispozitivul să le primească, atât.

Scrierea paginii

Scrierea unui octet la un moment dat este în regulă, dar majoritatea dispozitivelor EEPROM au ceva numit „tampon de scriere a paginilor”, care vă permite să scrieți mai mulți octeți simultan în același mod în care ați face un singur octet. Vom profita de acest lucru în schița noastră de exemplu. EEPROM utilizează un contor intern care mărește automat locația memoriei cu fiecare octet de date pe care îl primește. Odată ce a fost trimisă o adresă de memorie, o putem urmări cu până la 64 de octeți de date. EEPROM presupune (pe bună dreptate) că o adresă de 312 urmată de 10 octeți va înregistra octetul 0 la adresa 312, octetul 1 la adresa 313, octetul 2 la adresa 314 și așa mai departe.

Citiți ceva

Citirea din EEPROM urmează practic același proces în trei pași ca și scrierea către EEPROM:

  1. Trimiteți cel mai semnificativ octet al adresei de memorie pe care doriți să o scrieți.
  2. Trimiteți cel mai puțin semnificativ octet al adresei de memorie pe care doriți să o scrieți.
  3. Solicitați octetul de date la locația respectivă.

Pasul 5: Scheme și cod

Scheme și cod
Scheme și cod

Cod:

#include

#define eeprom 0x50 // definește adresa de bază a EEPROM

configurare nulă () {

Wire.begin (); // creează un obiect Wire

Serial.begin (9600);

adresa int nesemnificată = 0; // prima adresă a EEPROM

Serial.println („Scriem codul poștal 22222, un cod poștal”); for (address = 0; address <5; address ++) writeEEPROM (eeprom, address, '2'); // Scrie 22222 în EEPROM

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

bucla nulă () {

/ * nu există nimic în funcția loop () deoarece nu vrem ca arduino să scrie în mod repetat același lucru în EEPROM de mai multe ori. Vrem doar o scriere unică, astfel încât funcția loop () este evitată cu EEPROM-uri. * /}

// definește funcția writeEEPROM

void writeEEPROM (int deviceaddress, unsigned int eeaddress, octet data) {Wire.beginTransmission (deviceaddress); Wire.write ((int) (eeaddress >> 8)); // scrie MSB Wire.write ((int) (eeaddress & 0xFF)); // scrie LSB Wire.write (date); Wire.endTransmission (); }

// definește funcția readEEPROM

octet cititEEPROM (int deviceaddress, unsigned int eeaddress) {octet rdata = 0xFF; Wire.beginTransmission (deviceaddress); Wire.write ((int) (eeaddress >> 8)); // scrie MSB Wire.write ((int) (eeaddress & 0xFF)); // scrie LSB Wire.endTransmission (); Wire.requestFrom (deviceaddress, 1); if (Wire.available ()) rdata = Wire.read (); returnează rdata; }

Recomandat: