Mündəricat:

Arduino istifadə edərək Xarici EEPROM -a məlumatların oxunması və yazılması: 5 addım
Arduino istifadə edərək Xarici EEPROM -a məlumatların oxunması və yazılması: 5 addım

Video: Arduino istifadə edərək Xarici EEPROM -a məlumatların oxunması və yazılması: 5 addım

Video: Arduino istifadə edərək Xarici EEPROM -a məlumatların oxunması və yazılması: 5 addım
Video: EEPROM с использованием последовательного монитора 2024, Iyul
Anonim
Arduino istifadə edərək Xarici EEPROM -a məlumatların oxunması və yazılması
Arduino istifadə edərək Xarici EEPROM -a məlumatların oxunması və yazılması

EEPROM, Elektriklə Silinə bilən Proqramlaşdırıla bilən Yalnız Oxunan Yaddaş deməkdir.

EEPROM çox vacib və faydalıdır, çünki yaddaşın dəyişməz bir formasıdır. Bu o deməkdir ki, lövhə söndürüldükdə belə, EEPROM çipi hələ də ona yazılmış proqramı saxlayır. Beləliklə, lövhəni söndürdükdən sonra yenidən işə saldığınız zaman, EEPROM -a yazılmış proqram işləyə bilər. EEPROM, nə olursa olsun, bir proqramı saxlayır və idarə edir. Bu o deməkdir ki, bir cihazı söndürə, 3 gün saxlaya və geri qayıdıb yandıra bilərsiniz və hələ də proqramlaşdırılmış proqramı işlədə bilər. İstehlakçı elektron cihazlarının əksəriyyəti belə işləyir.

Bu layihə LCSC tərəfindən maliyyələşdirilir. LCSC.com elektron komponentlərindən istifadə edirəm. LCSC, 200-dən çox ölkəyə qlobal göndərmə şəbəkəsi ilə ən yaxşı qiymətə orijinal, yüksək keyfiyyətli elektron komponentlərin geniş seçimini təqdim etmək üçün güclü bir öhdəliyə malikdir. Bu gün qeydiyyatdan keçin və ilk sifarişinizdə 8 dollar endirim əldə edin.

EEPROM, ənənəvi EEPROM -dəki fərdi baytların müstəqil olaraq oxunması, silinməsi və yenidən yazılması baxımından da çox səmərəlidir. Qalan olmayan yaddaş növlərinin əksəriyyətində bunu etmək mümkün deyil. Microchip 24 seriyalı EEPROM kimi seriyalı EEPROM cihazları, I²C danışa bilən hər hansı bir cihaza daha çox yaddaş əlavə etməyə imkan verir.

Təchizat

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 MHz Kristal
  4. Çörək lövhəsi
  5. Rezistor 4.7k Ohm x 2
  6. Kondansatör 22 pF x 2

Addım 1: EEPROM əsasları

EEPROM əsasları
EEPROM əsasları

Microchip 24LC2512 çipi 8 pinli DIP paketində əldə edilə bilər. 24LC512 üzərindəki sancaqlar olduqca düzdür və güc (8), GND (4), yazma qorunması (7), SCL/SDA (6, 5) və üç ünvan pinindən (1, 2, 3) ibarətdir.

ROM -un qısa tarixi

İş masası kalkulyatorları və klaviatura tərcüməçiləri kimi erkən "Saxlanılan Proqram" tipli kompüterlər DOM Matrix ROM şəklində ROMdan istifadə etməyə başladılar. Bu, xüsusi olaraq təşkil edilmiş bir PCB üzərində yerləşdirilmiş diskret yarımkeçirici diodlardan ibarət bir yaddaş idi. Bu, inteqral sxemlərin yaranması ilə Mask ROM -un yerini verdi. Mask ROM, Diode Matrix ROM -a çox bənzəyirdi, yalnız daha kiçik miqyasda tətbiq edildi. Ancaq bu, bir neçə diodu bir lehimləmə dəmiri ilə hərəkət etdirib yenidən proqramlaşdıra bilməyəcəyiniz mənasına gəlirdi. Mask ROM, istehsalçı tərəfindən proqramlaşdırılmalı idi və bundan sonra dəyişdirilmədi.

Təəssüf ki, Mask ROMu bahalı idi və istehsal üçün uzun vaxt lazım idi, çünki hər yeni proqramda tökmə zavodu tərəfindən istehsal olunmaq üçün yeni bir cihaz tələb olunurdu. Ancaq 1956 -cı ildə bu problem, inkişaf etdiricilərə fişləri özləri proqramlaşdırmağa imkan verən PROM (Programlanabilir ROM) ixtirası ilə həll edildi. Bu, istehsalçıların milyonlarla eyni proqramlaşdırılmamış cihazı istehsal etməsi demək idi ki, bu da onu daha ucuz və praktik hala gətirdi. PROM, ancaq yüksək gərginlikli proqramlaşdırma cihazı istifadə edərək yalnız bir dəfə yazıla bilər. PROM cihazı proqramlaşdırıldıqdan sonra cihazı proqramlaşdırılmamış vəziyyətə qaytarmaq üçün heç bir yol yox idi.

Bu, 1971 -ci ildə qısaltmaya başqa bir hərf əlavə etməklə birlikdə cihazı silmək və güclü bir UV işığı mənbəyindən istifadə edərək "boş" vəziyyətə qaytarmaq qabiliyyətini gətirən EPROM (Silinə bilən Programlanabilir ROM) ixtirası ilə dəyişdi. Düzdü, yenidən proqramlaşdırmaq üçün IC -yə parlaq bir işıq yandırmalı idiniz, bu nə qədər sərindir? Firmware üzərində işləyən bir inkişaf etdirici olmadığınız təqdirdə, həqiqətən də elektrik siqnallarından istifadə edərək cihazı yenidən proqramlaşdırmaq istədiyiniz olduqca gözəl görünür. Bu, nəhayət 1983 -cü ildə EEPROM (Elektriklə Silinə bilən Proqramlaşdırıla bilən ROM) inkişafı ilə gerçəkləşdi və bununla da indiki günə uyğun olmayan qısaltmalara gəldik.

Addım 2: EEPROM -un qəribəlikləri

Məlumat saxlama üsulu olaraq EEPROM -un iki əsas çatışmazlığı var. Əksər tətbiqlərdə üstünlüklər mənfi cəhətlərdən üstündür, lakin EEPROM -u növbəti dizaynınıza daxil etməzdən əvvəl onlardan xəbərdar olmalısınız.

Hər şeydən əvvəl, EEPROM-un işləməsini təmin edən texnologiya, yenidən yazılmaq sayını da məhdudlaşdırır. Bu, elektronların ROMu təşkil edən tranzistorlarda ilişib qalması və "1" ilə "0" arasındakı yük fərqi tanınmayana qədər yığılması ilə əlaqədardır. Ancaq narahat olmayın, əksər EEPROMların maksimum 1 milyon və ya daha çox təkrar yazma sayı var. EEPROM -a davamlı yazmadığınız müddətcə bu maksimuma çatacağınız ehtimalı yoxdur. İkincisi, EEPROM ondan güc çıxarsanız silinməyəcək, ancaq məlumatlarınızı sonsuza qədər saxlamayacaq. Elektronlar zaman keçdikcə EEPROM -u effektiv şəkildə silərək tranzistorlardan və izolyatordan çıxa bilərlər. Dedi ki, bu ümumiyyətlə illər ərzində baş verir (baxmayaraq ki, istiliklə sürətlənə bilər). Əksər istehsalçılar, məlumatlarınızın EEPROM -da otaq temperaturunda 10 il və ya daha çox müddətdə təhlükəsiz olduğunu söyləyirlər. Layihəniz üçün bir EEPROM cihazı seçərkən nəzərə almalı olduğunuz başqa bir şey var. EEPROM tutumu baytlarla deyil, bitlərlə ölçülür. 512K EEPROM, 512Kbit məlumatı, başqa sözlə, yalnız 64KB tutacaq.

Addım 3: Arduino Hardware Hookup

Arduino Avadanlıq Bağlantısı
Arduino Avadanlıq Bağlantısı
Arduino Avadanlıq Bağlantısı
Arduino Avadanlıq Bağlantısı

Tamam, indi EEPROM -un nə olduğunu bildiyimiz üçün gəlin birini bağlayaq və görək nə edə bilər! Cihazımızın danışması üçün I²C seriyalı xətləri olduğu kimi gücə də bağlamalıyıq. Bu cihaz, xüsusən də 5VDC -də işləyir, buna görə Arduino UNO -nun 5V çıxışına bağlayacağıq. Ayrıca, I²C xətlərinin ünsiyyətin düzgün qurulması üçün çəkmə rezistorlarına ehtiyacı olacaq. Bu rezistorların dəyəri onu çatdırmaq istədiyiniz xətlərin tutumundan və tezliyindən asılıdır, lakin kritik olmayan tətbiqlər üçün yaxşı bir qayda k just aralığında saxlanılır. Bu nümunədə 4.7kΩ çəkmə rezistorlarından istifadə edəcəyik.

I²C ünvanını seçmək üçün bu cihazda üç pin var, beləliklə avtobusda birdən çox EEPROM ola bilər və hər birinə fərqli şəkildə müraciət edə bilərsiniz. Hamısını torpaqlaya bilərsiniz, ancaq daha sonra tutorialda daha yüksək tutumlu bir cihaza düşə biləcəyimiz üçün tellər çəkəcəyik.

Hər şeyi bir -birinə bağlamaq üçün çörək taxtasından istifadə edəcəyik. Aşağıdakı diaqram, satdığımız Microchip 24 seriyalı EEPROM daxil olmaqla əksər I²C EEPROM cihazları üçün düzgün bağlamanı göstərir.

Addım 4: Oxu və Yaz

Çox vaxt bir mikro nəzarətçi ilə birlikdə bir EEPROM istifadə edərkən, yaddaşın bütün məzmununu bir anda görmək lazım olmayacaq. Lazım olduğu kimi burada və orda bayt oxuyub yazacaqsınız. Ancaq bu nümunədə, bütün bir faylı EEPROM -a yazacağıq və sonra hamısını kompüterimizdə görə bilməyimiz üçün yenidən oxuyacağıq. Bu, bizi EEPROM istifadə etmək fikri ilə rahatlaşdırmalı və eyni zamanda kiçik bir cihaza nə qədər çox məlumatın sığa biləcəyi hissini verməlidir.

Bir şey yazmaq

Nümunə eskizimiz, seriya limanı üzərindən daxil olan və yaddaşa yazdığımız baytı izləyən EEPROM -a yazan hər hansı bir baytı götürəcəkdir.

EEPROM -a bir bayt yaddaş yazmaq ümumiyyətlə üç mərhələdə baş verir:

  1. Yazmaq istədiyiniz yaddaş ünvanının Ən Önəmli Baytını göndərin.
  2. Yazmaq istədiyiniz yaddaş ünvanının ən az əhəmiyyətli baytını göndərin.
  3. Bu yerdə saxlamaq istədiyiniz məlumat baytını göndərin.

Yəqin ki, orada izah edə bilməyən bir neçə açar söz var:

Yaddaş Ünvanları

512 Kbit EEPROM -da bütün baytları 0 -dan 64000 -ə qədər bir xətt üzərində dayandığını xəyal edirsinizsə - çünki baytda 8 bit var və buna görə də 512 Kbit EEPROM -da 64000 bayt yerləşdirə bilərsiniz - onda yaddaş ünvanı müəyyən bir bayt tapacağınız xətt. Göndərdiyimiz baytı hara qoyacağımızı bilməsi üçün həmin ünvanı EEPROM -a göndərməliyik.

Ən Əhəmiyyətli və Ən Az Əhəmiyyətli Baytlar

256 Kbit EEPROM -da 32000 mümkün yer olduğu üçün - və 255 bir baytda kodlaya biləcəyiniz ən böyük rəqəm olduğu üçün bu ünvanı iki baytla göndərməliyik. Birincisi, Ən Əhəmiyyətli Baytı (MSB) göndəririk - bu vəziyyətdə ilk 8 bit. Sonra ən az əhəmiyyətli baytı (LSB) göndəririk - ikinci 8 bit. Niyə? Cihazın bu cür qəbul etməyi gözlədiyi üçün hamısı budur.

Səhifə Yazısı

Bir anda bir bayt yazmaq yaxşıdır, lakin əksər EEPROM cihazlarında "bayt yazma tamponu" adlı bir şey var ki, bu da tək baytda olduğu kimi eyni anda birdən çox bayt yazmağa imkan verir. Nümunə eskizimizdə bundan istifadə edəcəyik. EEPROM, aldığı hər bir məlumat baytı ilə yaddaş yerini avtomatik olaraq artıran daxili sayğacdan istifadə edir. Yaddaş ünvanı göndərildikdən sonra onu 64 bayta qədər məlumatla izləyə bilərik. EEPROM, 312 ünvanını və 10 baytı izləyən bir ünvanın 312 ünvanında 0 baytı, 313 ünvanında 1 baytı, 314 ünvanında 2 baytı və s.

Nəsə oxuyun

EEPROM-dan oxumaq əsasən EEPROM-a yazmaqla eyni üç addımlı prosesi izləyir:

  1. Yazmaq istədiyiniz yaddaş ünvanının Ən Önəmli Baytını göndərin.
  2. Yazmaq istədiyiniz yaddaş ünvanının ən az əhəmiyyətli baytını göndərin.
  3. Həmin yerdəki məlumat baytını istəyin.

Addım 5: Şemalar və Kod

Sxem və kod
Sxem və kod

Kod:

#daxil edin

#define eeprom 0x50 // EEPROM -un əsas ünvanını təyin edir

boş quraşdırma () {

Wire.begin (); // Wire obyekti yaradır

Serial.begin (9600);

imzasız int ünvanı = 0; // EEPROM -un ilk ünvanı

Serial.println ("22222 poçt kodunu, poçt kodunu yazırıq"); for (ünvan = 0; ünvan <5; ünvan ++) writeEEPROM (eeprom, ünvan, '2'); // EEPROM -a 22222 yazır

üçün (ünvan = 0; ünvan <5; ünvan ++) {Serial.print (readEEPROM (eeprom, ünvan), HEX); }}

boşluq döngəsi () {

/*loop () funksiyasında heç bir şey yoxdur, çünki arduino -nun eyni şeyi dəfələrlə EEPROM -a dəfələrlə yazmasını istəmirik. Yalnız birdəfəlik yazmaq istəyirik, buna görə də loop () funksiyasından EEPROMs istifadə etməklə qaçınılır.*/}

// writeEEPROM funksiyasını təyin edir

etibarsız writeEEPROM (int deviceaddress, unsigned int eeaddress, byte data) {Wire.beginTransmission (deviceaddress); Wire.write ((int) (eeaddress >> 8)); // MSB Wire.write ((int) (eeaddress & 0xFF)) yazır; // LSB Wire.write yazır (məlumatlar); Wire.endTransmission (); }

// readEEPROM funksiyasını təyin edir

bayt readEEPROM (int cihaz ünvanı, imzasız int eaddress) {bayt rdata = 0xFF; Wire.beginTransmission (cihaz ünvanı); Wire.write ((int) (eeaddress >> 8)); // MSB Wire.write ((int) (eeaddress & 0xFF)) yazır; // LSB Wire.endTransmission () yazır; Wire.requestFrom (cihaz ünvanı, 1); if (Wire.available ()) rdata = Wire.read (); rdata qayıt; }

Tövsiyə: