Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-23 15:04
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
- EEPROM - 24LC512
- ATmega328P-PU
- Cristal de 16 MHz
- Pană de pâine
- Rezistor 4.7k Ohm x 2
- Condensator 22 pF x 2
Pasul 1: Noțiuni de bază 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
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:
- Trimiteți cel mai semnificativ octet al adresei de memorie pe care doriți să o scrieți.
- Trimiteți cel mai puțin semnificativ octet al adresei de memorie pe care doriți să o scrieți.
- 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:
- Trimiteți cel mai semnificativ octet al adresei de memorie pe care doriți să o scrieți.
- Trimiteți cel mai puțin semnificativ octet al adresei de memorie pe care doriți să o scrieți.
- Solicitați octetul de date la locația respectivă.
Pasul 5: 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:
Citirea și graficarea datelor senzorului de lumină și temperatură cu Raspberry Pi: 5 pași
Citirea și graficarea datelor senzorului de lumină și temperatură cu Raspberry Pi: În acest instructiv veți învăța cum să citiți un senzor de lumină și temperatură cu raspberry pi și convertorul analogic digital ADS1115 și să-l graficați folosind matplotlib. Să începem cu materialele necesare
Citirea datelor senzorului cu ultrasunete (HC-SR04) pe un ecran LCD 128 × 128 și vizualizarea acestuia folosind Matplotlib: 8 pași
Citirea datelor senzorului cu ultrasunete (HC-SR04) pe un ecran LCD de 128 × 128 și vizualizarea acestuia folosind Matplotlib: În acest instructable, vom folosi MSP432 LaunchPad + BoosterPack pentru a afișa datele unui senzor ultrasonic (HC-SR04) pe un 128 × 128 LCD și trimiteți datele către PC în serie și vizualizați-le folosind Matplotlib
Citirea temperaturii folosind senzorul de temperatură LM35 cu Arduino Uno: 4 pași
Citirea temperaturii folosind senzorul de temperatură LM35 cu Arduino Uno: Bună băieți, în acest instructables vom învăța cum să utilizați LM35 cu Arduino. Lm35 este un senzor de temperatură care poate citi valori de temperatură de la -55 ° C la 150 ° C. Este un dispozitiv cu 3 terminale care furnizează tensiune analogică proporțională cu temperatura. Bună g
Achiziționarea datelor și sistemul de vizualizare a datelor pentru o bicicletă electrică MotoStudent: 23 de pași
Achiziționarea datelor și sistemul de vizualizare a datelor pentru o bicicletă electrică MotoStudent: un sistem de achiziție de date este o colecție de hardware și software care lucrează împreună pentru a colecta date de la senzori externi, a le stoca și a le procesa ulterior, astfel încât să poată fi vizualizate grafic și analizate, permițând inginerilor să facă
Citirea valorilor de pe un dispozitiv BLE folosind CSR1010 și Dragonboard 410c: 6 pași
Citirea valorilor de pe un dispozitiv BLE folosind CSR1010 și Dragonboard 410c: Acest tutorial arată cum să citiți valorile de pe dispozitivul BLE CSR1010 folosind Dragonboard 410c cu Linaro În acest exemplu, CSR1010 emulează un senzor de ritm cardiac