Sisällysluettelo:

Tietojen lukeminen ja kirjoittaminen ulkoiseen EEPROMiin Arduinon avulla: 5 vaihetta
Tietojen lukeminen ja kirjoittaminen ulkoiseen EEPROMiin Arduinon avulla: 5 vaihetta

Video: Tietojen lukeminen ja kirjoittaminen ulkoiseen EEPROMiin Arduinon avulla: 5 vaihetta

Video: Tietojen lukeminen ja kirjoittaminen ulkoiseen EEPROMiin Arduinon avulla: 5 vaihetta
Video: Lukemisen ja kirjoittamisen sujuvuuden vaikeudet 2024, Heinäkuu
Anonim
Tietojen lukeminen ja kirjoittaminen ulkoiseen EEPROMiin Arduinon avulla
Tietojen lukeminen ja kirjoittaminen ulkoiseen EEPROMiin Arduinon avulla

EEPROM tarkoittaa sähköisesti poistettavaa ohjelmoitavaa vain luku -muistia.

EEPROM on erittäin tärkeä ja hyödyllinen, koska se on haihtumaton muistimuoto. Tämä tarkoittaa, että vaikka levy on sammutettu, EEPROM -siru säilyttää edelleen sille kirjoitetun ohjelman. Joten kun sammutat levyn ja kytket sen sitten uudelleen päälle, EEPROMiin kirjoitettu ohjelma voidaan suorittaa. Joten periaatteessa EEPROM tallentaa ja suorittaa ohjelman riippumatta siitä. Tämä tarkoittaa, että voit sammuttaa laitteen, pitää sen sammutettuna 3 päivää ja palata takaisin päälle ja käynnistää sen, ja se voi silti ajaa siihen ohjelmoidun ohjelman. Useimmat kulutuselektroniikkalaitteet toimivat näin.

Tätä projektia sponsoroi LCSC. Olen käyttänyt LCSC.comin elektronisia komponentteja. LCSC on vahvasti sitoutunut tarjoamaan laajan valikoiman aitoja, korkealaatuisia elektronisia komponentteja parhaaseen hintaan maailmanlaajuisella toimitusverkostolla yli 200 maahan. Rekisteröidy tänään ja saat 8 dollaria alennusta ensimmäisestä tilauksestasi.

EEPROM on myös erittäin tehokas siinä mielessä, että perinteisen EEPROMin yksittäiset tavut voidaan lukea, poistaa ja kirjoittaa uudelleen itsenäisesti. Useimmissa muissa haihtumattomissa muisteissa tätä ei voida tehdä. Sarja-EEPROM-laitteiden, kuten 24-sarjan Microchip EEPROM -laitteen, avulla voit lisätä muistia mihin tahansa laitteeseen, joka puhuu I²C-kieltä.

Tarvikkeet

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 MHz: n kristalli
  4. Leipälauta
  5. Vastus 4,7 k ohmia x 2
  6. Kondensaattori 22 pF x 2

Vaihe 1: EEPROMin perusteet

EEPROMin perusteet
EEPROMin perusteet

Microchip 24LC2512 -piiri voidaan ostaa 8 -nastaisena DIP -paketissa. 24LC512: n nastat ovat melko suoraviivaisia ja koostuvat tehosta (8), GND: stä (4), kirjoitussuojauksesta (7), SCL/SDA: sta (6, 5) ja kolmesta osoitetapista (1, 2, 3).

ROM: n lyhyt historia

Varhaiset "Stored -Program" -tyyppiset tietokoneet - kuten pöytälaskimet ja näppäimistötulkit - alkoivat käyttää ROM -muotoa diodimatriisi -ROM -muodossa. Tämä oli muisti, joka koostui erillisistä puolijohdediodeista, jotka oli sijoitettu erityisesti järjestettyyn piirilevyyn. Tämä antoi tien Mask Maskille integroitujen piirien myötä. Mask ROM oli paljon kuin diodimatriisi -ROM, vain se toteutettiin paljon pienemmässä mittakaavassa. Tämä tarkoitti kuitenkin sitä, että et voinut vain siirtää pari diodia ympäri juotosraudalla ja ohjelmoida se uudelleen. Valmistajan oli ohjelmoitava maskin ROM, eikä sitä sen jälkeen voitu muuttaa.

Valitettavasti Mask ROM oli kallis ja kesti kauan valmistaa, koska jokainen uusi ohjelma vaati upouuden laitteen valimoon. Vuonna 1956 tämä ongelma kuitenkin ratkaistiin keksimällä PROM (Programmable ROM), jonka avulla kehittäjät voivat ohjelmoida sirut itse. Tämä tarkoitti sitä, että valmistajat voisivat tuottaa miljoonia samaa ohjelmoimatonta laitetta, mikä teki siitä halvemman ja käytännöllisemmän. PROM voidaan kuitenkin kirjoittaa vain kerran suurjänniteohjelmointilaitteella. Kun PROM -laite oli ohjelmoitu, sitä ei voitu palauttaa ohjelmoimattomaan tilaan.

Tämä muuttui vuonna 1971, kun keksittiin EPROM (Erasable Programmable ROM), joka lisäsi lyhenteeseen toisen kirjaimen - toi mukanaan mahdollisuuden poistaa laitteen ja palauttaa sen "tyhjään" tilaan käyttämällä vahvaa UV -valonlähdettä. Aivan oikein, sinun oli loistettava kirkas valo IC: lle ohjelmoidaksesi sen uudelleen, kuinka siistiä se on? Osoittautuu, että se on aika siistiä, ellet ole kehittäjä, joka työskentelee laiteohjelmiston parissa, jolloin haluat todella pystyä ohjelmoimaan laitteen uudelleen sähköisten signaalien avulla. Tästä tuli lopulta totta vuonna 1983, kun kehitettiin EEPROM (Electrically Erasable Programmable ROM), ja sen myötä pääsemme nykypäivän hankalaan lyhenteeseen.

Vaihe 2: EEPROMin omituisuudet

EEPROM -järjestelmässä on kaksi suurta haittaa tietojen tallennusmenetelmänä. Useimmissa sovelluksissa edut ovat suurempia kuin haitat, mutta sinun tulee olla tietoinen niistä ennen EEPROMin sisällyttämistä seuraavaan suunnitteluun.

Ensinnäkin tekniikka, joka saa EEPROMin toimimaan, rajoittaa myös uudelleen kirjoittamisten lukumäärää. Tämä liittyy siihen, että elektronit jäävät loukkuun ROM: n muodostaviin transistoreihin ja kertyvät, kunnes varauksen "1" ja "0" välinen varausero on tunnistamaton. Mutta ei hätää, useimpien EEPROMien uudelleenkirjoitusmäärä on enintään miljoona tai enemmän. Niin kauan kuin et kirjoita jatkuvasti EEPROMiin, on epätodennäköistä, että saavutat tämän maksimin. Toiseksi EEPROMia ei poisteta, jos poistat siitä virran, mutta se ei pidä tietojasi loputtomiin. Elektronit voivat ajautua ulos transistoreista ja eristimen läpi ja poistaa tehokkaasti EEPROMin ajan myötä. Tämä tapahtuu yleensä vuosien varrella (vaikka sitä voidaan kiihdyttää lämmöllä). Useimmat valmistajat sanovat, että tietosi ovat turvassa EEPROM -laitteessa vähintään 10 vuotta huoneenlämmössä. Ja on vielä yksi asia, joka sinun on pidettävä mielessä, kun valitset projektillesi EEPROM -laitteen. EEPROM -kapasiteetti mitataan bitteinä eikä tavuina. 512 000 EEPROMiin mahtuu 512 kt bittiä dataa, toisin sanoen vain 64 kt.

Vaihe 3: Arduino -laitteiston liitäntä

Arduino -laitteiston liitäntä
Arduino -laitteiston liitäntä
Arduino -laitteiston liitäntä
Arduino -laitteiston liitäntä

Okei, nyt kun tiedämme, mitä EEPROM on, kytke se yhteen ja katso, mitä se voi tehdä! Jotta saisimme laitteemme puhumaan, meidän on kytkettävä virta sekä I²C -sarjalinjat. Tämä laite toimii erityisesti 5 VDC: llä, joten liitämme sen Arduino UNO: n 5 V: n ulostuloon. Lisäksi I²C-linjat tarvitsevat vetovastusvastuksia, jotta tiedonsiirto toimisi oikein. Näiden vastuksien arvo riippuu niiden kapasitanssista ja taajuudesta, joista haluat välittää sen, mutta hyvä nyrkkisääntö ei-kriittisille sovelluksille pidetään vain kΩ-alueella. Tässä esimerkissä käytämme 4,7 kΩ vetovastuksia.

Tässä laitteessa on kolme nastaa I²C -osoitteen valitsemiseksi. Tällä tavalla sinulla voi olla useampi kuin yksi EEPROM väylässä ja osoitteet eri tavalla. Voisit vain maadoittaa ne kaikki, mutta me johdotamme ne, jotta voimme pudottaa suuremman kapasiteetin laitteen myöhemmin opetusohjelmassa.

Käytämme leipälautaa yhdistääksemme kaiken yhteen. Alla olevassa kaaviossa näkyy oikea liitäntä useimmille I²C EEPROM -laitteille, mukaan lukien myymämme 24-sarjan mikrosiru EEPROM.

Vaihe 4: Lukeminen ja kirjoittaminen

Suurimman osan ajasta, kun käytät EEPROM -laitetta yhdessä mikro -ohjaimen kanssa, sinun ei tarvitse itse nähdä koko muistin sisältöä kerralla. Voit vain lukea ja kirjoittaa tavuja siellä täällä tarpeen mukaan. Tässä esimerkissä aiomme kuitenkin kirjoittaa koko tiedoston EEPROMiin ja lukea sen sitten takaisin, jotta voimme tarkastella sitä tietokoneellamme. Tämän pitäisi saada meidät tyytyväisiksi ajatukseen käyttää EEPROMia ja antaa myös tunteen siitä, kuinka paljon dataa todella mahtuu pieneen laitteeseen.

Kirjoittaa jotain

Esimerkkiluonnoksemme yksinkertaisesti ottaa kaikki tavut, jotka tulevat sarjaportin yli, ja kirjoittaa ne EEPROMiin pitäen kirjaa siitä, kuinka monta tavua olemme kirjoittaneet muistiin.

Muistitavu kirjoitetaan EEPROMiin yleensä kolmessa vaiheessa:

  1. Lähetä muistiosoitteen merkittävin tavu, johon haluat kirjoittaa.
  2. Lähetä muistin osoitteen vähiten merkittävä tavu, johon haluat kirjoittaa.
  3. Lähetä datatavu, jonka haluat tallentaa tähän paikkaan.

Siellä on luultavasti muutamia avainsanoja, jotka eivät selitä:

Muistiosoitteet

Jos kuvittelet kaikki 512 Kbit: n EEPROMin tavut seisovan rivillä 0 - 64000 - koska tavua on 8 bittiä ja siksi voit sovittaa 64000 tavua 512 Kbit: n EEPROM -muistiin -, muistipaikka on paikka rivi, josta löydät tietyn tavun. Meidän on lähetettävä tämä osoite EEPROMille, jotta se tietää, mihin lähetettävä tavu sijoitetaan.

Merkittävimmät ja vähiten merkittävät tavut

Koska 256 Kbit: n EEPROM -järjestelmässä on 32 000 mahdollista paikkaa - ja koska 255 on suurin numero, jonka voit koodata yhteen tavuun - meidän on lähetettävä tämä osoite kahdessa tavussa. Ensinnäkin lähetämme merkittävimmän tavun (MSB) - tässä tapauksessa ensimmäiset 8 bittiä. Sitten lähetämme vähiten merkittävän tavun (LSB) - toiset 8 bittiä. Miksi? Koska näin laite odottaa vastaanottavansa ne, siinä kaikki.

Sivun kirjoittaminen

Yksi tavu kerrallaan kirjoittaminen on hienoa, mutta useimmissa EEPROM -laitteissa on jotain nimeltään "sivun kirjoituspuskuri", jonka avulla voit kirjoittaa useita tavuja kerrallaan samalla tavalla kuin yhden tavun. Hyödynnämme tätä esimerkkiluonnoksessamme. EEPROM käyttää sisäistä laskuria, joka lisää automaattisesti muistipaikkaa jokaisella seuraavalla vastaanotetulla datatavulla. Kun muistiosoite on lähetetty, voimme seurata sitä jopa 64 tavun datalla. EEPROM olettaa (oikeutetusti), että osoite 312, jota seuraa 10 tavua, tallentaa tavun 0 osoitteeseen 312, tavun 1 osoitteeseen 313, tavun 2 osoitteeseen 314 ja niin edelleen.

Lue jotain

EEPROMista lukeminen noudattaa periaatteessa samaa kolmivaiheista prosessia kuin EEPROMille kirjoittaminen:

  1. Lähetä muistiosoitteen merkittävin tavu, johon haluat kirjoittaa.
  2. Lähetä muistin osoitteen vähiten merkittävä tavu, johon haluat kirjoittaa.
  3. Pyydä datatavua kyseisessä paikassa.

Vaihe 5: Kaaviot ja koodi

Kaaviot ja koodi
Kaaviot ja koodi

Koodi:

#sisältää

#define eeprom 0x50 // määrittää EEPROMin perusosoitteen

void setup () {

Wire.begin (); // luo Wire -objektin

Sarja.alku (9600);

allekirjoittamaton int -osoite = 0; // EEPROMin ensimmäinen osoite

Serial.println ("Kirjoitamme postinumeron 22222, postinumero"); for (osoite = 0; osoite <5; osoite ++) writeEEPROM (eeprom, address, '2'); // Kirjoittaa 22222 EEPROMiin

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

void loop () {

/*silmukka () -funktiossa ei ole mitään, koska emme halua arduinon kirjoittavan samaa asiaa toistuvasti EEPROMiin uudestaan ja uudestaan. Haluamme vain kertaluonteisen kirjoituksen, joten silmukka () -funktiota vältetään EEPROM-laitteilla.*/}

// määrittelee writeEEPROM -funktion

void writeEEPROM (int deviceaddress, unsigned int eeaddress, byte data) {Wire.beginTransmission (laiteosoite); Wire.write ((int) (sähköpostiosoite >> 8)); // kirjoittaa MSB Wire.write ((int) (eeaddress & 0xFF)); // kirjoittaa LSB Wire.write (data); Wire.endTransmission (); }

// määrittelee readEEPROM -funktion

tavu lukuEEPROM (int -laitteen osoite, allekirjoittamaton int -osoite) {tavu rdata = 0xFF; Wire.beginTransmission (laiteosoite); Wire.write ((int) (sähköpostiosoite >> 8)); // kirjoittaa MSB Wire.write ((int) (eeaddress & 0xFF)); // kirjoittaa LSB Wire.endTransmission (); Wire.requestFrom (laiteosoite, 1); if (Wire.available ()) rdata = Wire.read (); palauta rdata; }

Suositeltava: