Sadržaj:

Čitanje i pisanje podataka na vanjski EEPROM pomoću Arduina: 5 koraka
Čitanje i pisanje podataka na vanjski EEPROM pomoću Arduina: 5 koraka

Video: Čitanje i pisanje podataka na vanjski EEPROM pomoću Arduina: 5 koraka

Video: Čitanje i pisanje podataka na vanjski EEPROM pomoću Arduina: 5 koraka
Video: LDmicro 14: ЖК-дисплей I2C и часы реального времени DS3231 (программирование лестничной схемы ПЛК микроконтроллера с помощью LDmicro) 2024, Novembar
Anonim
Čitanje i pisanje podataka na vanjski EEPROM pomoću Arduina
Čitanje i pisanje podataka na vanjski EEPROM pomoću Arduina

EEPROM je kratica za električno izbrisiva programabilna memorija samo za čitanje.

EEPROM je vrlo važan i koristan jer je nepromjenjiv oblik memorije. To znači da čak i kada je ploča isključena, EEPROM čip i dalje zadržava program koji je na nju napisan. Dakle, kada isključite ploču, a zatim je ponovo uključite, može se pokrenuti program koji je napisan na EEPROM -u. U osnovi, EEPROM pohranjuje i pokreće program bez obzira na sve. To znači da možete isključiti uređaj, držati ga isključenim 3 dana, te se vratiti i uključiti, a on i dalje može pokrenuti program koji je programiran u njemu. Ovako funkcionira većina potrošačkih elektroničkih uređaja.

Ovaj projekat sponzorira LCSC. Koristio sam elektroničke komponente s LCSC.com. LCSC se snažno zalaže za ponudu širokog izbora originalnih, visokokvalitetnih elektroničkih komponenti po najpovoljnijim cijenama sa globalnom mrežom otpreme u više od 200 zemalja. Prijavite se danas i ostvarite popust od 8 USD pri prvoj narudžbi.

EEPROM je takođe vrlo efikasan jer se pojedini bajtovi u tradicionalnom EEPROM -u mogu nezavisno čitati, brisati i prepisivati. U većini drugih vrsta trajne memorije to se ne može učiniti. Serijski EEPROM uređaji poput EEPROM-a serije Microchip 24 serije omogućuju vam dodavanje više memorije bilo kojem uređaju koji govori I²C.

Supplies

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 MHz kristal
  4. Breadboard
  5. Otpornik 4,7 k Ohm x 2
  6. Kondenzator 22 pF x 2

Korak 1: Osnove EEPROM -a

Osnove EEPROM -a
Osnove EEPROM -a

Čip Microchip 24LC2512 može se kupiti u 8 -polnom DIP paketu. Igle na 24LC512 su prilično jednostavne i sastoje se od napajanja (8), GND (4), zaštite od pisanja (7), SCL/SDA (6, 5) i tri adresna pina (1, 2, 3).

Kratka istorija ROM -a

Rani računari tipa "Stored -Program" - poput stolnih kalkulatora i tumača za tastaturu - počeli su da koriste ROM u obliku Diode Matrix ROM -a. Ovo je memorija sačinjena od diskretnih poluvodičkih dioda postavljenih na posebno organiziranu PCB. Ovo je ustupilo mjesto Mask ROM -u pojavom integriranih kola. Mask ROM je mnogo ličio na Diode Matrix ROM samo što je implementiran u mnogo manjem obimu. To je, međutim, značilo da ne možete jednostavno premjestiti nekoliko dioda lemilicom i reprogramirati ga. Proizvođač je morao programirati ROM za masku i nakon toga se nije mogao mijenjati.

Nažalost, Mask ROM je bio skup i potrebno mu je mnogo vremena za izradu jer je za svaki novi program bila potrebna potpuno nova naprava koju je izradila livnica. Međutim, 1956. godine ovaj problem je riješen izumom PROM -a (Programmable ROM) koji je programerima omogućio da sami programiraju čipove. To je značilo da bi proizvođači mogli proizvesti milijune istih neprogramiranih uređaja što ga je učinilo jeftinijim i praktičnijim. Na PROM se, međutim, moglo pisati samo jednom koristeći visokonaponski uređaj za programiranje. Nakon programiranja PROM uređaja, nije bilo načina da se uređaj vrati u neprogramirano stanje.

To se promijenilo 1971. godine izumom EPROM -a (Erasable Programmable ROM) koji je - osim što je dodao još jedno slovo u akronim - sa sobom donio mogućnost brisanja uređaja i vraćanje u "prazno" stanje korištenjem jakog izvora UV svjetla. Tako je, morali ste zasijati jako svjetlo na IC -u da biste ga reprogramirali, koliko je to super? Pa, pokazalo se da je to super, osim ako niste programer koji radi na firmware -u. U tom slučaju zaista biste htjeli moći reprogramirati uređaj pomoću električnih signala. Ovo je konačno postalo stvarnost 1983. godine sa razvojem EEPROM -a (električno izbrisivog programabilnog ROM -a) i s tim dolazimo do današnjeg nezgrapnog akronima.

Korak 2: Nedostaci EEPROM -a

Postoje dva velika nedostatka EEPROM -a kao načina skladištenja podataka. U većini aplikacija prednosti su veće od nedostataka, ali trebali biste ih biti svjesni prije nego što ugradite EEPROM u svoj sljedeći dizajn.

Prije svega, tehnologija koja omogućuje rad EEPROM-a također ograničava broj ponovnih zapisa. To ima veze s zarobljenjem elektrona u tranzistorima koji čine ROM i stvaraju se sve dok razlika u naboju između "1" i "0" ne bude prepoznatljiva. Ali ne brinite, većina EEPROM-ova ima maksimalni broj ponovnog pisanja od 1 milijun ili više. Sve dok ne pišete neprestano na EEPROM, malo je vjerojatno da ćete postići ovaj maksimum. Drugo, EEPROM se neće izbrisati ako isključite napajanje iz njega, ali neće zadržati vaše podatke neograničeno dugo. Elektroni mogu izlaziti iz tranzistora i kroz izolator, efikasno brišući EEPROM s vremenom. To se obično događa tijekom godina (iako se može ubrzati toplinom). Većina proizvođača kaže da su vaši podaci na EEPROM -u sigurni 10 godina ili više na sobnoj temperaturi. I postoji još jedna stvar koju trebate imati na umu pri odabiru EEPROM uređaja za svoj projekt. Kapacitet EEPROM -a mjeri se u bitovima, a ne u bajtovima. 512K EEPROM će sadržavati 512Kbit podataka, drugim riječima, samo 64KB.

Korak 3: Spajanje Arduino hardvera

Arduino hardversko povezivanje
Arduino hardversko povezivanje
Arduino hardversko povezivanje
Arduino hardversko povezivanje

U redu, sada kada znamo šta je EEPROM, spojimo jedan i vidimo šta može učiniti! Da bi naš uređaj progovorio, morat ćemo spojiti napajanje kao i I²C serijske linije. Ovaj uređaj, posebno, radi na 5VDC pa ćemo ga spojiti na 5V izlaz našeg Arduino UNO -a. Također, I²C linijama će biti potrebni pull-up otpornici za ispravnu komunikaciju. Vrijednost ovih otpornika ovisi o kapacitetu linija i frekvenciji na koju želite komunicirati, ali dobro pravilo za nekritične aplikacije je da ga držite u kΩ rasponu. U ovom primjeru koristit ćemo pull-up otpornike od 4,7 kΩ.

Na ovom uređaju postoje tri pina za odabir I²C adrese, na ovaj način možete imati više od jednog EEPROM -a na sabirnici i svaki ih adresirati različito. Mogli biste ih samo uzemljiti, ali povezat ćemo ih tako da kasnije u vodiču možemo ubaciti uređaj većeg kapaciteta.

Koristit ćemo ploču za povezivanje svega zajedno. Donji dijagram prikazuje ispravno spajanje za većinu I²C EEPROM uređaja, uključujući i Microchip 24-seriju EEPROM-a koje prodajemo.

Korak 4: Čitanje i pisanje

Većinu vremena kada koristite EEPROM zajedno s mikrokontrolerom nećete morati vidjeti sav sadržaj memorije odjednom. Vi ćete samo čitati i pisati bajtove tu i tamo po potrebi. U ovom primjeru, međutim, zapisat ćemo cijelu datoteku na EEPROM, a zatim je čitati kako bismo je mogli vidjeti na svom računaru. To bi nas trebalo zadovoljiti idejom korištenja EEPROM -a, a također i dati osjećaj koliko podataka zaista može stati na mali uređaj.

Napišite nešto

Naša primjerna skica jednostavno će uzeti bilo koji bajt koji dolazi preko serijskog porta i zapisati ga na EEPROM, prateći pritom koliko smo bajtova zapisali u memoriju.

Zapisivanje bajta memorije na EEPROM općenito se odvija u tri koraka:

  1. Pošaljite najznačajniji bajt memorijske adrese na koju želite pisati.
  2. Pošaljite najmanje značajan bajt memorijske adrese na koju želite pisati.
  3. Pošaljite bajt podataka koji želite pohraniti na ovoj lokaciji.

Vjerojatno postoji nekoliko ključnih riječi koje jednostavno objašnjavaju:

Adrese memorije

Ako zamislite da svi bajtovi u EEPROM -u od 512 Kbit stoje u redu od 0 do 64000 - jer postoji 8 bitova u bajtu i stoga možete uklopiti 64000 bajtova u EEPROM od 512 Kbit - tada je memorijska adresa mjesto u redak u kojem ćete pronaći određeni bajt. Moramo poslati tu adresu EEPROM -u kako bi znao gdje smjestiti bajt koji šaljemo.

Najznačajniji i najmanje značajni bajtovi

Budući da postoji 32000 mogućih mjesta u 256 Kbit EEPROM -u - i zato što je 255 najveći broj koji možete kodirati u jednom bajtu - moramo poslati ovu adresu u dva bajta. Prvo šaljemo najznačajniji bajt (MSB) - prvih 8 bita u ovom slučaju. Zatim šaljemo najmanje značajan bajt (LSB) - drugih 8 bita. Zašto? Budući da uređaj očekuje da ih primi, to je sve.

Pisanje stranice

Zapisivanje jednog po jednog bajta je u redu, ali većina EEPROM uređaja ima nešto što se naziva "međuspremnik za pisanje stranice" koji vam omogućava pisanje više bajtova odjednom na isti način kao i jedan bajt. Ovo ćemo iskoristiti u našem primjeru skice. EEPROM koristi interni brojač koji automatski povećava memorijsku lokaciju sa svakim sljedećim bajtom podataka koji primi. Nakon što je memorijska adresa poslana, možemo je pratiti s do 64 bajta podataka. EEPROM pretpostavlja (s pravom) da će adresa od 312 iza koje slijedi 10 bajtova zabilježiti bajt 0 na adresi 312, bajt 1 na adresi 313, bajt 2 na adresi 314 itd.

Pročitajte nešto

Čitanje iz EEPROM-a u osnovi slijedi isti proces u tri koraka kao i pisanje u EEPROM:

  1. Pošaljite najznačajniji bajt memorijske adrese na koju želite pisati.
  2. Pošaljite najmanje značajan bajt memorijske adrese na koju želite pisati.
  3. Zatražite bajt podataka na toj lokaciji.

Korak 5: Sheme i kod

Sheme i kod
Sheme i kod

Šifra:

#include

#define eeprom 0x50 // definira baznu adresu EEPROM -a

void setup () {

Wire.begin (); // kreira objekt Wire

Serial.begin (9600);

nepotpisana int adresa = 0; // prva adresa EEPROM -a

Serial.println ("Pišemo poštanski broj 22222, poštanski broj"); for (adresa = 0; adresa <5; adresa ++) upišiteEEPROM (eeprom, adresa, '2'); // Zapisuje 22222 u EEPROM

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

void loop () {{100} {101}

/*nema ništa u funkciji loop () jer ne želimo da arduino neprestano upisuje istu stvar u EEPROM. Samo želimo jednokratno pisanje, pa se funkcija loop () izbjegava s EEPROM-ovima.*/}

// definira writeEEPROM funkciju

void writeEEPROM (int deviceaddress, unsigned int eeaddress, bajtni podaci) {Wire.beginTransmission (deviceaddress); Wire.write ((int) (e -adresa >> 8)); // piše MSB Wire.write ((int) (eeaddress & 0xFF)); // piše LSB Wire.write (data); Wire.endTransmission (); }

// definira funkciju readEEPROM

bajt readEEPROM (int deviceaddress, nepotpisana int eeaddress) {bajt rdata = 0xFF; Wire.beginTransmission (deviceaddress); Wire.write ((int) (e -adresa >> 8)); // piše MSB Wire.write ((int) (eeaddress & 0xFF)); // piše LSB Wire.endTransmission (); Wire.requestFrom (deviceaddress, 1); if (Wire.available ()) rdata = Wire.read (); return rdata; }

Preporučuje se: