INHOUDSOPGAWE:

Gelees en geskryf na eksterne EEPROM met behulp van Arduino: 5 stappe
Gelees en geskryf na eksterne EEPROM met behulp van Arduino: 5 stappe

Video: Gelees en geskryf na eksterne EEPROM met behulp van Arduino: 5 stappe

Video: Gelees en geskryf na eksterne EEPROM met behulp van Arduino: 5 stappe
Video: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, Julie
Anonim
Data lees en skryf aan eksterne EEPROM met behulp van Arduino
Data lees en skryf aan eksterne EEPROM met behulp van Arduino

EEPROM staan vir Electrically Erasable Programmable Read-Only Memory.

EEPROM is baie belangrik en nuttig, want dit is 'n nie-vlugtige vorm van geheue. Dit beteken dat die EEPROM -chip, selfs as die bord afgeskakel is, steeds die program behou wat daaraan geskryf is. As u die bord afskakel en dan weer aanskakel, kan die program wat aan die EEPROM geskryf is, uitgevoer word. Die EEPROM stoor en bestuur dus 'n program, maak nie saak wat nie. Dit beteken dat u 'n toestel kan afskakel, dit vir 3 dae kan afskakel en kan terugskakel en dit kan nog steeds die program wat daarin geprogrammeer is, laat loop. Dit is hoe die meeste elektroniese toestelle vir verbruikers werk.

Hierdie projek word geborg deur LCSC. Ek gebruik elektroniese komponente van LCSC.com. LCSC het 'n sterk verbintenis om 'n wye verskeidenheid elektroniese komponente van hoë gehalte teen die beste prys aan te bied met 'n wêreldwye afleweringsnetwerk na meer as 200 lande. Teken vandag nog in en kry $ 8 afslag op u eerste bestelling.

EEPROM is ook baie doeltreffend omdat individuele grepe in 'n tradisionele EEPROM onafhanklik gelees, uitgevee en herskryf kan word. In die meeste ander soorte nie-vlugtige geheue kan dit nie gedoen word nie. Met seriële EEPROM-toestelle, soos die Microchip 24-reeks EEPROM, kan u meer geheue byvoeg op enige toestel wat I²C kan spreek.

Voorrade

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 MHz kristal
  4. Broodbord
  5. Weerstand 4.7k Ohm x 2
  6. Kondensator 22 pF x 2

Stap 1: EEPROM Basics

EEPROM Basics
EEPROM Basics

Die Microchip 24LC2512 -chip kan gekoop word in 'n 8 -pins DIP -pakket. Die penne op die 24LC512 is redelik reguit en bestaan uit krag (8), GND (4), skryfbeskerming (7), SCL/SDA (6, 5) en drie adrespenne (1, 2, 3).

'N Kort geskiedenis van ROM

Vroeë rekenaars van die 'gestoorde program' - soos lessenaarsrekenaars en sleutelbordvertolkers - het ROM begin gebruik in die vorm van Diode Matrix ROM. Dit was 'n geheue wat bestaan uit diskrete halfgeleerdiodes wat op 'n spesiaal georganiseerde PCB geplaas is. Dit het plek gemaak vir Mask ROM met die koms van geïntegreerde stroombane. Masker -ROM was baie soos Diode Matrix ROM, maar dit is op 'n baie kleiner skaal geïmplementeer. Dit beteken egter dat u nie net 'n paar diodes met 'n soldeerbout kon rondskuif en dit herprogrammeer nie. Masker -ROM moes deur die vervaardiger geprogrammeer word en kon daarna nie verander word nie.

Ongelukkig was Mask ROM duur en het dit lank geneem om te vervaardig, want elke nuwe program vereis dat 'n splinternuwe toestel deur 'n gieterij vervaardig word. In 1956 is hierdie probleem egter opgelos met die uitvinding van PROM (Programmable ROM) waarmee ontwikkelaars self die skyfies kon programmeer. Dit beteken dat vervaardigers miljoene van dieselfde ongeprogrammeerde toestelle kan vervaardig, wat dit goedkoper en praktieser maak. PROM kan egter slegs een keer na 'n hoëspanning-programmeertoestel geskryf word. Nadat 'n PROM -toestel geprogrammeer is, was daar geen manier om die toestel terug te keer na sy ongeprogrammeerde toestand nie.

Dit het in 1971 verander met die uitvinding van EPROM (Erasable Programmable ROM) wat - behalwe die toevoeging van nog 'n letter by die akroniem - die moontlikheid meebring om die toestel uit te vee en terug te keer na 'n "leë" toestand met 'n sterk UV -ligbron. Dit is reg, jy moes 'n helder lig op die IC skyn om dit te herprogrammeer, hoe gaaf is dit? Dit blyk dat dit baie gaaf is, tensy u 'n ontwikkelaar is wat aan firmware werk, in welke geval u die toestel met behulp van elektriese seine sou wou herprogrammeer. Dit het uiteindelik 'n werklikheid geword in 1983 met die ontwikkeling van EEPROM (Electrically Erasable Programmable ROM), en daarmee kom ons by die huidige akroniem van vandag.

Stap 2: Eienskappe van EEPROM

Daar is twee groot nadele aan EEPROM as 'n metode vir die stoor van data. In die meeste toepassings weeg die voordele swaarder as die nadele, maar u moet daarvan bewus wees voordat u EEPROM in u volgende ontwerp opneem.

In die eerste plek beperk die tegnologie wat EEPROM laat werk ook die aantal kere wat dit herskryf kan word. Dit het te doen met elektrone wat vasgevang is in die transistors wat die ROM uitmaak en opbou totdat die ladingverskil tussen 'n "1" en "0" onherkenbaar is. Maar moenie bekommerd wees nie, die meeste EEPROM's het 'n maksimum herskryfgetal van 1 miljoen of meer. Solank u nie aan die EEPROM skryf nie, is dit onwaarskynlik dat u hierdie maksimum bereik. Tweedens sal EEPROM nie uitgevee word as u krag daarvan verwyder nie, maar dit hou u data nie onbepaald vas nie. Elektrone kan uit die transistors en deur die isolator dryf, wat die EEPROM mettertyd effektief uitvee. Dit gesê, dit gebeur gewoonlik in die loop van jare (hoewel dit deur hitte versnel kan word). Die meeste vervaardigers sê dat u data by EEPROM 10 jaar of langer by kamertemperatuur veilig is. En daar is nog een ding wat u in gedagte moet hou wanneer u 'n EEPROM -toestel vir u projek kies. EEPROM -kapasiteit word gemeet in bisse en nie grepe nie. 'N 512K EEPROM sal 512Kbits data bevat, met ander woorde, slegs 64KB.

Stap 3: Arduino -hardeware -aansluiting

Arduino hardeware -aansluiting
Arduino hardeware -aansluiting
Arduino hardeware -aansluiting
Arduino hardeware -aansluiting

Goed, noudat ons weet wat EEPROM is, laat ons een skakel en kyk wat dit kan doen! Om ons toestel aan die praat te kry, moet ons krag- en I²C -reekslyne aansluit. Hierdie toestel werk veral op 5VDC, sodat ons dit kan koppel aan die 5V -uitset van ons Arduino UNO. Die I²C-lyne benodig ook optrekweerstands om kommunikasie korrek te laat plaasvind. Die waarde van hierdie weerstande hang af van die kapasitansie van die lyne en die frekwensie wat u dit wil kommunikeer, maar 'n goeie vuisreël vir nie-kritiese toepassings word net binne die kΩ-reeks gehou. In hierdie voorbeeld gebruik ons 4.7kΩ optrekweerstands.

Daar is drie penne op hierdie toestel om die I²C -adres te kies. Op hierdie manier kan u meer as een EEPROM op die bus hê en elkeen anders kan aanspreek. U kan hulle almal net aard, maar ons sal hulle bedraad sodat ons later in die tutoriaal 'n toestel met 'n hoër kapasiteit kan inskakel.

Ons gebruik 'n broodbord om alles met mekaar te verbind. Die onderstaande diagram toon die korrekte aansluiting vir die meeste I²C EEPROM-toestelle, insluitend die Microchip 24-reeks EEPROM wat ons verkoop.

Stap 4: Lees en skryf

As u meestal 'n EEPROM in kombinasie met 'n mikrobeheerder gebruik, hoef u nie die hele inhoud van die geheue tegelyk te sien nie. U sal net hier en daar grepe hier en daar lees en skryf, indien nodig. In hierdie voorbeeld gaan ons egter 'n hele lêer aan EEPROM skryf en dit dan weer aflees sodat ons dit op ons rekenaar kan sien. Dit moet ons gemaklik maak met die idee om EEPROM te gebruik en ons ook 'n idee gee van hoeveel data werklik op 'n klein toestel kan pas.

Iets skryf

Ons voorbeeldskets neem eenvoudig elke byte wat oor die seriële poort kom, en skryf dit aan die EEPROM, en hou tred met die aantal bytes wat ons in die geheue geskryf het.

Die skryf van 'n greep geheue aan die EEPROM vind gewoonlik in drie stappe plaas:

  1. Stuur die belangrikste byte van die geheue -adres waarna u wil skryf.
  2. Stuur die minste belangrike byte van die geheue -adres waarna u wil skryf.
  3. Stuur die databyte wat u op hierdie plek wil stoor.

Daar is waarskynlik 'n paar sleutelwoorde wat verduidelik:

Geheue adresse

As u u voorstel dat al die grepe in 'n 512 Kbit EEPROM in 'n lyn van 0 tot 64000 staan - want daar is 8 bisse in 'n byte en daarom kan u 64000 grepe op 'n 512 Kbit EEPROM pas - dan is 'n geheue -adres die plek in lyn waar u 'n spesifieke greep sou vind. Ons moet die adres na die EEPROM stuur sodat hy weet waar ons die byte wat ons stuur, moet plaas.

Die belangrikste en die minste beduidende bytes

Omdat daar 32000 moontlike plekke in 'n 256 Kbit EEPROM is - en omdat 255 die grootste getal is wat u in een greep kan kodeer - moet ons hierdie adres in twee grepe stuur. Eerstens stuur ons die belangrikste byte (MSB) - die eerste 8 bisse in hierdie geval. Dan stuur ons die Least Significant Byte (LSB) - die tweede 8 bisse. Hoekom? Want dit is hoe die toestel dit verwag om dit te ontvang.

Bladsy skryf

Dit is goed om een greep op 'n slag te skryf, maar die meeste EEPROM -toestelle het 'n 'bladsy -skryfbuffer', waarmee u verskeie grepe tegelyk kan skryf, net soos 'n enkele greep. Ons sal hiervan gebruik maak in ons voorbeeldskets. Die EEPROM gebruik 'n interne teller wat die geheue -ligging outomaties verhoog met elke volgende databyt wat dit ontvang. Sodra 'n geheue -adres gestuur is, kan ons dit met tot 64 grepe data volg. Die EEPROM veronderstel (tereg) dat 'n adres van 312 gevolg deur 10 grepe byte 0 by adres 312, greep 1 by adres 313, greep 2 by adres 314, ensovoorts.

Lees iets

Lees van die EEPROM volg basies dieselfde proses in drie stappe as om aan die EEPROM te skryf:

  1. Stuur die belangrikste byte van die geheue -adres waarna u wil skryf.
  2. Stuur die minste byte van die geheue -adres waarna u wil skryf.
  3. Vra vir die data -byte op daardie plek.

Stap 5: Skema's en kode

Skema's en kode
Skema's en kode

Kode:

#insluit

#define eeprom 0x50 // definieer die basisadres van die EEPROM

ongeldige opstelling () {

Wire.begin (); // skep 'n Wire -voorwerp

Serial.begin (9600);

ongetekende int adres = 0; // eerste adres van die EEPROM

Serial.println ("Ons skryf die poskode 22222, 'n poskode"); vir (adres = 0; adres <5; adres ++) skryfEEPROM (eeprom, adres, '2'); // Skryf 22222 aan die EEPROM

vir (adres = 0; adres <5; adres ++) {Serial.print (leesEEPROM (eeprom, adres), HEX); }}

leemte -lus () {

/*daar is niks in die loop () -funksie nie, want ons wil nie hê dat die arduino herhaaldelik dieselfde ding aan die EEPROM moet skryf nie. Ons wil net 'n eenmalige skryfwerk hê, sodat die lus () -funksie met EEPROM's vermy word.*/}

// definieer die writeEEPROM -funksie

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

// definieer die readEEPROM -funksie

byte readEEPROM (int deviceaddress, unsigned int eeaddress) {byte rdata = 0xFF; Wire.beginTransmission (deviceaddress); Wire.write ((int) (eeaddress >> 8)); // skryf die MSB Wire.write ((int) (eeaddress & 0xFF)); // skryf die LSB Wire.endTransmission (); Wire.requestFrom (deviceaddress, 1); as (Wire.available ()) rdata = Wire.read (); terugkeer rdata; }

Aanbeveel: