Indholdsfortegnelse:

Læsning og skrivning af data til ekstern EEPROM ved hjælp af Arduino: 5 trin
Læsning og skrivning af data til ekstern EEPROM ved hjælp af Arduino: 5 trin

Video: Læsning og skrivning af data til ekstern EEPROM ved hjælp af Arduino: 5 trin

Video: Læsning og skrivning af data til ekstern EEPROM ved hjælp af Arduino: 5 trin
Video: Lesson 38: Using MLX90614 Infrared Contactless Temperature Sensor | Arduino Step By Step Course 2024, November
Anonim
Læsning og skrivning af data til ekstern EEPROM ved hjælp af Arduino
Læsning og skrivning af data til ekstern EEPROM ved hjælp af Arduino

EEPROM står for Electrically Erasable Programmable Read-Only Memory.

EEPROM er meget vigtig og nyttig, fordi det er en ikke-flygtig form for hukommelse. Det betyder, at selv når kortet er slukket, bevarer EEPROM -chippen stadig det program, der blev skrevet til det. Så når du slukker for kortet og derefter tænder det igen, kan programmet, der blev skrevet til EEPROM, køres. Så dybest set gemmer og kører EEPROM et program uanset hvad. Det betyder, at du kan slukke en enhed, holde den slukket i 3 dage og komme tilbage og tænde den, og den kan stadig køre det program, der var programmeret i den. Sådan fungerer de fleste forbrugerelektroniske enheder.

Dette projekt er sponsoreret af LCSC. Jeg har brugt elektroniske komponenter fra LCSC.com. LCSC har et stærkt engagement i at tilbyde et bredt udvalg af ægte elektroniske komponenter af høj kvalitet til den bedste pris med et globalt forsendelsesnetværk til over 200 lande. Tilmeld dig i dag og få $ 8 rabat på din første ordre.

EEPROM er også meget effektiv, idet individuelle bytes i en traditionel EEPROM uafhængigt kan læses, slettes og omskrives. I de fleste andre former for ikke-flygtig hukommelse kan dette ikke gøres. Serielle EEPROM-enheder som f.eks. Microchip 24-serie EEPROM giver dig mulighed for at tilføje mere hukommelse til enhver enhed, der kan tale I²C.

Forbrugsvarer

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 MHz krystal
  4. Brødbræt
  5. Modstand 4,7k Ohm x 2
  6. Kondensator 22 pF x 2

Trin 1: Grundlæggende om EEPROM

EEPROM Basics
EEPROM Basics

Microchip 24LC2512 -chippen kan købes i en 8 -pin DIP -pakke. Benene på 24LC512 er ret ligetil og består af strøm (8), GND (4), skrivebeskyttelse (7), SCL/SDA (6, 5) og tre adressestifter (1, 2, 3).

En kort historie om ROM

Tidlige computere af "Stored -Program" -typen - såsom skrivebordsberegnere og tastaturfortolkere - begyndte at bruge ROM i form af Diode Matrix ROM. Dette var en hukommelse bestående af diskrete halvlederdioder placeret på et specielt organiseret printkort. Dette gav plads til Mask ROM med fremkomsten af integrerede kredsløb. Mask ROM lignede meget Diode Matrix ROM, kun den blev implementeret i en meget mindre skala. Dette betød imidlertid, at du ikke bare kunne flytte et par dioder rundt med et loddejern og omprogrammere det. Maske -ROM skulle programmeres af producenten og kunne derefter ikke ændres.

Desværre var Mask ROM dyrt og tog lang tid at producere, fordi hvert nyt program krævede, at en helt ny enhed blev fremstillet af et støberi. I 1956 blev dette problem imidlertid løst med opfindelsen af PROM (Programmerbar ROM), som gjorde det muligt for udviklere at programmere chipsene selv. Det betød, at producenterne kunne producere millioner af den samme uprogrammerede enhed, hvilket gjorde den billigere og mere praktisk. PROM kunne imidlertid kun skrives til én gang ved hjælp af en højspændingsprogrammeringsenhed. Efter at en PROM -enhed var programmeret, var der ingen måde at returnere enheden til dens uprogrammerede tilstand.

Dette ændrede sig i 1971 med opfindelsen af EPROM (Erasable Programmable ROM), som - udover at tilføje endnu et bogstav til akronymet - bragte evnen til at slette enheden og returnere den til en "blank" tilstand ved hjælp af en stærk UV -lyskilde. Det er rigtigt, du var nødt til at skinne et stærkt lys på IC'en for at omprogrammere den, hvor sejt er det? Nå, det viser sig, at det er ret sejt, medmindre du er en udvikler, der arbejder med firmware, i så fald vil du virkelig gerne kunne omprogrammere enheden ved hjælp af elektriske signaler. Dette blev endelig en realitet i 1983 med udviklingen af EEPROM (Electrically Erasable Programmable ROM), og med det når vi frem til den nuværende uhåndterlige akronym.

Trin 2: Kendetegn ved EEPROM

Der er to store ulemper ved EEPROM som en metode til datalagring. I de fleste applikationer opvejer fordelene ulemperne, men du skal være opmærksom på dem, før du integrerer EEPROM i dit næste design.

Først og fremmest begrænser den teknologi, der får EEPROM til at fungere, også antallet af gange, den kan skrives om. Dette har at gøre med, at elektroner bliver fanget i de transistorer, der udgør ROM'en og bygger op, indtil ladningsforskellen mellem en "1" og en "0" er uigenkendelig. Men bare rolig, de fleste EEPROM'er har et maksimalt omskrivningstal på 1 million eller mere. Så længe du ikke kontinuerligt skriver til EEPROM, er det usandsynligt, at du når dette maksimum. For det andet slettes EEPROM ikke, hvis du fjerner strømmen fra det, men det holder ikke fast i dine data på ubestemt tid. Elektroner kan drive ud af transistorer og gennem isolatoren og effektivt slette EEPROM over tid. Når det er sagt, sker dette normalt i løbet af år (selvom det kan accelereres af varme). De fleste producenter siger, at dine data er sikre på EEPROM i 10 år eller mere ved stuetemperatur. Og der er en ting mere, du skal huske på, når du vælger en EEPROM -enhed til dit projekt. EEPROM -kapacitet måles i bits og ikke bytes. En 512K EEPROM vil indeholde 512Kbits data, med andre ord kun 64KB.

Trin 3: Arduino hardware -tilslutning

Arduino hardware -tilslutning
Arduino hardware -tilslutning
Arduino hardware -tilslutning
Arduino hardware -tilslutning

Okay, nu hvor vi ved, hvad EEPROM er, lad os tilslutte en og se, hvad den kan gøre! For at få vores enhed i tale skal vi forbinde strøm samt I²C serielle linjer. Denne enhed kører især ved 5VDC, så vi forbinder den med 5V -udgangen på vores Arduino UNO. I²C-linjerne har også brug for pull-up-modstande, for at kommunikation kan ske korrekt. Værdien af disse modstande afhænger af kapacitansen for linjerne og frekvensen, du vil kommunikere den, men en god tommelfingerregel for ikke-kritiske applikationer bevares bare i kΩ-området. I dette eksempel bruger vi 4,7kΩ pull-up modstande.

Der er tre stifter på denne enhed til at vælge I²C -adressen, på denne måde kan du have mere end en EEPROM på bussen og adressere dem hver for sig. Du kan bare jorde dem alle, men vi tilslutter dem, så vi senere kan komme med en enhed med højere kapacitet i selvstudiet.

Vi bruger et brødbræt til at forbinde alt sammen. Diagrammet herunder viser den korrekte tilslutning til de fleste I²C EEPROM-enheder, herunder Microchip 24-serien EEPROM, som vi sælger.

Trin 4: Læsning og skrivning

Det meste af tiden, når du bruger en EEPROM sammen med en mikrokontroller, behøver du faktisk ikke se alt indhold i hukommelsen på én gang. Du vil bare læse og skrive bytes her og der efter behov. I dette eksempel vil vi dog skrive en hel fil til EEPROM og derefter læse den hele tilbage, så vi kan se den på vores computer. Dette burde få os til at føle os godt tilpas med tanken om at bruge EEPROM og også give os en fornemmelse af, hvor meget data der virkelig kan passe på en lille enhed.

Skriv noget

Vores eksempelskitse vil simpelthen tage enhver byte, der kommer ind over den serielle port, og skrive den til EEPROM og holde styr på, hvor mange bytes vi har skrevet til hukommelsen.

At skrive en byte hukommelse til EEPROM sker generelt i tre trin:

  1. Send den væsentligste byte af den hukommelsesadresse, du vil skrive til.
  2. Send den mindst signifikante byte for den hukommelsesadresse, du vil skrive til.
  3. Send den databyte, du gerne vil gemme på dette sted.

Der er sandsynligvis et par nøgleord der bare forklarer:

Hukommelsesadresser

Hvis du forestiller dig, at alle bytes i en 512 Kbit EEPROM står i en linje fra 0 til 64000 - fordi der er 8 bits til en byte, og derfor kan du passe 64000 bytes på en 512 Kbit EEPROM - så er en hukommelsesadresse stedet i linje, hvor du ville finde en bestemt byte. Vi skal sende denne adresse til EEPROM, så den ved, hvor den byte, vi sender, skal placeres.

Mest signifikante og mindst signifikante bytes

Fordi der er 32000 mulige steder i en 256 Kbit EEPROM - og fordi 255 er det største antal, du kan kode i en byte - skal vi sende denne adresse i to bytes. Først sender vi den mest betydningsfulde byte (MSB) - de første 8 bits i dette tilfælde. Derefter sender vi Least Significant Byte (LSB) - de anden 8 bits. Hvorfor? Fordi det er sådan enheden forventer at modtage dem, det er alt.

Sideskrivning

Det er fint at skrive en byte ad gangen, men de fleste EEPROM -enheder har noget, der kaldes en "sideskrivbuffer", som giver dig mulighed for at skrive flere byte ad gangen på samme måde som en enkelt byte. Vi vil drage fordel af dette i vores eksempelskitse. EEPROM bruger en intern tæller, der automatisk øger hukommelsesplaceringen for hver følgende databyte, den modtager. Når en hukommelsesadresse er blevet sendt, kan vi følge den med op til 64 bytes data. EEPROM antager (med rette), at en adresse på 312 efterfulgt af 10 bytes registrerer byte 0 på adresse 312, byte 1 på adresse 313, byte 2 på adresse 314 og så videre.

Læs noget

Læsning fra EEPROM følger dybest set den samme tretrinsproces som at skrive til EEPROM:

  1. Send den væsentligste byte af den hukommelsesadresse, du vil skrive til.
  2. Send den mindst signifikante byte for den hukommelsesadresse, du vil skrive til.
  3. Bed om databyte på det pågældende sted.

Trin 5: Skemaer og kode

Skema og kode
Skema og kode

Kode:

#omfatte

#define eeprom 0x50 // definerer EEPROMs basisadresse

ugyldig opsætning () {

Wire.begin (); // opretter et Wire -objekt

Serial.begin (9600);

usigneret int -adresse = 0; // EEPROM's første adresse

Serial.println ("Vi skriver postnummer 22222, et postnummer"); for (adresse = 0; adresse <5; adresse ++) writeEEPROM (eeprom, adresse, '2'); // Skriver 22222 til EEPROM

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

void loop () {

/*der er ikke noget i loop () -funktionen, fordi vi ikke ønsker, at arduinoen gentagne gange skal skrive det samme til EEPROM. Vi vil bare have en engangsskrivning, så loop () -funktionen undgås med EEPROM'er.*/}

// definerer skriveEEPROM -funktionen

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

// definerer readEEPROM -funktionen

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

Anbefalede: