Cara Menggunakan Arduino EEPROM untuk Menyimpan Data Antara Kitaran Kuasa

Cara Menggunakan Arduino EEPROM untuk Menyimpan Data Antara Kitaran Kuasa

Tahukah anda Arduino dapat menyimpan data ketika dimatikan? Bukan lakaran yang disimpan dalam memori kilat. Saya bercakap mengenai data pemboleh ubah di EEPROM. Sertailah saya kerana saya menunjukkan kepada anda cara membaca dan menulis kepadanya, dan apa yang boleh dilakukan untuk projek anda.





Sekiranya anda baru menggunakan Arduino, pastikan anda melihat kami panduan pemula .





Apa itu EEPROM?

EEPROM bermaksud memori boleh baca yang boleh diprogramkan secara elektrik yang boleh dipadamkan . Ini adalah sejenis memori yang tidak mudah berubah. Jangan bimbang jika anda tidak memahami apa maksudnya. Ia hanya menyimpan data walaupun dengan kuasa yang dikeluarkan (tidak seperti Ram , yang memerlukan elektrik untuk menyimpan sebarang data).





EEPROM dibangun dalam segudang pemproses, seperti array gate yang dapat diprogramkan di lapangan (FPGA) yang digunakan dalam Matrix Creator Pi HAT. Semua Arduino mempunyai EEPROM yang tersedia, tetapi kapasitasnya berbeza-beza per model. Pastikan anda melihat panduan membeli kami untuk maklumat lebih lanjut di setiap papan.

Bagaimanakah ia berfungsi?

EEPROM dipadamkan secara elektrik dan diprogramkan menggunakan Terowong Fowler-Nordheim . Anda tidak perlu mengetahui butiran teknikal untuk dapat menggunakannya. Premis asasnya ialah elektrik digunakan untuk menukar data binari (apa itu binari). Ia boleh dibaca, dipadam, dan ditulis semula secara elektronik.



Nasib baik, yang Bahasa Arduino menjadikannya mudah untuk menukar data, semuanya tanpa memerlukan ijazah dalam sains komputer.

Jangka hayat

Walaupun EEPROM mudah digunakan di Arduino, ia mempunyai jangka hayat yang terhad. EEPROM ditentukan untuk mengendalikan 100,000 kitaran membaca / menghapus. Ini bermakna anda boleh menulis dan kemudian menghapus / menulis semula data 100,000 kali sebelum EEPROM menjadi tidak stabil. Dalam realiti, Atmel (pengeluar Arduino 'Chip') semikonduktor boleh menangani bilangan kitaran yang lebih tinggi atau lebih rendah, bergantung pada toleransi setiap pemproses.





Setelah sesuatu lokasi ditulis dan dipadamkan berkali-kali ia akan menjadi tidak boleh dipercayai. Ia mungkin tidak mengembalikan data yang betul, atau mengembalikan nilai dari bit yang berdekatan.

Ini mungkin terdengar seperti banyak penulisan, tetapi mudah untuk mencapai had ini jika membaca dan menulis secara teratur (dalam gelung , sebagai contoh). Membaca data tidak menurunkan silikon, hanya menulis sahaja . Anda boleh membaca data dari EEPROM sebanyak yang anda suka tanpa rasa takut!





Penting untuk diperhatikan bahawa had ini berlaku untuk setiap lokasi memori. Arduino anda mungkin mempunyai 1,000 atau lebih lokasi memori yang tersedia di EEPROM, jadi jika anda menulis terlalu banyak kali ke satu lokasi, hanya lokasi tersebut yang terpengaruh, dan bukan di lokasi lain. Nanti saya akan berbincang memakai meratakan , yang dapat mengurangkan pemakaian EEPROM dengan menyebarkan data secara merata - sesuatu yang digunakan SSD.

Untuk Apa Ia Berguna?

EEPROM sangat berguna untuk projek Arduino anda. Oleh kerana ia mengingat data walaupun kuasa dikeluarkan, anda dapat menyimpan keadaan Arduino. Mungkin anda boleh membina menara laser yang mengingat kedudukannya atau berapa banyak 'amunisi' yang tinggal. Anda boleh menggunakannya untuk mengawal peralatan anda, dan mencatat berapa kali perkakas anda diaktifkan.

EEPROM sangat sesuai untuk perkara seperti tetapan atau skor tinggi. Sekiranya anda ingin menulis data kompleks secara berkala, mungkin pertimbangkan perisai ethernet (dengan slot SD terbina dalam) atau Raspberry Pi.

Baca dan tulis

Oleh kerana teori ini tidak dapat dilupakan, mari kita lihat bagaimana membaca dan menulis beberapa data! Pertama, sertakan perpustakaan (ini dilengkapi dengan Arduino IDE):

#include

Sekarang tuliskan beberapa data:

EEPROM.write(0, 12);

Ini menulis nombor 12 ke lokasi EEPROM 0 . Setiap penulisan mengambil masa 3.3 milisaat ( Cik , 1000ms = 1 saat). Perhatikan bagaimana anda tidak dapat menulis surat ( char ), hanya nombor dari sifar hingga 255 yang dibenarkan. Inilah sebabnya mengapa EEPROM sangat sesuai untuk tetapan atau skor tinggi, tetapi tidak begitu baik untuk nama atau kata pemain. Adalah mungkin untuk menyimpan teks menggunakan kaedah ini (anda dapat memetakan setiap huruf abjad ke angka), namun anda perlu memiliki beberapa lokasi memori - satu lokasi untuk setiap huruf.

Inilah cara anda membaca data tersebut:

cara membuka fail .dat di windows 10
EEPROM.read(0);

Nol adalah alamat yang anda tulis sebelumnya. Sekiranya anda belum menulis ke alamat sebelumnya, ia akan mengembalikan nilai maksimum ( 255 ).

Terdapat beberapa kaedah yang lebih berguna. Katakan anda mahu menyimpan tempat perpuluhan atau rentetan:

EEPROM.put(2,'12.67');

Ini menulis data ke beberapa lokasi - sesuatu yang mudah ditulis sendiri, tetapi tidak berguna. Anda masih perlu memantau berapa banyak lokasi yang telah ditulis ini, jadi anda tidak akan menimpa data anda secara tidak sengaja! Anda mesti menggunakan dapatkan kaedah untuk mendapatkan kembali data ini:

float f = 0.00f;
EEPROM.get(2, f);

Nilai dari get disimpan ke dalam apungan f pemboleh ubah. Perhatikan bagaimana ini dimulakan dengan 0.00f sebagai nilai. The f memberitahu penyusun bahawa anda mungkin ingin menyimpan sebilangan besar dalam pemboleh ubah ini, jadi ia menyediakan beberapa konfigurasi tambahan semasa penyusunan.

The Dokumentasi EEPROM pada Laman web Arduino mempunyai banyak lagi contoh.

Pakai Meratakan

Wear leveling adalah teknik yang digunakan untuk mengurangkan keausan dan meningkatkan jangka hayat EEPROM. Sekiranya anda hanya mengusahakan projek kecil, anda mungkin tidak perlu risau tentang perkara ini.

Perkara paling mudah yang boleh anda lakukan untuk memelihara kehidupan EEPROM adalah menghadkan tulisan anda ke lokasi tertentu. Anda boleh melakukannya dengan membaca alamat terlebih dahulu, dan jika nilai yang ingin anda tulis sudah ada, tidak perlu menulisnya lagi (ingat, membaca data tidak membahayakan). Inilah cara anda melakukannya:

int safeWrite(int data, address) {
if(EEPROM.read(address) != data) {
EEPROM.write(address, data);
}
}

Ini adalah sedikit kod yang mudah, namun ia hanya berfungsi untuk bilangan bulat! Daripada mencipta semula roda, gunakan fungsi yang terdapat di perpustakaan Arduino EEPROM:

EEPROM.update(address, val);

Kaedah ini mempunyai tanda yang sama persis dengan tulis kaedah, walaupun secara drastik dapat mengurangkan jumlah penulisan yang diperlukan!

Sekiranya anda perlu menulis banyak data, dan khuatir akan kehabisan silikon, anda dapat mengawasi berapa banyak tulisan yang anda lakukan, walaupun ini menggunakan lebih banyak data. Inilah pelaksanaan kasar di pseudokod :

var address = 0
var writeCount = 0
if(writeCount > 75,000)
writeCount = 0
address += 1
EEPROM.write(address, data)

Anda perlu menyimpan alamat dan writeCount di EEPROM (dan writeCount perlu dibahagi-bahagikan di lokasi alamat). Sebilangan besar masa, tahap perlindungan ini tidak diperlukan. Arduino juga sangat murah, jadi anda mungkin lebih mudah membeli sandaran!

Anda sekarang mesti cukup tahu untuk membuat beberapa projek hebat. Beritahu kami jika anda membuat sesuatu yang menarik! Bolehkah anda mengenali semua peranti dalam gambar? Tinggalkan komen kami di bawah!

Berkongsi Berkongsi Tweet E-mel 5 Petua untuk Meningkatkan Mesin Linux VirtualBox Anda

Bosan dengan prestasi buruk yang ditawarkan oleh mesin maya? Inilah yang harus anda lakukan untuk meningkatkan prestasi VirtualBox anda.

Baca Seterusnya
Topik-topik yang berkaitan
  • DIY
  • Arduino
  • Elektronik
Mengenai Pengarang Joe Coburn(136 Artikel Diterbitkan)

Joe adalah lulusan Sains Komputer dari University of Lincoln, UK. Dia seorang pembangun perisian profesional, dan ketika dia tidak terbang drone atau menulis muzik, dia sering didapati mengambil gambar atau menghasilkan video.

Lagi Dari Joe Coburn

Langgan buletin kami

Sertailah buletin kami untuk mendapatkan petua, ulasan, ebook percuma, dan tawaran eksklusif!

Klik di sini untuk melanggan