Mundarija:

Arduino yordamida tashqi EEPROMga ma'lumotlarni o'qish va yozish: 5 qadam
Arduino yordamida tashqi EEPROMga ma'lumotlarni o'qish va yozish: 5 qadam

Video: Arduino yordamida tashqi EEPROMga ma'lumotlarni o'qish va yozish: 5 qadam

Video: Arduino yordamida tashqi EEPROMga ma'lumotlarni o'qish va yozish: 5 qadam
Video: Arduino - I2C EEPROM dan OLED 128x64 displeygacha bo'lgan bitmap tasvirlari 2024, Iyul
Anonim
Arduino yordamida tashqi EEPROMga ma'lumotlarni o'qish va yozish
Arduino yordamida tashqi EEPROMga ma'lumotlarni o'qish va yozish

EEPROM-bu elektr bilan o'chiriladigan dasturlashtiriladigan faqat o'qish uchun xotira.

EEPROM juda muhim va foydalidir, chunki bu xotiraning doimiy bo'lmagan shakli. Bu shuni anglatadiki, hatto karta o'chirilgan bo'lsa ham, EEPROM chipi unga yozilgan dasturni saqlab qoladi. Shunday qilib, siz taxtani o'chirib, qayta yoqsangiz, EEPROMga yozilgan dasturni ishga tushirish mumkin. Shunday qilib, EEPROM nima bo'lishidan qat'iy nazar dasturni saqlaydi va boshqaradi. Bu shuni anglatadiki, siz qurilmani o'chirib qo'yishingiz, uni 3 kun davomida o'chirib qo'yishingiz va qaytishingiz va yoqishingiz mumkin va u hali ham dasturlashtirilgan dasturni ishga tushirishi mumkin. Aksariyat iste'molchi elektron qurilmalari shunday ishlaydi.

Ushbu loyiha LCSC homiyligida. Men LCSC.com elektron komponentlaridan foydalanganman. LCSC 200 dan ortiq mamlakatlarga global yuk tashish tarmog'i bilan eng yaxshi narxda haqiqiy, yuqori sifatli elektron komponentlarning keng tanlovini taklif qilish bo'yicha qat'iy majburiyatga ega. Bugun ro'yxatdan o'ting va birinchi buyurtmangizda $ 8 chegirmaga ega bo'ling.

EEPROM ham juda samarali, chunki an'anaviy EEPROMdagi alohida baytlarni mustaqil o'qish, o'chirish va qayta yozish mumkin. Qolgan xotira turlarining ko'pchiligida buni amalga oshirish mumkin emas. Microchip 24 seriyali EEPROM kabi ketma-ket EEPROM qurilmalari I²C da gapira oladigan har qanday qurilmaga ko'proq xotira qo'shish imkonini beradi.

Ta'minotlar

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 MGts kristalli
  4. Non paneli
  5. Rezistor 4.7k Ohm x 2
  6. Kondensator 22 pF x 2

1 -qadam: EEPROM asoslari

EEPROM asoslari
EEPROM asoslari

Microchip 24LC2512 chipini 8 pinli DIP paketida sotib olish mumkin. 24LC512-dagi pinlar juda to'g'ri va quvvat (8), GND (4), yozishni himoya qilish (7), SCL/SDA (6, 5) va uchta manzil pinidan (1, 2, 3) iborat.

ROMning qisqacha tarixi

Dastlabki "saqlanadigan dastur" tipidagi kompyuterlar, masalan, stol kalkulyatorlari va klaviatura tarjimonlari - ROMdan Diod Matrix ROM ko'rinishida foydalana boshladilar. Bu maxsus tashkil etilgan PCBga joylashtirilgan diskret yarimo'tkazgichli diodlardan tashkil topgan xotira edi. Bu Integral davrlarning paydo bo'lishi bilan Mask ROMga yo'l ochdi. Mask ROM Diode Matrix ROMga juda o'xshardi, lekin u ancha kichikroq hajmda amalga oshirildi. Bu shuni anglatadiki, siz bir nechta diodlarni lehimlantiruvchi temir bilan aylantira olmaysiz va uni qayta dasturlay olmaysiz. Mask ROM ishlab chiqaruvchi tomonidan dasturlashtirilgan bo'lishi kerak edi va keyinchalik o'zgartirilmadi.

Afsuski, Mask ROM qimmatga tushdi va uni ishlab chiqarish uzoq vaqt talab qildi, chunki har bir yangi dastur quyish zavodi tomonidan ishlab chiqariladigan yangi qurilmani talab qiladi. Ammo 1956 yilda bu muammo PROM (Programmable ROM) ixtirosi bilan hal qilindi, bu esa ishlab chiqaruvchilarga chiplarni o'zlari dasturlash imkonini berdi. Bu shuni anglatadiki, ishlab chiqaruvchilar millionlab dasturlashtirilmagan qurilmalarni ishlab chiqarishi mumkin, bu esa uni arzonroq va amaliyroq qiladi. PROM-ni yuqori voltli dasturlash moslamasi yordamida faqat bir marta yozish mumkin edi. PROM qurilmasi dasturlashtirilgandan so'ng, qurilmani dasturlanmagan holatiga qaytarishning iloji yo'q edi.

Bu 1971 yilda EPROM (Erasable Programmable ROM) ixtirosi bilan o'zgardi, bu qisqartirishga boshqa harf qo'shishdan tashqari, u bilan birga qurilmani o'chirish va kuchli UV nurli manbadan foydalanib, uni "bo'sh" holatga qaytarish qobiliyatini olib keldi. To'g'ri, uni qayta dasturlash uchun ICga yorqin nur sochishingiz kerak edi, bu qanchalik zo'r? Ma'lum bo'lishicha, agar siz dasturiy ta'minot ustida ishlamayotgan bo'lsangiz, qurilmani elektr signallari yordamida qayta dasturlashni xohlaysiz. Bu, nihoyat, 1983 yilda EEPROM (Elektr bilan o'chiriladigan dasturlashtiriladigan ROM) ning rivojlanishi bilan haqiqatga aylandi va shu bilan biz hozirgi kundagi tushunarsiz qisqartmalarga etib keldik.

2 -qadam: EEPROMning o'ziga xos xususiyatlari

Ma'lumotni saqlash usuli sifatida EEPROM -ning ikkita asosiy kamchiliklari bor. Ko'pgina ilovalarda ijobiy tomonlari kamchiliklardan ustun turadi, lekin siz EEPROMni keyingi dizayningizga kiritmasdan oldin ular haqida bilishingiz kerak.

Birinchidan, EEPROMning ishlashini ta'minlaydigan texnologiya, uni qayta yozish sonini ham cheklaydi. Bu elektronlarning ROMni tashkil etuvchi tranzistorlarga tushib qolishi va "1" va "0" o'rtasidagi zaryad farqi aniqlanmaguncha to'planishi bilan bog'liq. Lekin xavotir olmang, aksariyat EEPROM-larda maksimal qayta yozish soni 1 million yoki undan ko'p. Agar siz EEPROMga doimiy ravishda yozmasangiz, bu maksimal darajaga erishishingiz dargumon. Ikkinchidan, agar siz quvvatni o'chirsangiz, EEPROM o'chirilmaydi, lekin u ma'lumotlaringizga abadiy saqlanmaydi. Elektronlar vaqt o'tishi bilan EEPROMni samarali ravishda yo'q qilib, tranzistorlardan va izolyatordan chiqib ketishi mumkin. Aytgancha, bu odatda yillar davomida sodir bo'ladi (garchi uni issiqlik ta'sirida tezlashtirish mumkin bo'lsa ham). Ko'pgina ishlab chiqaruvchilar sizning ma'lumotlaringiz EEPROM -da xona haroratida 10 yil yoki undan ko'proq vaqt davomida xavfsiz ekanligini aytishadi. Loyihangiz uchun EEPROM qurilmasini tanlashda yana bir narsani yodda tutishingiz kerak. EEPROM hajmi bayt bilan emas, balki bit bilan o'lchanadi. 512K EEPROM 512Kbit ma'lumotni, boshqacha aytganda, atigi 64KBni o'z ichiga oladi.

3 -qadam: Arduino uskunalarini ulash

Arduino apparat ulanishi
Arduino apparat ulanishi
Arduino apparat ulanishi
Arduino apparat ulanishi

Xo'sh, endi biz EEPROM nima ekanligini bilib olamiz, keling, uni bog'laylik va u nima qila olishini ko'rib chiqaylik! Qurilmamiz bilan gaplashish uchun biz quvvatni hamda I²C seriyali liniyalarini ulashimiz kerak bo'ladi. Bu qurilma, xususan, 5VDC da ishlaydi, shuning uchun biz uni Arduino UNO ning 5V kuchlanishiga ulaymiz. Bundan tashqari, I²C liniyalarida aloqa to'g'ri bo'lishi uchun tortishish rezistorlari kerak bo'ladi. Ushbu rezistorlarning qiymati siz aytmoqchi bo'lgan chiziqlar va chastotalarning sig'imiga bog'liq, lekin kritik bo'lmagan ilovalar uchun yaxshi qoida uni kΩ diapazonida saqlaydi. Bu misolda biz 4,7 kΩ lik tortuvchi rezistorlardan foydalanamiz.

I²C manzilini tanlash uchun ushbu qurilmada uchta pin bor, shu orqali siz avtobusda bir nechta EEPROMga ega bo'lishingiz va ularga har xil yo'l bilan murojaat qilishingiz mumkin. Siz ularning hammasini erga ulashingiz mumkin edi, lekin biz ularni sim bilan bog'laymiz, shunda biz keyinchalik qo'llanmada yuqori quvvatli qurilmani tashlay olamiz.

Biz hamma narsani bir -biriga ulash uchun taxtadan foydalanamiz. Quyidagi diagrammada I²C EEPROM qurilmalarining ko'pchiligi uchun to'g'ri ulanish ko'rsatilgan, shu jumladan biz sotadigan Microchip 24 seriyali EEPROM.

4 -qadam: O'qish va yozish

Ko'pincha siz EEPROM -ni mikrokontrolder bilan birgalikda ishlatayotganingizda, xotira tarkibini birdaniga ko'rishingiz shart bo'lmaydi. Agar kerak bo'lsa, siz bu erda va u erda baytlarni o'qiysiz va yozasiz. Biroq, bu misolda biz butun faylni EEPROM -ga yozamiz va keyin uni kompyuterda ko'rishimiz uchun o'qib chiqamiz. Bu bizni EEPROMdan foydalanish g'oyasi bilan quvontirishi, shuningdek, kichik hajmli qurilmaga qancha ma'lumot to'g'ri kelishi mumkinligini his qilishimiz kerak.

Nimadir yoz

Bizning namunaviy eskizimiz ketma -ket port orqali kelgan har qanday baytni oladi va uni EEPROMga yozadi, biz qancha baytni xotiraga yozganimizni kuzatib boradi.

EEPROMga xotira baytini yozish odatda uch bosqichda amalga oshiriladi:

  1. Siz yozmoqchi bo'lgan xotira manzilining eng muhim baytini yuboring.
  2. Siz yozmoqchi bo'lgan xotira manzilining eng kam baytini yuboring.
  3. Bu joyda saqlamoqchi bo'lgan ma'lumot baytini yuboring.

Ehtimol, u erda bir nechta kalit so'zlar bor, ular tushuntirib berolmaydi:

Xotira manzillari

Agar siz 512 Kbit EEPROM -dagi barcha baytlarni 0 dan 64000 gacha qatorda turganini tasavvur qilsangiz - baytda 8 bit bor va shuning uchun siz 512 Kbit EEPROMda 64000 baytni sig'dira olasiz - xotira manzili bu joy. ma'lum bir baytni topadigan satr. Biz bu manzilni EEPROMga yuborishimiz kerak, shunda u biz yuborayotgan baytni qaerga qo'yish kerakligini biladi.

Eng muhim va eng kam ahamiyatli baytlar

256 Kbit EEPROMda 32000 ta mumkin bo'lgan joylar bo'lgani uchun - va 255 - bitta baytda kodlashingiz mumkin bo'lgan eng katta raqam - biz bu manzilni ikki baytda yuborishimiz kerak. Birinchidan, biz eng muhim baytni (MSB) yuboramiz - bu holda birinchi 8 bit. Keyin biz eng kam baytni (LSB) yuboramiz - ikkinchisi 8 bit. Nima uchun? Chunki qurilma ularni shunday kutadi, hammasi shu.

Sahifa yozish

Bir vaqtning o'zida bitta bayt yozish juda yaxshi, lekin ko'pchilik EEPROM qurilmalarida "sahifa yozish buferi" mavjud bo'lib, u sizga bir baytda bo'lgani kabi bir vaqtning o'zida bir nechta bayt yozishga imkon beradi. Biz buni misol eskizimizda ishlatamiz. EEPROM ichki hisoblagichdan foydalanadi, u avtomatik ravishda xotira joylashuvini har bir keyingi ma'lumotlar bayti bilan oshiradi. Xotira manzili yuborilgandan so'ng, biz uni 64 baytgacha ma'lumotlarni kuzatib borishimiz mumkin. EEPROM 312 va undan keyin 10 baytlik manzil 312 manzilda 0 baytni, 313 manzilda 1 baytni, 314 manzilda 2 baytni va boshqalarni yozadi deb taxmin qiladi (to'g'ri).

Biror narsani o'qing

EEPROM-dan o'qish asosan EEPROM-ga yozish bilan bir xil bo'lgan uch bosqichli jarayonni o'z ichiga oladi:

  1. Siz yozmoqchi bo'lgan xotira manzilining eng muhim baytini yuboring.
  2. Siz yozmoqchi bo'lgan xotira manzilining eng kam baytini yuboring.
  3. Ma'lumot baytini o'sha joyda so'rang.

5 -qadam: sxemalar va kodlar

Sxemalar va kodlar
Sxemalar va kodlar

Kod:

#qo'shing

#define eeprom 0x50 // EEPROM ning asosiy manzilini belgilaydi

bo'sh o'rnatish () {

Wire.begin (); // Wire ob'ektini yaratadi

Serial.begin (9600);

imzosiz int manzili = 0; // EEPROMning birinchi manzili

Serial.println ("Biz 22222 pochta indeksini, pochta indeksini yozamiz"); for (manzil = 0; manzil <5; manzil ++) writeEEPROM (eeprom, manzil, '2'); // EEPROMga 22222 yozadi

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

void loop () {

/*loop () funktsiyasida hech narsa yo'q, chunki biz arduino bir xil narsani EEPROMga qayta -qayta yozishini xohlamaymiz. Biz faqat bir martalik yozishni xohlaymiz, shuning uchun loop () funktsiyasidan EEPROMlar yordamida chetlab o'tiladi.*/}

// writeEEPROM funktsiyasini belgilaydi

void writeEEPROM (int deviceaddress, unsigned int eeaddress, bayt ma'lumotlari) {Wire.beginTransmission (deviceaddress); Wire.write ((int) (eeaddress >> 8)); // MSB Wire.write yozadi ((int) (eeaddress & 0xFF)); // yozadi LSB Wire.write (ma'lumotlar); Wire.endTransmission (); }

// readEEPROM funktsiyasini belgilaydi

bayt readEEPROM (int deviceaddress, unsigned int eeaddress) {bayt rdata = 0xFF; Wire.beginTransmission (qurilma manzili); Wire.write ((int) (eeaddress >> 8)); // yozadi MSB Wire.write ((int) (eeaddress & 0xFF)); // yozadi LSB Wire.endTransmission (); Wire.requestFrom (qurilma manzili, 1); if (Wire.available ()) rdata = Wire.read (); ma'lumotlarni qaytarish; }

Tavsiya: