Բովանդակություն:

Արտաքին EEPROM- ում տվյալների ընթերցում և գրում Arduino- ի միջոցով. 5 քայլ
Արտաքին EEPROM- ում տվյալների ընթերցում և գրում Arduino- ի միջոցով. 5 քայլ

Video: Արտաքին EEPROM- ում տվյալների ընթերցում և գրում Arduino- ի միջոցով. 5 քայլ

Video: Արտաքին EEPROM- ում տվյալների ընթերցում և գրում Arduino- ի միջոցով. 5 քայլ
Video: Բջջային հեռախոսի ջերմաստիճանի կարգավորիչ DT 06 WIFI մոդուլով | LDmicro-Roboremo ծրագրավորում 2024, Նոյեմբեր
Anonim
Արտաքին EEPROM- ում տվյալների կարդալ և գրել, օգտագործելով Arduino- ն
Արտաքին EEPROM- ում տվյալների կարդալ և գրել, օգտագործելով Arduino- ն

EEPROM- ը նշանակում է Electrically Erasable Programmable Read-Only Memory:

EEPROM- ը շատ կարևոր և օգտակար է, քանի որ այն հիշողության անկայուն ձև է: Սա նշանակում է, որ նույնիսկ երբ խորհուրդը անջատված է, EEPROM չիպը դեռ պահպանում է այն ծրագիրը, որը գրված է դրան: Այսպիսով, երբ անջատում եք տախտակը, այնուհետև նորից միացնում այն, ծրագիրը, որը գրված է EEPROM- ին, կարող է գործարկվել: Այսպիսով, հիմնականում EEPROM- ը պահում և գործարկում է ծրագիր, անկախ ամեն ինչից: Սա նշանակում է, որ դուք կարող եք անջատել մի սարք, այն անջատել 3 օր և վերադառնալ և միացնել այն, և այն դեռ կարող է գործարկել այն ծրագիրը, որը ծրագրված էր դրանում: Այսպես են աշխատում սպառողական էլեկտրոնային սարքերի մեծ մասը:

Այս նախագիծը հովանավորվում է LCSC- ի կողմից: Ես օգտագործել եմ LCSC.com- ի էլեկտրոնային բաղադրիչները: LCSC- ն ունի մեծ պարտավորություն `առաջարկելու իսկական, բարձրորակ էլեկտրոնային բաղադրիչների լայն ընտրանի` լավագույն գնով `համաշխարհային առաքման ցանցով ավելի քան 200 երկրներ: Գրանցվեք այսօր և ստացեք 8 դոլար զեղչ ձեր առաջին պատվերի դեպքում:

EEPROM- ը նաև շատ արդյունավետ է այն առումով, որ ավանդական EEPROM- ի առանձին բայթերը կարող են ինքնուրույն կարդալ, ջնջվել և վերաշարադրվել: Շատ այլ տեսակի անկայուն հիշողության մեջ դա հնարավոր չէ անել: Սերիական EEPROM սարքերը, ինչպիսիք են Microchip 24-series EEPROM- ը, թույլ են տալիս ավելի շատ հիշողություն ավելացնել ցանկացած սարքի, որը կարող է խոսել I²C- ով:

Պարագաներ

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 ՄՀց բյուրեղ
  4. Breadboard
  5. Ռեզիստոր 4.7k Օմ x 2
  6. Կոնդենսատոր 22 pF x 2

Քայլ 1: EEPROM հիմունքներ

EEPROM հիմունքներ
EEPROM հիմունքներ

Microchip 24LC2512 չիպը կարելի է ձեռք բերել 8 փին DIP փաթեթով: 24LC512- ի կապումներն բավականին ուղիղ են և բաղկացած են հզորությունից (8), GND (4), գրելու պաշտպանությունից (7), SCL/SDA (6, 5) և հասցեի երեք կապից (1, 2, 3):

ROM- ի համառոտ պատմություն

Վաղ «Պահված -ծրագիր» տիպի համակարգիչները, ինչպիսիք են գրասեղանի հաշվիչները և ստեղնաշարի թարգմանիչները, սկսեցին օգտագործել ROM- ը Diode Matrix ROM- ի տեսքով: Սա հիշողություն էր `կազմված առանձին կիսահաղորդչային դիոդներից, որոնք տեղադրված էին հատուկ կազմակերպված PCB- ի վրա: Սա իր տեղը զիջեց Mask ROM- ին `ինտեգրալ սխեմաների գալուստով: Mask ROM- ը շատ նման էր Diode Matrix ROM- ին, միայն այն իրականացվեց շատ ավելի փոքր մասշտաբով: Այնուամենայնիվ, դա նշանակում էր, որ դուք չեք կարող պարզապես զոդման երկաթով մի երկու դիոդ տեղափոխել և վերագրագրել այն: Mask ROM- ը պետք է ծրագրավորվեր արտադրողի կողմից և այնուհետև փոփոխելի չէր:

Unfortunatelyավոք, Mask ROM- ը թանկ էր և երկար տևեց, քանի որ յուրաքանչյուր նոր ծրագրի համար անհրաժեշտ էր բոլորովին նոր սարք, որը պետք է արտադրվեր ձուլարանի կողմից: 1956 թ., Սակայն, այս խնդիրը լուծվեց PROM- ի (mրագրավորվող ROM) գյուտով, որը թույլ տվեց ծրագրավորողներին ինքնուրույն ծրագրավորել չիպերը: Դա նշանակում էր, որ արտադրողները կարող էին արտադրել միլիոնավոր նույն չծրագրավորված սարք, որն այն դարձնում էր ավելի էժան և գործնական: PROM- ը, այնուամենայնիվ, կարող էր գրվել միայն մեկ անգամ ՝ օգտագործելով բարձրավոլտ ծրագրավորման սարք: PROM սարքի ծրագրավորումից հետո սարքը չծրագրավորված վիճակին վերադարձնելու հնարավորություն չկար:

Սա փոխվեց 1971 թվականին ՝ EPROM- ի (Erasable Programmable ROM) գյուտով, որը, բացի հապավմանը մեկ այլ տառ ավելացնելուց, իր հետ բերեց սարքը ջնջելու և ուլտրամանուշակագույն լույսի ուժեղ աղբյուրի միջոցով այն «դատարկ» վիճակի վերադարձնելու ունակություն: Rightիշտ է, դուք պետք է պայծառ լույս շողացնեիք IC- ի վրա `այն նորից ծրագրավորելու համար, որքանո՞վ է դա հիանալի: Դե, պարզվում է, որ դա բավականին թույն է, եթե դուք ծրագրակազմ չեք, որն աշխատում է որոնվածի վրա: Սա վերջապես իրականություն դարձավ 1983 -ին EEPROM- ի (Էլեկտրիկորեն ջնջվող ծրագրավորվող ROM) մշակմամբ, և դրանով մենք հասանք ներկայիս անհանգիստ հապավմանը:

Քայլ 2: EEPROM- ի առանձնահատկությունները

EEPROM- ի ՝ որպես տվյալների պահպանման մեթոդ, կան երկու հիմնական թերություններ: Դիմումների մեծ մասում առավելությունները գերակշռում են բացասական կողմերը, բայց դուք պետք է տեղյակ լինեք դրանց մասին, նախքան EEPROM- ը ձեր հաջորդ նախագծում ներառելը:

Առաջին հերթին, տեխնոլոգիան, որը ստիպում է EEPROM- ին աշխատել, նաև սահմանափակում է այն կրկնվող գրառումների քանակը: Սա կապված է այն բանի հետ, որ էլեկտրոնները հայտնվում են ROM- ը կազմող տրանզիստորներում և կուտակվում այնքան ժամանակ, քանի դեռ «1» և «0» լիցքերի տարբերությունը անճանաչելի է: Բայց մի անհանգստացեք, EEPROM- ների մեծամասնությունն ունի վերագրանցման առավելագույն թիվը 1 միլիոն կամ ավելի: Քանի դեռ դուք անընդհատ չեք գրում EEPROM- ին, դժվար թե հասնեք այս առավելագույնին: Երկրորդ, EEPROM- ը չի ջնջվի, եթե հոսանքը հեռացնեք դրանից, բայց այն չի պահի ձեր տվյալները անվերջ: Էլեկտրոնները կարող են շեղվել տրանզիստորներից և մեկուսիչի միջով ՝ ժամանակի ընթացքում արդյունավետ ջնջելով EEPROM- ը: Ասել է թե `դա սովորաբար տեղի է ունենում տարիների ընթացքում (չնայած այն կարող է արագանալ ջերմության միջոցով): Արտադրողների մեծ մասն ասում է, որ ձեր տվյալները անվտանգ են EEPROM- ում 10 տարի կամ ավելի սենյակային ջերմաստիճանում: Եվ ևս մեկ բան, որ պետք է հաշվի առնել ձեր նախագծի համար EEPROM սարք ընտրելիս: EEPROM հզորությունը չափվում է բիթերով և ոչ բայթերով: 512K EEPROM- ը կպահի 512 Կբիթ տվյալներ, այլ կերպ ասած ՝ ընդամենը 64 ԿԲ:

Քայլ 3: Arduino սարքաշարի միացում

Arduino ապարատային միացում
Arduino ապարատային միացում
Arduino ապարատային միացում
Arduino ապարատային միացում

Լավ, հիմա, երբ մենք գիտենք, թե ինչ է EEPROM- ը, եկեք միացնենք և տեսնենք, թե ինչ կարող է դա անել: Մեր սարքը խոսելու համար մենք պետք է միացնենք հոսանքը, ինչպես նաև I²C սերիական գծերը: Այս սարքը, մասնավորապես, աշխատում է 5VDC- ով, այնպես որ մենք այն կկապենք մեր Arduino UNO- ի 5V ելքի հետ: Բացի այդ, I²C գծերին կպահանջվեն ձգվող ռեզիստորներ `հաղորդակցության ճիշտ կայացման համար: Այս դիմադրիչների արժեքը կախված է այն գծերի տարողությունից և հաճախականությունից, որոնցով ցանկանում եք հաղորդակցվել, սակայն ոչ կրիտիկական ծրագրերի համար լավ սկզբունքն այն պարզապես պահվում է kΩ տիրույթում: Այս օրինակում մենք կօգտագործենք 4.7kΩ քաշվող դիմադրիչներ:

Այս սարքի վրա կան երեք կապում ՝ I²C հասցեն ընտրելու համար: Այս կերպ դուք կարող եք մեկից ավելի EEPROM ունենալ ավտոբուսում և յուրաքանչյուրին հասցեագրել այլ կերպ: Դուք կարող եք դրանք բոլորը հիմնավորել, բայց մենք դրանք կանցկացնենք, որպեսզի ավելի ուշ հզորության սարքի մեջ գցենք ձեռնարկի հետագա հատվածում:

Մենք կօգտագործենք տախտակ ՝ ամեն ինչ իրար միացնելու համար: Ստորև բերված դիագրամը ցույց է տալիս IUC EEPROM սարքերի մեծ մասի ճիշտ միացումը, ներառյալ մեր կողմից վաճառվող Microchip 24 շարքի EEPROM սարքերը:

Քայլ 4: Կարդալ և գրել

EPամանակի մեծ մասը, երբ դուք օգտագործում եք EEPROM- ը միկրոկառավարիչի հետ համատեղ, իրականում կարիք չի լինի միանգամից տեսնել հիշողության ամբողջ բովանդակությունը: Դուք պարզապես կարդալու և գրելու եք այստեղ և այնտեղ, ըստ անհրաժեշտության: Այս օրինակում, այնուամենայնիվ, մենք պատրաստվում ենք մի ամբողջ ֆայլ գրել EEPROM- ին, այնուհետև նորից կարդալ այն, որպեսզի կարողանանք դիտել այն մեր համակարգչում: Սա պետք է մեզ հարմարեցնի EEPROM- ի օգտագործման գաղափարով, ինչպես նաև մեզ զգա, թե որքան տվյալներ կարող են իսկապես տեղավորվել փոքր սարքի վրա:

Ինչ -որ բան գրեք

Մեր էսքիզների օրինակը պարզապես կվերցնի սերիական նավահանգստից եկող ցանկացած բայթ և գրում այն EEPROM- ին ՝ հետևելով, թե քանի բայթ ենք գրել հիշողության մեջ:

EEPROM- ին հիշողության բայթ գրելը սովորաբար տեղի է ունենում երեք քայլով.

  1. Ուղարկեք հիշողության հասցեի ամենակարևոր բայթը, որին ցանկանում եք գրել:
  2. Ուղարկեք հիշողության հասցեի ամենաքիչ նշանակալի բայթ, որին ցանկանում եք գրել:
  3. Ուղարկեք տվյալների բայթը, որը ցանկանում եք պահել այս վայրում:

Հավանաբար այնտեղ կան մի քանի առանցքային բառեր, որոնք բացատրում են.

Հիշողության հասցեներ

Եթե պատկերացնում եք 512 Կբիթ EEPROM- ի բոլոր բայթերը, որոնք կանգնած են 0 -ից 64000 տողում, քանի որ բայթում կա 8 բիթ, և, հետևաբար, կարող եք տեղավորել 64000 բայթ 512 Կբիթ EEPROM- ի վրա, ապա հիշողության հասցեն է տող, որտեղ դուք կգտնեք որոշակի բայթ: Մենք պետք է ուղարկենք այդ հասցեն EEPROM- ին, որպեսզի այն իմանա, թե որտեղ պետք է տեղադրենք բայտը, որը մենք ուղարկում ենք:

Առավել նշանակալի և ամենաքիչ նշանակալի բայթերը

Քանի որ 256 Կբիթ EEPROM- ում կա 32000 հնարավոր վայր, և քանի որ 255 -ն ամենամեծ թիվն է, որը կարող եք կոդավորել մեկ բայթում, մենք պետք է այս հասցեն ուղարկենք երկու բայթ: Նախ, մենք ուղարկում ենք Ամենակարևոր բայթը (MSB) `այս դեպքում առաջին 8 բիթերը: Այնուհետև մենք ուղարկում ենք Նվազագույն նշանակալի բայթ (LSB) ՝ երկրորդ 8 բիթը: Ինչո՞ւ: Քանի որ սարքն այսպես է ակնկալում դրանք ստանալ, վերջ:

Էջի գրառում

Միանգամից մեկ բայթ գրելը լավ է, բայց EEPROM սարքերի մեծ մասն ունի «էջի գրելու բուֆեր» անունով մի բան, որը թույլ է տալիս միաժամանակ գրել մի քանի բայթ այնպես, ինչպես մեկ բայթ: Մենք կօգտվենք դրանից մեր օրինակի ուրվագծում: EEPROM- ն օգտագործում է ներքին հաշվիչ, որն ինքնաբերաբար մեծացնում է հիշողության վայրը ՝ ստացված յուրաքանչյուր հաջորդ տվյալների բայթով: Հիշողության հասցեն ուղարկվելուց հետո մենք կարող ենք դրան հետևել մինչև 64 բայթ տվյալներով: EEPROM- ը ենթադրում է (իրավացիորեն), որ 312 հասցեով, որին հաջորդում է 10 բայթ, բայթը կգրանցվի 0 ՝ 312 հասցեով, բայթ 1 ՝ 313 հասցեով, բայթ 2 ՝ 314 հասցեով և այլն:

Ինչ -որ բան կարդալ

EEPROM- ից կարդալը հիմնականում հետևում է նույն եռաստիճան գործընթացին, ինչ EEPROM- ին գրելը.

  1. Ուղարկեք հիշողության հասցեի ամենակարևոր բայթը, որին ցանկանում եք գրել:
  2. Ուղարկեք հիշողության հասցեի ամենաքիչ նշանակալի բայթ, որին ցանկանում եք գրել:
  3. Հարցրեք տվյալների բայթը այդ վայրում:

Քայլ 5. Սխեմաներ և ծածկագիր

Սխեմաներ և ծածկագիր
Սխեմաներ և ծածկագիր

Կոդ:

#ներառում

#deepine eeprom 0x50 // սահմանում է EEPROM- ի հիմնական հասցեն

void setup () {

Wire.begin (); // ստեղծում է Wire օբյեկտ

Serial.begin (9600);

անստորագիր int հասցե = 0; // EEPROM- ի առաջին հասցեն

Serial.println («Մենք գրում ենք փոստային կոդը 22222, փոստային ինդեքս»); համար (հասցե = 0; հասցե <5; հասցե ++) գրել EEPROM (eeprom, հասցե, '2'); // գրում է 22222 EEPROM- ին

(հասցե = 0; հասցե <5; հասցե ++) {Serial.print (կարդալ EEPROM (eeprom, հասցե), HEX); }}

դատարկ շրջան () {

/*loop () գործառույթում ոչինչ չկա, քանի որ մենք չենք ցանկանում, որ arduino- ն անընդհատ նույն բանը շարադրի EEPROM- ին: Մենք պարզապես ուզում ենք միանգամյա գրել, այնպես որ loop () գործառույթը խուսափում է EEPROM- երով:*/}

// սահմանում է writeEEPROM գործառույթը

անվավեր գրել EEPROM (int deviceaddress, unsigned int eeaddress, byte data) {Wire.beginTransmission (deviceaddress); Wire.write ((int) (eeaddress >> 8)); // գրում է MSB Wire.write ((int) (eeaddress & 0xFF)); // գրում է LSB Wire.write (տվյալները); Wire.endTransmission (); }

// սահմանում է readEEPROM գործառույթը

բայթ կարդալ EEPROM (int deviceaddress, unsigned int eeaddress) {byte rdata = 0xFF; Wire.beginTransmission (սարքի հասցե); Wire.write ((int) (eeaddress >> 8)); // գրում է MSB Wire.write ((int) (eeaddress & 0xFF)); // գրում է LSB Wire.endTransmission (); Մետաղալար. Խնդրում ենք (սարքի հասցե, 1); if (Wire.available ()) rdata = Wire.read (); վերադարձնել տվյալները; }

Խորհուրդ ենք տալիս: