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, Srpanj
Anonim
Čitanje i pisanje podataka na vanjski EEPROM pomoću Arduina
Čitanje i pisanje podataka na vanjski EEPROM pomoću Arduina

EEPROM znači 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 kad je ploča isključena, EEPROM čip i dalje zadržava program koji mu je napisan. Dakle, kad isključite ploču, a zatim je ponovo uključite, može se pokrenuti program koji je napisan na EEPROM -u. Dakle, 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 u njemu programiran. Ovako funkcionira većina potrošačkih elektroničkih uređaja.

Ovaj projekt 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 najboljim cijenama s 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đer vrlo učinkovit jer se pojedini bajtovi u tradicionalnom EEPROM -u mogu neovisno čitati, brisati i prepisivati. U većini drugih vrsta nepromjenjive memorije to se ne može učiniti. Serijski EEPROM uređaji poput EEPROM-a Microchip serije 24 omogućuju vam dodavanje više memorije bilo kojem uređaju koji govori I²C.

Pribor

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 MHz kristal
  4. Oglasna ploča
  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 pakiranju. Igle na 24LC512 prilično su 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 povijest ROM -a

Rana računala tipa "Stored -Program" - poput stolnih kalkulatora i tumača s tipkovnicom - počela su koristiti ROM u obliku Diode Matrix ROM -a. Ovo je bila memorija sastavljena od diskretnih poluvodičkih dioda postavljenih na posebno organiziranu PCB. Ovo je ustupilo mjesto Mask ROM -u pojavom integriranih sklopova. Mask ROM je bio vrlo sličan Diode Matrix ROM -u samo što je implementiran u mnogo manjem obimu. To je, međutim, značilo da niste mogli samo pomaknuti 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 puno vremena za izradu jer je za svaki novi program bila potrebna potpuno nova naprava za proizvodnju u ljevaonici. Međutim, 1956. godine ovaj je problem 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. PROM se, međutim, mogao zapisati 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 - donio mogućnost brisanja uređaja i vraćanje u "prazno" stanje korištenjem jakog izvora UV svjetla. Tako je, morali ste osvijetliti IC svjetlo 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. To je konačno postalo stvarnost 1983. godine razvojem EEPROM -a (Electrably Erasable Programmable ROM) i s tim dolazimo do današnjeg nezgrapnog akronima.

Korak 2: Čudnosti EEPROM -a

Postoje dva velika nedostatka EEPROM -a kao načina pohrane podataka. U većini aplikacija prednosti su veće od nedostataka, no 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 nakupljanjem sve dok se razlika naboja između "1" i "0" ne prepozna. 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, učinkovito 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 morate 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 hardvera Arduino

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

U redu, sad kad znamo što je EEPROM, spojimo jedan i vidimo što može učiniti! Kako 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 linije će trebati pull-up otpornike za ispravnu komunikaciju. Vrijednost ovih otpornika ovisi o kapacitetu vodova i frekvenciji kojom to želite komunicirati, ali dobro pravilo za nekritične aplikacije je samo zadržati ga u kΩ području. U ovom primjeru koristit ćemo pull-up otpornike od 4,7 kΩ.

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

Upotrijebit ćemo ploču za povezivanje svega zajedno. Donji dijagram prikazuje ispravno priključivanje za većinu I²C EEPROM uređaja, uključujući EEPROM Microchip 24 serije koji prodajemo.

Korak 4: Čitanje i pisanje

Većinu vremena kada koristite EEPROM zajedno s mikrokontrolerom nećete zapravo morati vidjeti sav sadržaj memorije odjednom. Po potrebi ćete samo tu i tamo čitati i pisati bajtove. U ovom primjeru, međutim, napisat ćemo cijelu datoteku na EEPROM, a zatim je sve pročitati kako bismo je mogli vidjeti na svom računalu. 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.

Napisati nešto

Naša primjerna skica jednostavno će uzeti bilo koji bajt koji dolazi preko serijskog porta i zapisuje 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 ovo mjesto.

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

Adrese sjećanja

Ako zamislite da svi bajtovi u EEPROM -u od 512 Kbit stoje u retku od 0 do 64000 - jer postoji 8 bita u bajtu i stoga možete staviti 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 budući da 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 ih uređaj očekuje na ovaj način, 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 stranica" koji vam omogućuje pisanje više bajtova odjednom na isti način kao i jedan bajt. Ovo ćemo iskoristiti u našem primjeru skice. EEPROM koristi unutarnji brojač koji automatski povećava memorijsko mjesto 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čitaj 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 tom mjestu.

Korak 5: Sheme i kod

Sheme i kod
Sheme i kod

Kodirati:

#uključi

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

void setup () {

Wire.begin (); // stvara 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 na 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 uvijek iznova piše istu stvar na EEPROM -u. Samo želimo jednokratno upisivanje, pa se funkcija loop () izbjegava s EEPROM-ovima.*/}

// definira funkciju writeEEPROM

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

// definira funkciju readEEPROM

byte readEEPROM (int deviceaddress, unsigned 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 (); vratiti rdata; }

Preporučeni: