Satura rādītājs:

Datu lasīšana un ierakstīšana ārējā EEPROM, izmantojot Arduino: 5 soļi
Datu lasīšana un ierakstīšana ārējā EEPROM, izmantojot Arduino: 5 soļi

Video: Datu lasīšana un ierakstīšana ārējā EEPROM, izmantojot Arduino: 5 soļi

Video: Datu lasīšana un ierakstīšana ārējā EEPROM, izmantojot Arduino: 5 soļi
Video: Использование карты Micro SD и регистрация данных с Arduino | Пошаговый курс Arduino, урок 106 2024, Novembris
Anonim
Datu lasīšana un rakstīšana uz ārējo EEPROM, izmantojot Arduino
Datu lasīšana un rakstīšana uz ārējo EEPROM, izmantojot Arduino

EEPROM apzīmē elektriski dzēšamu programmējamu lasāmatmiņu.

EEPROM ir ļoti svarīga un noderīga, jo tā ir nepastāvīga atmiņas forma. Tas nozīmē, ka pat pēc plates izslēgšanas EEPROM mikroshēma joprojām saglabā tajā ierakstīto programmu. Tātad, izslēdzot dēli un pēc tam to atkal ieslēdzot, var palaist EEPROM ierakstīto programmu. Tātad būtībā EEPROM saglabā un vada programmu neatkarīgi no tā. Tas nozīmē, ka varat izslēgt ierīci, turēt to izslēgtu 3 dienas, atgriezties un ieslēgt, un tā joprojām var palaist tajā ieprogrammēto programmu. Tā darbojas lielākā daļa plaša patēriņa elektronisko ierīču.

Šo projektu sponsorē LCSC. Esmu izmantojis elektroniskos komponentus no LCSC.com. LCSC ir cieši apņēmusies piedāvāt plašu oriģinālu, augstas kvalitātes elektronisko komponentu izvēli par labāko cenu ar globālu piegādes tīklu uz vairāk nekā 200 valstīm. Reģistrējieties jau šodien un saņemiet $ 8 atlaidi pirmajam pasūtījumam.

EEPROM ir ļoti efektīvs arī ar to, ka tradicionālā EEPROM atsevišķus baitus var neatkarīgi nolasīt, izdzēst un pārrakstīt. Lielākajā daļā citu nemainīgas atmiņas veidu to nevar izdarīt. Sērijas EEPROM ierīces, piemēram, Microchip 24 sērijas EEPROM, ļauj pievienot vairāk atmiņas jebkurai ierīcei, kas spēj runāt I²C.

Piegādes

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 MHz kristāls
  4. Maizes dēlis
  5. Rezistors 4,7 kΩ x 2
  6. Kondensators 22 pF x 2

1. darbība: EEPROM pamati

EEPROM pamati
EEPROM pamati

Mikroshēmas 24LC2512 mikroshēmu var iegādāties 8 kontaktu DIP iepakojumā. 24LC512 tapas ir diezgan taisnas un sastāv no jaudas (8), GND (4), rakstīšanas aizsardzības (7), SCL/SDA (6, 5) un trim adrešu tapām (1, 2, 3).

Īsa ROM vēsture

Agrīnie "Stored -Program" tipa datori, piemēram, galda kalkulatori un tastatūras tulki, sāka izmantot ROM diode Matrix ROM veidā. Šī bija atmiņa, kas sastāv no atsevišķām pusvadītāju diodēm, kas novietotas uz speciāli organizētas PCB. Tas deva ceļu Mask ROM, parādoties integrālajām shēmām. Mask ROM līdzinājās Diode Matrix ROM, tikai tas tika ieviests daudz mazākā mērogā. Tomēr tas nozīmēja, ka nevarēja vienkārši pārvietot pāris diodes ar lodāmuru un pārprogrammēt to. Maska ROM bija jāprogrammē ražotājam, un pēc tam to nevarēja mainīt.

Diemžēl Mask ROM bija dārgs, un tā izgatavošana prasīja ilgu laiku, jo katrai jaunai programmai bija nepieciešama pavisam jauna ierīce, kas jāražo liešanā. Tomēr 1956. gadā šī problēma tika atrisināta, izgudrojot PROM (Programmable ROM), kas ļāva izstrādātājiem pašiem programmēt mikroshēmas. Tas nozīmēja, ka ražotāji varēja ražot miljoniem tādas pašas neprogrammētas ierīces, kas padarīja to lētāku un praktiskāku. Tomēr PROM varēja ierakstīt tikai vienu reizi, izmantojot augstsprieguma programmēšanas ierīci. Pēc tam, kad tika ieprogrammēta PROM ierīce, nevarēja atgriezt ierīci tās neieprogrammētajā stāvoklī.

Tas mainījās 1971. gadā, kad tika izgudrots EPROM (dzēšams programmējams ROM), kas papildus vēl viena burta pievienošanai akronimam radīja iespēju izdzēst ierīci un atgriezt to "tukšā" stāvoklī, izmantojot spēcīgu UV gaismas avotu. Tieši tā, lai pārprogrammētu, jums vajadzēja iedegt spilgtu gaismu uz IC, cik forši tas ir? Izrādās, ka tas ir diezgan forši, ja vien jūs neesat izstrādātājs, kurš strādā pie programmaparatūras, tādā gadījumā jūs patiešām vēlētos, lai varētu pārprogrammēt ierīci, izmantojot elektriskos signālus. Tas beidzot kļuva par realitāti 1983. gadā, izstrādājot EEPROM (Electrically Erasable Programmable ROM), un līdz ar to mēs nonākam pie pašreizējās dienas apgrūtinošā akronīma.

2. darbība: EEPROM dīvainības

EEPROM kā datu glabāšanas metodei ir divi būtiski trūkumi. Lielākajā daļā lietojumprogrammu plusi atsver mīnusus, taču jums tie jāzina, pirms EEPROM iekļaujat nākamajā dizainā.

Pirmkārt, tehnoloģija, kas liek darboties EEPROM, arī ierobežo to pārrakstīšanas reižu skaitu. Tas ir saistīts ar elektronu iesprūšanu tranzistoros, kas veido ROM, un uzkrājas, līdz lādiņu starpība starp "1" un "0" nav atpazīstama. Bet neuztraucieties, lielākajā daļā EEPROM pārrakstīšanas maksimālais skaits ir 1 miljons vai vairāk. Kamēr jūs nepārtraukti nerakstāt uz EEPROM, maz ticams, ka sasniegsit šo maksimumu. Otrkārt, EEPROM netiks izdzēsts, ja izņemsiet no tā barošanu, taču tas neietekmēs jūsu datus bezgalīgi ilgi. Elektroni var izkļūt no tranzistoriem un caur izolatoru, laika gaitā efektīvi izdzēšot EEPROM. Tomēr tas parasti notiek gadu gaitā (lai gan to var paātrināt siltums). Lielākā daļa ražotāju apgalvo, ka jūsu dati ir droši EEPROM 10 gadus vai ilgāk istabas temperatūrā. Un vēl viena lieta, kas jums jāpatur prātā, izvēloties EEPROM ierīci savam projektam. EEPROM ietilpību mēra bitos, nevis baitos. 512K EEPROM saturēs 512 KB datu, citiem vārdiem sakot, tikai 64 KB.

3. darbība: Arduino aparatūras savienošana

Arduino aparatūras savienojums
Arduino aparatūras savienojums
Arduino aparatūras savienojums
Arduino aparatūras savienojums

Labi, tagad, kad mēs zinām, kas ir EEPROM, savienosim vienu un redzēsim, ko tā var darīt! Lai mūsu ierīce runātu, mums ir jāpievieno barošana, kā arī I²C sērijas līnijas. Šī ierīce jo īpaši darbojas pie 5 V līdzstrāvas, tāpēc mēs to savienosim ar mūsu Arduino UNO 5 V izeju. Tāpat, lai komunikācija notiktu pareizi, I²C līnijām būs nepieciešami uzvilkšanas rezistori. Šo rezistoru vērtība ir atkarīga no to līniju kapacitātes un frekvences, ar kurām vēlaties to sazināties, bet labs īkšķa noteikums nekritiskām lietojumprogrammām tiek vienkārši turēts kΩ diapazonā. Šajā piemērā mēs izmantosim 4,7 kΩ pievilkšanas rezistorus.

Šajā ierīcē ir trīs tapas, lai izvēlētos I²C adresi, tādējādi autobusā var būt vairāk nekā viens EEPROM un adresēt katru no tām atšķirīgi. Jūs varētu vienkārši iezemēt tos visus, bet mēs tos vadīsim, lai vēlāk apmācības laikā varētu ievietot ierīces ar lielāku jaudu.

Mēs izmantosim maizes dēli, lai visu savienotu kopā. Zemāk redzamajā diagrammā parādīts pareizais savienojums lielākajai daļai I²C EEPROM ierīču, ieskaitot mūsu pārdoto 24-sērijas ECHROM mikroshēmu.

4. solis: lasīšana un rakstīšana

Lielāko daļu laika, lietojot EEPROM kopā ar mikrokontrolleri, jums faktiski nebūs jāredz viss atmiņas saturs vienlaikus. Jūs vienkārši lasīsit un rakstīsit baitus šeit un tur, ja nepieciešams. Tomēr šajā piemērā mēs rakstīsim visu failu uz EEPROM un pēc tam nolasīsim visu atpakaļ, lai mēs varētu to apskatīt savā datorā. Tam vajadzētu mūs apmierināt ar ideju izmantot EEPROM, kā arī radīt sajūtu par to, cik daudz datu patiešām var ietilpt nelielā ierīcē.

Rakstīt kaut ko

Mūsu parauga skice vienkārši paņems jebkuru baitu, kas nonāk seriālajā portā, un ierakstīs to EEPROM, sekojot līdzi tam, cik baitu esam ierakstījuši atmiņā.

Atmiņas baita ierakstīšana EEPROM parasti notiek trīs posmos:

  1. Nosūtiet atmiņas adreses nozīmīgāko baitu, uz kuru vēlaties rakstīt.
  2. Nosūtiet vismazāko atmiņas adreses baitu, uz kuru vēlaties rakstīt.
  3. Nosūtiet datu baitu, kuru vēlaties saglabāt šajā vietā.

Tur, iespējams, ir daži atslēgas vārdi, kas tikai izskaidro:

Atmiņas adreses

Ja jūs iedomājaties, ka visi 512 Kbit EEPROM baiti stāv rindā no 0 līdz 64000 - jo ir 8 biti uz baitu un tāpēc jūs varat ievietot 64000 baitus 512 Kbit EEPROM -, tad atmiņas adrese ir vieta līniju, kur jūs atradīsit noteiktu baitu. Mums ir jānosūta šī adrese EEPROM, lai tā zinātu, kur ievietot sūtāmo baitu.

Nozīmīgākie un vismazāk nozīmīgie baiti

Tā kā 256 Kbit EEPROM ir 32000 iespējamās vietas un 255 ir lielākais skaitlis, ko varat kodēt vienā baitā, mums šī adrese ir jānosūta divos baitos. Pirmkārt, mēs nosūtām visnozīmīgāko baitu (MSB) - pirmos 8 bitus šajā gadījumā. Tad mēs nosūtām vismazāko nozīmīgo baitu (LSB) - otros 8 bitus. Kāpēc? Tā kā ierīce cer tos saņemt, tas ir viss.

Lapu rakstīšana

Rakstīt vienu baitu vienlaikus ir labi, taču lielākajai daļai EEPROM ierīču ir kaut kas tāds, ko sauc par "lapu rakstīšanas buferi", kas ļauj vienlaikus rakstīt vairākus baitus tāpat kā vienu baitu. Mēs to izmantosim mūsu parauga skicē. EEPROM izmanto iekšējo skaitītāju, kas automātiski palielina atmiņas atrašanās vietu ar katru nākamo saņemto datu baitu. Kad atmiņas adrese ir nosūtīta, mēs varam tai sekot līdz pat 64 baitiem datu. EEPROM pieņem (pareizi), ka 312 adrese, kam seko 10 baiti, ierakstīs baitu 0 312. adresē, 1. baitu 313. adresē, 2. baitu 314. adresē utt.

Izlasiet kaut ko

Lasīšana no EEPROM pamatā notiek tādā pašā trīs soļu procesā kā rakstīšana EEPROM:

  1. Nosūtiet atmiņas adreses nozīmīgāko baitu, uz kuru vēlaties rakstīt.
  2. Nosūtiet vismazāko atmiņas adreses baitu, uz kuru vēlaties rakstīt.
  3. Pieprasiet datu baitu šajā vietā.

5. darbība: shēmas un kods

Shēmas un kods
Shēmas un kods

Kods:

#iekļaut

#define eeprom 0x50 // definē EEPROM bāzes adresi

void setup () {

Wire.begin (); // izveido Wire objektu

Sērijas sākums (9600);

neparakstīta int adrese = 0; // EEPROM pirmā adrese

Serial.println ("Mēs rakstām pasta indeksu 22222, pasta indekss"); for (adrese = 0; adrese <5; adrese ++) rakstītEEPROM (eeprom, adrese, '2'); // EEPROM raksta 22222

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

void loop () {

/*cilpā () nav nekā, jo mēs nevēlamies, lai arduino atkārtoti rakstītu to pašu EEPROM. Mēs vēlamies tikai vienreizēju rakstīšanu, tāpēc, izmantojot EEPROM, tiek novērsta funkcija loop ().*/}

// definē funkciju writeEEPROM

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

// definē funkciju readEEPROM

baits readEEPROM (int deviceaddress, unsigned int eeaddress) {baits rdata = 0xFF; Wire.beginTransmission (ierīces adrese); Wire.write ((int) (e -adrese >> 8)); // raksta MSB Wire.write ((int) (eeaddress & 0xFF)); // raksta LSB Wire.endTransmission (); Wire.requestFrom (deviceaddress, 1); ja (Wire.available ()) rdata = Wire.read (); atgriezt rdata; }

Ieteicams: