Obsah:

Čítanie a zapisovanie údajov do externej EEPROM pomocou Arduina: 5 krokov
Čítanie a zapisovanie údajov do externej EEPROM pomocou Arduina: 5 krokov

Video: Čítanie a zapisovanie údajov do externej EEPROM pomocou Arduina: 5 krokov

Video: Čítanie a zapisovanie údajov do externej EEPROM pomocou Arduina: 5 krokov
Video: Использование карты Micro SD и регистрация данных с Arduino | Пошаговый курс Arduino, урок 106 2024, November
Anonim
Čítanie a zapisovanie údajov do externej EEPROM pomocou Arduina
Čítanie a zapisovanie údajov do externej EEPROM pomocou Arduina

EEPROM je skratka pre elektricky vymazateľnú programovateľnú pamäť iba na čítanie.

EEPROM je veľmi dôležitá a užitočná, pretože je energeticky nezávislou formou pamäte. To znamená, že aj keď je doska vypnutá, čip EEPROM si stále zachováva program, ktorý bol na ňu zapísaný. Keď teda dosku vypnete a potom znova zapnete, je možné spustiť program, ktorý bol zapísaný do pamäte EEPROM. V zásade teda EEPROM ukladá a spúšťa program bez ohľadu na to. To znamená, že môžete zariadenie vypnúť, nechať ho 3 dni vypnuté a vrátiť sa späť a zapnúť ho, a napriek tomu môže spustiť program, ktorý bol v ňom naprogramovaný. Takto funguje väčšina spotrebných elektronických zariadení.

Tento projekt sponzoruje LCSC. Používam elektronické súčiastky z LCSC.com. Spoločnosť LCSC má veľký záväzok ponúkať široký výber originálnych, vysokokvalitných elektronických komponentov za najlepšiu cenu s globálnou prepravnou sieťou do viac ako 200 krajín. Zaregistrujte sa ešte dnes a pri prvej objednávke získate zľavu 8 dolárov.

EEPROM je tiež veľmi účinná v tom, že jednotlivé bajty v tradičnej EEPROM je možné nezávisle čítať, mazať a prepisovať. Vo väčšine ostatných typov energeticky nezávislej pamäte to nie je možné vykonať. Sériové zariadenia EEPROM, ako napríklad EEPROM radu Microchip 24, vám umožňujú pridať viac pamäte k akémukoľvek zariadeniu, ktoré dokáže hovoriť I²C.

Zásoby

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 MHz kryštál
  4. Breadboard
  5. Rezistor 4,7k Ohm x 2
  6. Kondenzátor 22 pF x 2

Krok 1: Základy EEPROM

Základy EEPROM
Základy EEPROM

Čip Microchip 24LC2512 je možné zakúpiť v 8 -pinovom DIP balení. Piny na 24LC512 sú celkom priame a skladajú sa z napájania (8), GND (4), ochrany proti zápisu (7), SCL/SDA (6, 5) a troch adresných kolíkov (1, 2, 3).

Stručná história ROM

Počiatočné počítače typu „Stored -Program“- ako stolové kalkulačky a klávesnicové tlmočníky - začali používať ROM vo forme Diode Matrix ROM. Bola to pamäť tvorená diskrétnymi polovodičovými diódami umiestnenými na špeciálne organizovanej doske s plošnými spojmi. To ustúpilo maskovaniu ROM s príchodom integrovaných obvodov. Maska ROM bola veľmi podobná Diode Matrix ROM, iba bola implementovaná v oveľa menšom meradle. To však znamenalo, že nemôžete spájkovačkou presúvať niekoľko diód a preprogramovať ju. Masku ROM musel naprogramovať výrobca a potom nebolo možné ju zmeniť.

Bohužiaľ, maska ROM bola drahá a výroba trvala dlho, pretože každý nový program vyžadoval výrobu úplne nového zariadenia zlievarňou. V roku 1956 bol tento problém vyriešený vynálezom PROM (Programmable ROM), ktorý vývojárom umožnil programovať samotné čipy. To znamenalo, že výrobcovia mohli vyrábať milióny rovnakých neprogramovaných zariadení, čo ich robilo lacnejšími a praktickejšími. PROM však bolo možné zapísať iba raz pomocou vysokonapäťového programovacieho zariadenia. Po naprogramovaní zariadenia PROM nebolo možné vrátiť zariadenie do neprogramovaného stavu.

To sa zmenilo v roku 1971 vynálezom EPROM (Erasable Programmable ROM), ktorá - okrem pridania ďalšieho písmena k skratke - priniesla so sebou možnosť vymazať zariadenie a vrátiť ho do „prázdneho“stavu pomocou silného zdroja ultrafialového svetla. Správne, na preprogramovanie ste museli na IC integrovať jasné svetlo, aké je to cool? Ukazuje sa, že je to celkom cool, pokiaľ nie ste vývojár pracujúci na firmvéri. V takom prípade by ste skutočne chceli, aby ste mohli zariadenie preprogramovať pomocou elektrických signálov. To sa nakoniec stalo realitou v roku 1983 s vývojom EEPROM (elektricky vymazateľnej programovateľnej ROM) a tým sa dostávame k súčasnej ťažkej skratke.

Krok 2: Zážitky z EEPROM

EEPROM ako spôsob ukladania údajov má dve hlavné nevýhody. Vo väčšine aplikácií klady prevažujú nad mínusmi, ale mali by ste si ich uvedomiť pred začlenením EEPROM do vášho ďalšieho návrhu.

Technológia, ktorá zaisťuje fungovanie pamäte EEPROM, v prvom rade obmedzuje aj počet prepísaní. Súvisí to s tým, že sa elektróny zachytia v tranzistoroch, ktoré tvoria ROM a hromadia sa, až kým rozdiel v náboji medzi „1“a „0“nie je rozpoznateľný. Ale nebojte sa, väčšina EEPROM má maximálny počet prepisov 1 milión alebo viac. Pokiaľ nepíšete nepretržite do EEPROM, je nepravdepodobné, že dosiahnete toto maximum. Za druhé, EEPROM sa nevymaže, ak z nej odpojíte napájanie, ale nebude uchovávať vaše údaje neobmedzene dlho. Elektróny sa môžu unášať z tranzistorov a cez izolátor a v priebehu času efektívne vymazať EEPROM. To znamená, že k tomu zvyčajne dochádza v priebehu rokov (aj keď to môže byť urýchlené teplom). Väčšina výrobcov uvádza, že vaše údaje sú v EEPROM v bezpečí 10 rokov alebo viac pri izbovej teplote. A ešte jednu vec by ste mali mať na pamäti pri výbere zariadenia EEPROM pre váš projekt. Kapacita pamäte EEPROM sa meria v bitoch a nie v bajtoch. 512 kB EEPROM pojme 512 kB údajov, inými slovami iba 64 kB.

Krok 3: Pripojenie hardvéru Arduino

Pripojenie hardvéru Arduino
Pripojenie hardvéru Arduino
Pripojenie hardvéru Arduino
Pripojenie hardvéru Arduino

Dobre, teraz, keď vieme, čo je EEPROM, pripojme ho a uvidíme, čo môže urobiť! Aby naše zariadenie mohlo hovoriť, budeme musieť pripojiť napájacie aj sériové linky I²C. Toto zariadenie konkrétne beží na 5 VDC, takže ho pripojíme k výstupu 5 V nášho Arduino UNO. Tiež linky I²C budú potrebovať výsuvné odpory, aby komunikácia prebiehala správne. Hodnota týchto odporov závisí od kapacity vedení a frekvencie, s ktorou ho chcete komunikovať, ale dobrou zásadou pre nekritické aplikácie je udržať ho v rozsahu kΩ. V tomto prípade použijeme pull-up odpory 4,7 kΩ.

Na tomto zariadení sú tri piny na výber adresy I²C. Týmto spôsobom môžete mať na zbernici viac ako jednu EEPROM a každý z nich adresovať inak. Môžete ich všetky uzemniť, ale zapojíme ich tak, aby sme neskôr v návode mohli zapojiť zariadenie s vyššou kapacitou.

Na prepojenie všetkého dohromady použijeme breadboard. Nasledujúci diagram zobrazuje správne pripojenie pre väčšinu zariadení I²C EEPROM vrátane pamäte EEPROM Microchip radu 24, ktorú predávame.

Krok 4: Čítanie a písanie

Väčšinu času, keď používate EEPROM v spojení s mikrokontrolérom, v skutočnosti nebudete potrebovať vidieť všetok obsah pamäte naraz. Podľa potreby budete len čítať sem a tam a písať bajty. V tomto prípade však napíšeme celý súbor do EEPROM a potom ho celý prečítame, aby sme si ho mohli prezrieť v počítači. To by nás malo potešiť myšlienkou používania EEPROM a tiež nám poskytnúť pocit, koľko dát sa skutočne zmestí na malé zariadenie.

Niečo napísať

Náš príklad náčrtu jednoducho vezme každý bajt, ktorý príde cez sériový port, a zapíše ho do EEPROM, pričom bude sledovať, koľko bajtov sme zapísali do pamäte.

Zápis bajtu pamäte do EEPROM sa spravidla deje v troch krokoch:

  1. Odošlite najvýznamnejší bajt adresy pamäte, na ktorú chcete písať.
  2. Odošlite najmenej významný bajt adresy pamäte, na ktorú chcete napísať.
  3. Odošlite dátový bajt, ktorý by ste chceli uložiť na toto miesto.

Pravdepodobne existuje niekoľko kľúčových slov, ktoré sa dajú len ťažko vysvetliť:

Adresy pamäte

Ak si predstavíte, že všetky bajty v 512 Kbitovej EEPROM stoja v rade od 0 do 64 000 - pretože do bajtu je 8 bitov, a preto sa do 512 Kbitovej EEPROM zmestí 64 000 bajtov - potom je adresa pamäte miesto v riadok, kde by ste našli konkrétny bajt. Túto adresu musíme odoslať do EEPROM, aby vedela, kam umiestniť odoslaný bajt.

Najvýznamnejšie a najmenej významné bajty

Pretože v 256 Kbitovej EEPROM je 32 000 možných miest - a pretože 255 je najväčšie číslo, ktoré môžete kódovať v jednom byte, potrebujeme túto adresu odoslať v dvoch bajtoch. Najprv pošleme Najvýznamnejší bajt (MSB) - v tomto prípade prvých 8 bitov. Potom pošleme najmenej významný bajt (LSB) - druhých 8 bitov. Prečo? Pretože zariadenie očakáva, že ich bude prijímať, to je všetko.

Písanie stránok

Zapisovanie jedného bajtu naraz je v poriadku, ale väčšina zariadení EEPROM má niečo, čo sa nazýva „vyrovnávacia pamäť pre zápis stránok“, ktorá vám umožňuje zapísať viac bajtov naraz rovnakým spôsobom, ako by ste zapísali jeden bajt. Využijeme to v našom vzorovom náčrte. EEPROM používa interný čítač, ktorý automaticky zvyšuje umiestnenie pamäte s každým nasledujúcim prijatým dátovým bajtom. Po odoslaní adresy pamäte ju môžeme sledovať až s 64 bajtmi údajov. EEPROM predpokladá (oprávnene), že adresa 312 nasledovaná 10 bytmi bude zaznamenávať bajt 0 na adrese 312, bajt 1 na adrese 313, bajt 2 na adrese 314 atď.

Prečítajte si niečo

Čítanie z EEPROM prebieha v zásade rovnakým trojkrokovým procesom ako zápis do EEPROM:

  1. Odošlite najvýznamnejší bajt adresy pamäte, na ktorú chcete písať.
  2. Odošlite najmenej významný bajt adresy pamäte, na ktorú chcete napísať.
  3. Na tomto mieste požiadajte o dátový bajt.

Krok 5: Schémy a kód

Schémy a kód
Schémy a kód

Kód:

#zahrnúť

#define eeprom 0x50 // definuje základnú adresu EEPROM

neplatné nastavenie () {

Wire.begin (); // vytvorí objekt Wire

Serial.begin (9600);

nepodpísaná int adresa = 0; // prvá adresa EEPROM

Serial.println („Píšeme PSČ 22222, PSČ“); pre (adresa = 0; adresa <5; adresa ++) writeEEPROM (eeprom, adresa, '2'); // Zapíše 22222 do EEPROM

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

prázdna slučka () {

/*vo funkcii loop () nie je nič, pretože nechceme, aby arduino opakovane zapisovalo to isté do EEPROM znova a znova. Chceme iba jednorazový zápis, takže funkcii loop () sa pri EEPROM vyhýba.*/}

// definuje funkciu writeEEPROM

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

// definuje funkciu readEEPROM

byte readEEPROM (int adresa zariadenia, nepodpísaná int adresa eeaddress) {byte rdata = 0xFF; Wire.beginTransmission (adresa zariadenia); Wire.write ((int) (eeaddress >> 8)); // napíše MSB Wire.write ((int) (eeaddress & 0xFF)); // píše LSB Wire.endTransmission (); Wire.requestFrom (adresa zariadenia, 1); if (Wire.available ()) rdata = Wire.read (); vrátiť rdata; }

Odporúča: