Isi kandungan:

Membaca dan Menulis Data ke EEPROM Luaran Menggunakan Arduino: 5 Langkah
Membaca dan Menulis Data ke EEPROM Luaran Menggunakan Arduino: 5 Langkah

Video: Membaca dan Menulis Data ke EEPROM Luaran Menggunakan Arduino: 5 Langkah

Video: Membaca dan Menulis Data ke EEPROM Luaran Menggunakan Arduino: 5 Langkah
Video: ArduMeka #14 - EEPROM Dasar Untuk Pemula | @ProgrammerSehat 2024, November
Anonim
Membaca dan Menulis Data ke EEPROM Luaran Menggunakan Arduino
Membaca dan Menulis Data ke EEPROM Luaran Menggunakan Arduino

EEPROM bermaksud Memori Hanya Baca Boleh Diprogramkan dengan Pemadaman Elektrik.

EEPROM sangat penting dan berguna kerana ia adalah bentuk memori yang tidak mudah berubah. Ini bermaksud bahawa walaupun papan dimatikan, cip EEPROM masih mengekalkan program yang ditulis kepadanya. Oleh itu, apabila anda mematikan papan dan menghidupkannya semula, program yang ditulis ke EEPROM dapat dijalankan. Jadi pada dasarnya, EEPROM menyimpan dan menjalankan program tidak kira apa. Ini bermakna anda boleh mematikan peranti, mematikannya selama 3 hari, dan kembali dan menghidupkannya dan masih dapat menjalankan program yang telah diprogramkan di dalamnya. Inilah cara kerja kebanyakan alat elektronik pengguna.

Projek ini ditaja oleh LCSC. Saya telah menggunakan komponen elektronik dari LCSC.com. LCSC mempunyai komitmen kuat untuk menawarkan berbagai pilihan komponen elektronik asli dan berkualiti tinggi dengan harga terbaik dengan rangkaian penghantaran global ke lebih dari 200 negara. Daftar hari ini dan dapatkan potongan $ 8 untuk pesanan pertama anda.

EEPROM juga sangat efisien kerana byte individu dalam EEPROM tradisional dapat dibaca, dipadam, dan ditulis semula secara bebas. Dalam kebanyakan jenis memori yang tidak mudah berubah, ini tidak dapat dilakukan. Peranti EEPROM bersiri seperti Microchip 24-siri EEPROM membolehkan anda menambahkan lebih banyak memori ke mana-mana peranti yang boleh bercakap I²C.

Bekalan

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. Kristal 16 MHz
  4. Papan roti
  5. Perintang 4.7k Ohm x 2
  6. Kapasitor 22 pF x 2

Langkah 1: Asas EEPROM

Asas EEPROM
Asas EEPROM

Cip Microchip 24LC2512 boleh dibeli dalam pakej DIP 8 pin. Pin pada 24LC512 cukup lurus ke depan dan terdiri daripada daya (8), GND (4), perlindungan tulis (7), SCL / SDA (6, 5), dan tiga pin alamat (1, 2, 3).

Sejarah Ringkas ROM

Komputer jenis "Stored-Program" awal - seperti kalkulator meja dan pentafsir papan kekunci - mula menggunakan ROM dalam bentuk ROM Diode Matrix. Ini adalah memori yang terdiri daripada dioda semikonduktor diskrit yang diletakkan pada PCB yang disusun khas. Ini memberi jalan kepada Mask ROM dengan munculnya litar bersepadu. Mask ROM serupa dengan ROM Diode Matrix sahaja yang dilaksanakan pada skala yang jauh lebih kecil. Ini berarti, bagaimanapun, anda tidak boleh memindahkan beberapa diod dengan menggunakan solder dan memprogramnya semula. Topeng ROM harus diprogramkan oleh pengeluar dan selepas itu tidak boleh diubah.

Malangnya, Mask ROM mahal dan memerlukan masa yang lama untuk dihasilkan kerana setiap program baru memerlukan peranti baru untuk dihasilkan oleh pengecoran. Namun, pada tahun 1956, masalah ini diselesaikan dengan penemuan PROM (ROM yang Dapat Diprogramkan) yang membolehkan pembangun memprogramkan cip itu sendiri. Ini bermaksud pengeluar dapat menghasilkan berjuta-juta peranti yang tidak diprogramkan yang menjadikannya lebih murah dan praktikal. PROM, bagaimanapun, hanya dapat ditulis untuk sekali menggunakan peranti pengaturcaraan voltan tinggi. Setelah peranti PROM diprogramkan, tidak ada cara untuk mengembalikan peranti ke keadaannya yang tidak diprogramkan.

Ini berubah pada tahun 1971 dengan penemuan EPROM (Erasable Programmable ROM) yang - selain menambahkan huruf lain ke akronim - membawa kemampuan untuk memadamkan peranti dan mengembalikannya ke keadaan "kosong" menggunakan sumber cahaya UV yang kuat. Betul, anda harus menyalakan cahaya terang pada IC untuk memprogramkannya semula, betapa sejuknya itu? Ternyata ia cukup keren kecuali anda seorang pembangun yang mengusahakan firmware yang mana anda benar-benar ingin dapat memprogramkan semula peranti menggunakan isyarat elektrik. Ini akhirnya menjadi kenyataan pada tahun 1983 dengan pengembangan EEPROM (Electricly Erasable Programmable ROM) dan dengan itu, kita sampai pada hari ini akronim yang tidak berat sebelah.

Langkah 2: Kebiasaan EEPROM

Terdapat dua kelemahan utama EEPROM sebagai kaedah penyimpanan data. Dalam kebanyakan aplikasi, kelebihannya lebih besar daripada keburukan, tetapi anda harus menyedarinya sebelum memasukkan EEPROM ke dalam rancangan anda yang seterusnya.

Pertama sekali, teknologi yang menjadikan EEPROM berfungsi juga menghadkan berapa kali ia dapat ditulis semula. Ini berkaitan dengan elektron yang terperangkap dalam transistor yang membentuk ROM dan membina sehingga perbezaan cas antara "1" dan "0" tidak dapat dikenali. Tetapi jangan risau, kebanyakan EEPROM mempunyai bilangan tulis semula maksimum 1 juta atau lebih. Selagi anda tidak terus menulis ke EEPROM, tidak mungkin anda mencapai tahap maksimum ini. Kedua, EEPROM tidak akan terhapus jika anda melepaskan kuasa daripadanya, tetapi tidak akan menyimpan data anda selama-lamanya. Elektron dapat melayang keluar dari transistor dan melalui penebat, dengan berkesan menghapus EEPROM dari masa ke masa. Yang mengatakan, ini biasanya berlaku selama bertahun-tahun (walaupun dapat dipercepat oleh panas). Sebilangan besar pengeluar mengatakan bahawa data anda selamat di EEPROM selama 10 tahun atau lebih pada suhu bilik. Dan ada satu perkara lagi yang harus anda ingat semasa memilih peranti EEPROM untuk projek anda. Kapasiti EEPROM diukur dalam bit dan bukan bait. EEPROM 512K akan menyimpan data 512Kbits, dengan kata lain, hanya 64KB.

Langkah 3: Penyambungan Perkakasan Arduino

Cangkuk Perkakasan Arduino
Cangkuk Perkakasan Arduino
Cangkuk Perkakasan Arduino
Cangkuk Perkakasan Arduino

Baiklah, sekarang kita tahu apa itu EEPROM, mari kita sambung dan lihat apa yang boleh dilakukannya! Untuk membuat peranti bercakap, kita perlu menyambungkan kuasa dan juga talian bersiri I²C. Peranti ini, khususnya, berjalan pada 5VDC jadi kita akan menyambungkannya ke output 5V dari Arduino UNO kami. Juga, garis I²C memerlukan perintang penarik agar komunikasi berlaku dengan betul. Nilai perintang ini bergantung pada kapasitansi garis dan frekuensi yang anda ingin sampaikan, tetapi kaedah praktik yang baik untuk aplikasi tidak kritikal hanya disimpan dalam julat kΩ. Dalam contoh ini, kita akan menggunakan perintang tarik 4.7kΩ.

Terdapat tiga pin pada peranti ini untuk memilih alamat I²C, dengan cara ini anda boleh mempunyai lebih dari satu EEPROM di dalam bas dan mengalaminya secara berbeza. Anda boleh meletakkan semuanya, tetapi kami akan menyambungkannya sehingga kami dapat memasukkan peranti berkapasiti lebih tinggi di tutorial nanti.

Kami akan menggunakan papan roti untuk menghubungkan semuanya. Rajah di bawah menunjukkan penyambungan yang betul untuk kebanyakan peranti EEPROM I²C, termasuk EEPROM 24-siri Microchip yang kami jual.

Langkah 4: Membaca dan Menulis

Sebilangan besar masa semasa anda menggunakan EEPROM bersama dengan mikrokontroler, anda sebenarnya tidak perlu melihat semua kandungan memori sekaligus. Anda hanya akan membaca dan menulis bait di sana sini mengikut keperluan. Walau bagaimanapun, dalam contoh ini, kita akan menulis keseluruhan fail ke EEPROM dan kemudian membacanya semula supaya kita dapat melihatnya di komputer kita. Ini akan membuat kita selesa dengan idea menggunakan EEPROM dan juga memberi kita gambaran tentang seberapa banyak data yang benar-benar sesuai dengan peranti kecil.

Menulis sesuatu

Sketsa contoh kami hanya akan mengambil bait apa pun yang masuk melalui port bersiri dan menulisnya ke EEPROM, mengikuti jalan berapa banyak bait yang telah kami tulis ke memori.

Menulis byte memori kepada EEPROM biasanya berlaku dalam tiga langkah:

  1. Hantar bait yang paling penting dari alamat memori yang ingin anda tulis.
  2. Hantarkan Bait Terkurang dari alamat memori yang ingin anda tulis.
  3. Kirim bait data yang ingin anda simpan di lokasi ini.

Mungkin ada beberapa kata kunci yang menjelaskan:

Alamat Ingatan

Sekiranya anda membayangkan semua bait dalam 512 Kbit EEPROM berdiri dalam barisan dari 0 hingga 64000 - kerana terdapat 8 bit ke bait dan oleh itu anda boleh memuat 64000 bait pada 512 Kbit EEPROM - maka alamat memori adalah tempat di baris di mana anda akan menemui bait tertentu. Kami perlu menghantar alamat itu ke EEPROM supaya tahu di mana meletakkan bait yang kami kirimkan.

Byte Paling Penting dan Paling Kurang

Kerana terdapat 32000 tempat yang mungkin di EEPROM 256 Kbit - dan kerana 255 adalah bilangan terbesar yang dapat anda kod dalam satu bait - kami perlu menghantar alamat ini dalam dua bait. Pertama, kami menghantar Byte Paling Penting (MSB) - 8 bit pertama dalam kes ini. Kemudian kami menghantar Byte Significant Least (LSB) - 8 bit kedua. Kenapa? Oleh kerana inilah yang diharapkan peranti menerimanya, itu saja.

Penulisan Halaman

Menulis satu bait pada satu masa adalah baik, tetapi kebanyakan peranti EEPROM mempunyai sesuatu yang disebut "penyangga penulisan halaman" yang membolehkan anda menulis beberapa bait pada masa yang sama seperti yang anda lakukan dengan satu bait. Kami akan memanfaatkannya dalam lakaran contoh kami. EEPROM menggunakan kaunter dalaman yang secara automatik meningkatkan lokasi memori dengan setiap bait data berikut yang diterimanya. Setelah alamat memori dihantar, kita dapat mengikutinya dengan data hingga 64 bait. EEPROM menganggap (betul) bahawa alamat 312 diikuti oleh 10 bait akan mencatatkan bait 0 di alamat 312, bait 1 di alamat 313, bait 2 di alamat 314, dan seterusnya.

Baca Sesuatu

Membaca dari EEPROM pada dasarnya mengikuti proses tiga langkah yang sama seperti menulis kepada EEPROM:

  1. Hantar bait yang paling penting dari alamat memori yang ingin anda tulis.
  2. Hantarkan Leite Significant Byte dari alamat memori yang ingin anda tulis.
  3. Minta bait data di lokasi tersebut.

Langkah 5: Skematik dan Kod

Skematik dan Kod
Skematik dan Kod

Kod:

#sertakan

#define eeprom 0x50 // mentakrifkan alamat asas EEPROM

batal persediaan () {

Wire.begin (); // mencipta objek Wire

Serial.begin (9600);

alamat int yang tidak ditandatangani = 0; // alamat pertama EEPROM

Serial.println ("Kami menulis kod zip 22222, kod zip"); untuk (alamat = 0; alamat <5; alamat ++) tulisEEPROM (eeprom, alamat, '2'); // Menulis 22222 ke EEPROM

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

gelung kosong () {

/ * Tidak ada apa-apa dalam fungsi loop () kerana kami tidak mahu arduino berulang kali menulis perkara yang sama kepada EEPROM berulang kali. Kami hanya mahu menulis sekali sahaja, jadi fungsi loop () dihindari dengan EEPROM. * /}

// mentakrifkan fungsi writeEEPROM

batal writeEEPROM (int deviceaddress, int signed int eeaddress, byte data) {Wire.beginTransmission (deviceaddress); Wire.write ((int) (alamat e-mel >> 8)); // menulis MSB Wire.write ((int) (eeaddress & 0xFF)); // menulis LSB Wire.write (data); Wire.endTransmission (); }

// mentakrifkan fungsi readEEPROM

byte readEEPROM (int deviceaddress, int signed int eeaddress) {byte rdata = 0xFF; Wire.beginTransmission (deviceaddress); Wire.write ((int) (alamat e-mel >> 8)); // menulis MSB Wire.write ((int) (eeaddress & 0xFF)); // menulis LSB Wire.endTransmission (); Wire.requestFrom (alamat peranti, 1); jika (Wire.available ()) rdata = Wire.read (); mengembalikan rdata; }

Disyorkan: