Tartalomjegyzék:

Adatok olvasása és írása külső EEPROM -ra az Arduino használatával: 5 lépés
Adatok olvasása és írása külső EEPROM -ra az Arduino használatával: 5 lépés

Videó: Adatok olvasása és írása külső EEPROM -ra az Arduino használatával: 5 lépés

Videó: Adatok olvasása és írása külső EEPROM -ra az Arduino használatával: 5 lépés
Videó: PIC programozás lépésről - lépésre 4. ( Konfigurációs bitek beállításai ) 2024, Július
Anonim
Adatok olvasása és írása külső EEPROM -ra az Arduino használatával
Adatok olvasása és írása külső EEPROM -ra az Arduino használatával

Az EEPROM jelentése: elektromosan törölhető programozható, csak olvasható memória.

Az EEPROM nagyon fontos és hasznos, mivel a memória nem felejtő formája. Ez azt jelenti, hogy a tábla kikapcsolt állapotában is az EEPROM chip megtartja a hozzá írt programot. Tehát amikor kikapcsolja a táblát, majd újra bekapcsolja, az EEPROM -ba írt program futtatható. Tehát alapvetően az EEPROM tárol és futtat egy programot, bármi is legyen. Ez azt jelenti, hogy kikapcsolhatja az eszközt, 3 napig kikapcsolhatja, majd visszatérhet és bekapcsolhatja, és továbbra is futtathatja a benne programozott programot. A legtöbb szórakoztatóelektronikai eszköz így működik.

Ezt a projektet az LCSC támogatja. Az LCSC.com elektronikus alkatrészeit használtam. Az LCSC határozottan elkötelezett amellett, hogy valódi, kiváló minőségű elektronikus alkatrészek széles választékát kínálja a legjobb áron, több mint 200 országba irányuló globális szállítási hálózattal. Regisztráljon még ma, és 8 USD kedvezményt kap az első rendelésnél.

Az EEPROM abban is nagyon hatékony, hogy a hagyományos EEPROM egyes bájtjai önállóan olvashatók, törölhetők és átírhatók. A legtöbb más típusú nem felejtő memóriában ezt nem lehet megtenni. A soros EEPROM eszközök, mint például a 24-es Microchip EEPROM, lehetővé teszik, hogy több memóriát vegyen fel minden olyan eszközre, amely képes beszélni I²C nyelven.

Kellékek

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 MHz -es kristály
  4. Kenyeretábla
  5. Ellenállás 4,7k Ohm x 2
  6. Kondenzátor 22 pF x 2

1. lépés: Az EEPROM alapjai

Az EEPROM alapjai
Az EEPROM alapjai

A Microchip 24LC2512 chip 8 tűs DIP csomagban vásárolható meg. A 24LC512 csapjai meglehetősen egyszerűek, és tápellátásból (8), GND-ből (4), írásvédelemből (7), SCL/SDA-ból (6, 5) és három címtűből (1, 2, 3) állnak.

A ROM rövid története

A korai "Stored -Program" típusú számítógépek - például asztali számológépek és billentyűzet -tolmácsok - elkezdték használni a ROM -ot Diode Matrix ROM formájában. Ez a memória diszkrét félvezető diódákból állt, amelyeket egy speciálisan szervezett NYÁK -ra helyeztek. Ez utat engedett a Mask ROM -nak az integrált áramkörök megjelenésével. A Mask ROM nagyon hasonlított a Diode Matrix ROM -hoz, csak sokkal kisebb léptékben valósult meg. Ez azonban azt jelentette, hogy nem tudott pár diódát forrasztópáka segítségével mozgatni és átprogramozni. A maszk ROM -ot a gyártónak kellett programoznia, és ezt követően nem lehetett megváltoztatni.

Sajnos a Maszk ROM drága volt, és sokáig tartott az előállítása, mert minden új program megkövetelte, hogy egy vadonatúj eszközt gyártsanak egy öntöde. 1956 -ban azonban ezt a problémát megoldották a PROM (Programozható ROM) feltalálásával, amely lehetővé tette a fejlesztők számára, hogy maguk programozzák a chipeket. Ez azt jelentette, hogy a gyártók millióikat tudtak előállítani ugyanabból a nem programozott eszközből, ami olcsóbbá és praktikusabbá tette. A PROM-ot azonban csak egyszer lehetett írni nagyfeszültségű programozóeszköz használatával. A PROM eszköz programozása után nem volt mód visszaállítani az eszközt programozatlan állapotába.

Ez 1971 -ben megváltozott az EPROM (Erasable Programmable ROM) feltalálásával, amely - amellett, hogy egy másik betűt is hozzáadott a rövidítéshez - lehetővé tette az eszköz törlését és "üres" állapotba való visszaállítását erős UV -fényforrás segítségével. Így van, élénk fényt kellett rávilágítania az IC -re az újraprogramozásához, mennyire jó ez? Nos, kiderül, hogy ez nagyon jó, hacsak nem fejlesztő vagy, aki firmware -en dolgozik, ebben az esetben nagyon szeretné, ha az elektromos jelek segítségével újraprogramozhatná az eszközt. Ez végül 1983 -ban valósággá vált az EEPROM (Electrically Erasable Programmable ROM) fejlesztésével, és ezzel elérkeztünk a jelenlegi nehézkes rövidítéshez.

2. lépés: Az EEPROM furcsaságai

Az EEPROM -nak, mint adattárolási módszernek két nagy hátránya van. A legtöbb alkalmazásban az előnyök meghaladják a hátrányokat, de tisztában kell lenniük ezekkel, mielőtt az EEPROM -ot beépítik a következő tervezésbe.

Először is, az EEPROM működését lehetővé tevő technológia korlátozza az újraírások számát is. Ennek az az oka, hogy az elektronok beszorulnak a ROM -ot alkotó tranzisztorokba, és addig épülnek fel, amíg az "1" és a "0" közötti töltéskülönbség felismerhetetlen. De ne aggódjon, a legtöbb EEPROM maximális átírási száma 1 millió vagy több. Amíg nem ír folyamatosan az EEPROM -hoz, nem valószínű, hogy eléri ezt a maximumot. Másodszor, az EEPROM nem törlődik, ha kikapcsolja az áramellátást, de nem fogja megőrizni az adatait a végtelenségig. Az elektronok kisodródhatnak a tranzisztorokból és a szigetelőn keresztül, és idővel hatékonyan törölhetik az EEPROM -ot. Ennek ellenére ez általában évek során következik be (bár hővel felgyorsítható). A legtöbb gyártó szerint az adatok biztonságban vannak az EEPROM -on 10 évig vagy tovább szobahőmérsékleten. És még egy dolgot tartson szem előtt, amikor EEPROM -eszközt választ a projekthez. Az EEPROM kapacitását bitekben és nem bájtban mérik. Egy 512 000 EEPROM 512 KB adatot tartalmaz, más szóval mindössze 64 KB -ot.

3. lépés: Az Arduino hardver csatlakoztatása

Arduino hardver összekapcsolása
Arduino hardver összekapcsolása
Arduino hardver összekapcsolása
Arduino hardver összekapcsolása

Oké, most, hogy tudjuk, mi az EEPROM, csatlakoztassunk egyet, és nézzük meg, mire képes! Ahhoz, hogy eszközünk beszélni tudjon, áramot és I²C soros vezetékeket kell csatlakoztatnunk. Ez az eszköz különösen 5 V egyenáramú feszültségen működik, ezért csatlakoztatjuk az Arduino UNO 5 V -os kimenetéhez. Ezenkívül az I²C vonalaknak felhúzó ellenállásokra lesz szükségük a megfelelő kommunikációhoz. Ezeknek az ellenállásoknak az értéke a kommunikálni kívánt vonalak kapacitásától és frekvenciájától függ, de a nem kritikus alkalmazások jó ökölszabálya, ha csak a kΩ tartományban tartják. Ebben a példában 4,7 kΩ-os felhúzó ellenállásokat használunk.

Ezen az eszközön három érintkező található az I²C cím kiválasztásához, így több EEPROM is lehet a buszon, és mindegyik másként címezhető. Lehet, hogy csak földelni mindegyiket, de bekötjük őket, hogy a bemutató későbbi részében nagyobb kapacitású eszközt dobhassunk be.

Kenyérsütőt használunk, hogy mindent összekapcsoljunk. Az alábbi ábra a legtöbb I²C EEPROM eszköz helyes bekötését mutatja, beleértve az általunk forgalmazott 24-es sorozatú Microchip EEPROM-ot is.

4. lépés: Olvasás és írás

A legtöbb esetben, amikor EEPROM -ot használ mikrokontrollerrel együtt, valójában nem kell egyszerre látnia a memória teljes tartalmát. Szükség szerint csak itt és ott olvashat és írhat bájtokat. Ebben a példában azonban egy teljes fájlt fogunk írni az EEPROM -ba, majd visszaolvassuk, hogy a számítógépünkön megtekinthessük. Ez megnyugtathat minket az EEPROM használatának ötletével, és azt is érzékelheti, hogy mennyi adat fér el egy kis eszközön.

Írjon valamit

A példavázlatunk egyszerűen átvesz minden bájtot, amely a soros porton keresztül érkezik, és beírja az EEPROM -ba, nyomon követve, hogy hány bájtot írtunk a memóriába.

A memória bájtjának írása az EEPROM -ba általában három lépésben történik:

  1. Küldje el a memóriacím legjelentősebb bájtját, amelybe írni szeretne.
  2. Küldje el a memóriacím legkevesebb jelentős bájtját, amelyre írni szeretne.
  3. Küldje el az adatbájtot, amelyet ezen a helyen szeretne tárolni.

Valószínűleg van néhány kulcsszó, amely nem magyarázza meg:

Memóriacímek

Ha azt képzeli, hogy az 512 Kbit -es EEPROM összes bájtja 0 és 64000 közötti sorban áll - mivel 8 bit egy bájt, és ezért 64000 bájt elfér egy 512 kbit -es EEPROM -on -, akkor a memóriacím a hely. sor, ahol egy adott bájtot talál. Ezt a címet el kell küldenünk az EEPROM -nak, hogy tudja, hová tegye a küldendő bájtot.

Legjelentősebb és legkevésbé jelentős bájtok

Mivel egy 256 Kbit -es EEPROM -ban 32000 lehetséges hely található - és mivel a 255 a legnagyobb szám, amelyet egy bájtban kódolhat -, ezt a címet két bájtban kell elküldenünk. Először elküldjük a legjelentősebb bájtot (MSB) - ebben az esetben az első 8 bitet. Ezután elküldjük a legkevesebb jelentős bájtot (LSB) - a második 8 bitet. Miért? Mivel az eszköz így várja a fogadást, ennyi az egész.

Oldalírás

Egyszerre egy bájt írása rendben van, de a legtöbb EEPROM eszköz rendelkezik úgynevezett "oldal írási pufferrel", amely lehetővé teszi, hogy egyszerre több bájtot írjon ugyanúgy, mint egyetlen bájtot. Ezt ki fogjuk használni példavázlatunkban. Az EEPROM belső számlálót használ, amely automatikusan növeli a memória helyét minden következő adatbájttal. A memóriacím elküldése után akár 64 bájt adatot is követhetünk. Az EEPROM feltételezi (jogosan), hogy a 312 -es cím, amelyet 10 bájt követ, a 0 -as bájtot rögzíti a 312 -es címen, az 1 -es bájt a 313 -as címen, a 2 -es bájt a 314 -es címen stb.

Olvass valamit

Az EEPROM-ból történő olvasás alapvetően ugyanazt a háromlépéses folyamatot követi, mint az EEPROM-hoz való írás:

  1. Küldje el a memóriacím legjelentősebb bájtját, amelybe írni szeretne.
  2. Küldje el a memóriacím legkevésbé jelentős bájtját, amelyre írni szeretne.
  3. Kérje az adatbájtot az adott helyen.

5. lépés: Sémák és kód

Vázlatok és kód
Vázlatok és kód

Kód:

#befoglalni

#define eeprom 0x50 // az EEPROM alapcímét határozza meg

void setup () {

Wire.begin (); // létrehoz egy Wire objektumot

Sorozat.kezdet (9600);

előjel nélküli int cím = 0; // az EEPROM első címe

Serial.println ("Írjuk az irányítószámot 22222, irányítószám"); for (cím = 0; cím <5; cím ++) writeEEPROM (eeprom, cím, '2'); // 22222 -t ír az EEPROM -ba

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

void loop () {

/*nincs semmi a loop () függvényben, mert nem akarjuk, hogy az arduino újra és újra ugyanazt írja az EEPROM -nak. Csak egyszeri írást szeretnénk, így a loop () függvény elkerülhető az EEPROM-oknál.*/}

// az writeEEPROM függvényt határozza meg

void writeEEPROM (int deviceaddress, unsigned int eeaddress, byte data) {Wire.beginTransmission (eszközcím); Wire.write ((int) (e -cím >> 8)); // írja az MSB Wire.write ((int) (eeaddress & 0xFF)); // írja az LSB Wire.write (adatok); Wire.endTransmission (); }

// definiálja a readEEPROM függvényt

byte readEEPROM (int eszközcím, előjel nélküli int eeaddress) {byte rdata = 0xFF; Wire.beginTransmission (eszközcím); Wire.write ((int) (e -cím >> 8)); // írja az MSB Wire.write ((int) (eeaddress & 0xFF)); // írja az LSB Wire.endTransmission (); Wire.requestFrom (eszközcím, 1); if (Wire.available ()) rdata = Wire.read (); return rdata; }

Ajánlott: