You are on page 1of 10

Textul si imaginile din acest document sunt licentiate

Attribution-NonCommercial-NoDerivs
CC BY-NC-ND
Codul sursa din acest document este licentiat
Public-Domain
Esti liber sa distribui acest document prin orice mijloace consideri (email, publicare pe website / blog, printare,
sau orice alt mijloc), atat timp cat nu aduci nici un fel de modificari acestuia. Codul sursa din acest document
poate fi utilizat in orice fel de scop, de natura comerciala sau nu, fara nici un fel de limitari.
Arduino cum accesez o memorie EEPROM externa ?
Ce sunt memoriile EEPROM externe ?
Termenul EEPROM inseamna Electrically Erasable Programmable Read-Only Memory, adica
acest termen se refera la memoriile nevolatile care pot fi citite/scrise si rescrise de nenumarate ori
Memoriile nevolatile sunt cele care isi pastrea!a continutul, c"iar si dupa ce ai intrerupt
alimentarea #pre exemplu, un alt dispo!itiv care isi pastrea!a datele este "ard dis$-ul C"iar daca ai
oprit calculatorul, "ard dis$-ul pastrea!a toate informatiile intacte Ele nu se sterg si pot fi accesate din
nou la urmatoarea pornire a calculatorului
%n aceeasi maniera functionea!a si o memorie EEPROM Poti sa salve!i date in ea si sa le citesti
ori de cate ori vrei tu, c"iar si dupa ce ai intrerupt alimentarea
In ce conditii poti sa folosesti o memorie EEPROM ?
%n primul rand, memoriile EEPROM nu sunt destinate pentru a salva blocuri uriase de
informatii &asa cum face un "ard dis$', dar poti folosi o memorie EEPROM pentru a salva o cantitate
minima de informatii, adica cel mult cativa M(
%n al doilea rand, memoriile sunt simplu de utili!at si sunt produse in capsule de circuite
integrate, adica poti sa le adaugi foarte usor si foarte rapid in proiectul tau
)lt avanta* al memoriilor EEPROM este ca multumita interfetei de comunicare cu placa
)rduino, poti sa folosesti nu doar una, ci mai multe memorii inlantuite pe o magistrala %+C sau #P%
http://www.robofun.ro/forum
,ar totusi in ce situatii poti sa folosesti aceste memorii-
%ata un data logger ce se foloseste de memoria EEPROM pentru a salva un numar mare de
esantioane cu valori de temperatura.
"ttp.//forumarduinocc/indexp"p/topic,///0112"tml
3n alt proiect asemanator celui de mai sus este un data logger care inregistrea!a vite!a de
deplasare a unei biciclete.
"ttp.//444eig"tlinescom/blog/+225/26/data-logging-to-t"e-arduino-eeprom/
,aca nu stiai afla ca si placa )rduino, mai exact microcontroller-ul placii, are propria memorie
EEPROM pe care poti salva pana la 7261 de octeti &78(' Poti afla mai multe detalii despre memoria
interna accesand urmatoarele lin$-uri.
"ttp.//arduinocc/en/Reference/EEPROM93y#:;Pl<u#o
"ttp.//arduinocc/en/Tutorial/EEPROM=rite93y#%>Pl<u#o
"ttp.//arduinocc/en/Tutorial/EEPROMRead93y#%efl<u#o
http://www.robofun.ro/forum
Cum conectez o memorie EEPROM la o placa Arduino ?
%n acest tutorial s-a folosit o memorie EEPROM )T+7C2+, a carei fisa de catalog se poate
descarca de la urmatoarea adresa.
"ttp.//444atmelcom/%mages/doc0+?1pdf
#pre exemplu, din fisa de catalog se pot afla urmatoarele specificatii ale memoriei.
Tensiunea de alimentare. ? @ sau +; @
Organi!area interna a memoriei care iti va fi de folos atunci cand o adrese!i
Tipul interfetei seriale &memoria de fata necesita o interfata seriala pe + fire'
@ite!a de scriere a datelor in functie de tensiunea de alimentare
Aumarul de scrieri posibile &memoria de fata suporta / milion de cicluri de scrieri'
Configuratia pinilor &pinii de adresare, pinii interfetei seriale, pinii de alimentare si pinul de
citire/scriere'
,ar totusi cum conecte! memoria la placa )rduino - Pentru a reali!a acest lucru vei avea
nevoie de o placa breadboard, fire de conexiune tata-tata si memoria in sine
Conexiunea placii )rduino cu memoria EEPROM se va reali!a dupa urmatoarea sc"ema.
http://www.robofun.ro/forum
Mai exact vei conecta pinii placii )rduino cu memoria EEPROM dupa urmatorul tabel.
Arduino 5V Memorie EEPROM VCC
Arduino GND Memorie EEPROM GND, A0, A1, A2, WP
Arduino SCL Memorie EEPROM SCL
Arduino SDA Memorie EEPROM SDA
Pinii memoriei se pot afla direct din fisa de catalog &lin$-ul de mai sus' sau din urmatoarea
diagrama.
http://www.robofun.ro/forum
http://www.robofun.ro/forum
Ce repre!inta pinii marcati cu )2, )/, )+ si =P -
)m spus mai devreme ca o placa )rduino poate adresa mai multe memorii, iar pinii )2, )/ si
)+ te pot a*uta sa inlantuiesti pe magistrala seriala pana la 5 memorii EEPROM %n ca!ul in care doresti
sa folosesti o singura memorie, tot ce trebuie sa faci este sa conecte!i pinii la BA,, adica toti pinii sa
capete valoarea logica C2D ,aca vrei sa adaugi o noua memorie, tot ce trebuie sa faci este sa alegi o
configuratie diferita pentru noua memorie, adica sa conecte!i pinii )2 si )/ la BA, iar pinul ramas,
)+, la @CC Pentru o a treia memorie trebuie sa alegi o noua configuratie, diferita fata de celelalte
doua %n final poti adauga pana la 5 memorii
%n ca!ul de fata, placa )rduino va adresa o singura memorie EEPROM, dar tie iti ramane sa
descoperi cum se poate adresa o a doua memorie si c"iar mai multe
Ramane pinul =P care inseamna C=rite ProtectD )cest pin iti permite sa prote*e!i datele de pe
memoria EEPROM dupa anumite reguli pe care le poti descoperi in fisa de catalog
%n ca!ul de fata, pinul =P este conectat la BA, si asta inseamna ca esti liber sa scrii si sa citesti
memoria ori de cate ori vrei tu, adica functia de protectie la scriere este de!activata
Cum citesc/scriu memoria EEPROM din Arduino ?
%ata + functii simple care iti permit sa scrii si sa citesti in/din memoria EEPROM.
http://www.robofun.ro/forum
void writeEEPROMint devi!e"ddre##, un#i$ned int ee"ddre##, %&te
d"t" '
(
Wire)%e$in*r"n#mi##iondevi!e"ddre##'+
Wire)writeint'ee"ddre##'+
Wire)writed"t"'+
Wire)end*r"n#mi##ion'+
de,"&5'+
-
%&te re"dEEPROMint devi!e"ddre##, un#i$ned int ee"ddre## '
(
%&te rd"t" . 0/00+
Wire)%e$in*r"n#mi##iondevi!e"ddre##'+
Wire)writeint'ee"ddre##'+
Wire)end*r"n#mi##ion'+
Wire)re1ue#t0romdevi!e"ddre##,1'+
i2 Wire)"v"i,"%,e'' rd"t" . Wire)re"d'+
return rd"t"+
-
Cum functionea!a functia de scriere - Ea prima vedere, functia pare extrem de simpla deoarece
este formata din ? instructiuni Ea apelare functia accepta 0 parametrii, dintre care primul repre!inta
adresa fi!ica a memoriei EEPROM, al doilea parametru repre!inta adresa locatiei din memorie la care
vrei sa faci scrierea, iar al treilea parametru repre!inta informatia pe care doresti sa o salve!i #implu -
Cum stabilesc adresa fi!ica a memoriei - %n primul rand, mai devreme am vorbit despre pinii
)2, )/ si )+ pe care i-ai conectat la BA,, adica le-ai dat tuturor valoarea logica C2D
,aca te uiti in fisa de catalog a memoriei vei intalni urmatoarea imagine.
http://www.robofun.ro/forum
Pentru memoria de fata este valabila doar prima linie marcata cu /8/+8 in care apar bitii )+,
)/ si )2 ,aca acesti biti sunt conectati la BA,, inseamna ca toti bitii capata valoarea C2D
,aca reali!e!i conversia din binar in "exa!ecimal a urmatorului sir de biti C/2/2222D, vei
descoperi adresa "ard4are pe care o poti folosi in functia de mai sus, respectiv 2x?2
#crierea propriu-!isa a informatiei in memoria EEPROM se reali!ea!a dupa urmatoarea
diagrama &pe care o poti descoperi tot din fisa de catalog' %ti ramane ca tu sa descoperi cum lucrea!a
instructiunile din interiorul functiei de scriere, asa cum indica si diagrama de mai *os
Cum functionea!a functia de citire - ,iferenta intre functia de scriere si cea de citire este ca cea
din urma returnea!a ceva dintr-o locatie de memorie )sta inseamna ca la apelare, functia accepta +
parametrii, respectiv adresa "ard4are a memoriei &descoperita mai sus' si locatia din memorie
%nstructiunile de citire sunt asemanatoare functiei de scriere, dar exista ceva in plus
Tot ce trebuie sa faci este sa cauti diagrama de citire din fisa de catalog si sa corele!i
instructiunile
)m functiile de scriere si citire, dar cum le apele! -
%ata un exemplu.
3in!,ude 4Wire)56
3de2ine di#71 0/50 88"dre#" 5"rdw"re " memoriei
void #etu9void'
(
Seri",)%e$in:;00'+
Wire)%e$in'+
un#i$ned int "ddre## . 0+
writeEEPROMdi#71, "ddre##, 12<'+
Seri",)9rint,nre"dEEPROMdi#71, "ddre##', DEC'+
-
void ,oo9'(
-
http://www.robofun.ro/forum
Prima linie de cod, directiva preprocesor, apelea!a libraria =ire Eibraria este responsabila cu
protocolul de comunicatie intre placa )rduino si memoria EEPROM
)m mentionat mai sus ca fiecare memorie poate capata o adresa "ard4are &prin configurarea
pinilor )2, )/ si )+' %n codul de mai sus, adresa poarta numele dis$/ si are valoarea "exa!ecimala
2x?2
%n rutina setup&' se initiali!ea!a Monitorul #erial, conexiunea seriala cu memoria EEPROM,
adresa locatiei la care vrei sa faci o scriere si apoi o citire
,upa care se apelea!a functia de scriere si dupa cum observi se scrie valoarea /+0 in locatia 2,
din memoria EEPROM cu adresa "ard4are 2x?2
)poi se citeste si se afisea!a din memoria EEPROM, valoarea scrisa anterior prin functia.
#erialprintln&readEEPROM&dis$/, address', ,EC'F
Ce altceva poti sa faci cu o memorie EEPROM -
Pe langa a salva si a scrie date, poti spre exemplu sa salve!i un fisier 4av pentru a il folosi mai
tar!iu la redare %ata un exemplu.
"ttp.//444enidenet/4ebcms/indexp"p-pageGpcm+p4m-multiplayer
http://www.robofun.ro/forum

You might also like