Cara Menggunakan Arduino EEPROM untuk Menyimpan Data Antar Siklus Daya

Cara Menggunakan Arduino EEPROM untuk Menyimpan Data Antar Siklus Daya

Tahukah Anda bahwa Arduino dapat menyimpan data saat dimatikan? Bukan sketsa yang disimpan di memori flash. Saya sedang berbicara tentang data variabel di EEPROM. Bergabunglah dengan saya saat saya menunjukkan kepada Anda cara membaca dan menulisnya, dan apa yang dapat dilakukannya untuk proyek Anda.





Jika Anda baru mengenal Arduino, pastikan Anda memeriksa kami panduan pemula .





Apa itu EEPROM?

EEPROM adalah singkatan dari memori read-only yang dapat diprogram dan dapat dihapus secara elektrik . Ini adalah jenis memori non-volatile. Jangan khawatir jika Anda tidak mengerti apa artinya. Ini hanya menyimpan data bahkan dengan daya dimatikan (tidak seperti RAM , yang membutuhkan listrik untuk menyimpan data apa pun).





EEPROM dibangun ke dalam berbagai prosesor, seperti field-programmable gate array (FPGA) yang digunakan dalam Matrix Creator Pi HAT. Semua Arduino memiliki EEPROM yang tersedia, tetapi kapasitasnya bervariasi per model. Pastikan Anda melihat panduan pembelian kami untuk detail lebih lanjut di setiap papan.

Bagaimana cara kerjanya?

EEPROM dihapus secara elektrik dan diprogram menggunakan Terowongan Fowler-Nordheim . Anda tidak perlu mengetahui detail teknis untuk dapat menggunakannya. Premis dasarnya adalah bahwa listrik digunakan untuk mengubah data biner ( apa itu biner ). Itu dapat dibaca, dihapus, dan ditulis ulang secara elektronik.



Untungnya, Bahasa Arduino memudahkan untuk mengubah data, semua tanpa memerlukan gelar dalam ilmu komputer.

Harapan hidup

Meskipun mudah untuk menggunakan EEPROM di Arduino, ia memiliki masa pakai yang terbatas. EEPROM ditentukan untuk menangani 100.000 siklus baca/hapus. Ini berarti Anda dapat menulis dan kemudian menghapus/menulis ulang data 100.000 kali sebelum EEPROM menjadi tidak stabil. Pada kenyataannya, atmel (produsen 'Chip' Arduino) semikonduktor dapat menangani jumlah siklus yang lebih tinggi atau lebih rendah, tergantung pada toleransi masing-masing dan setiap prosesor.





Setelah lokasi terlalu sering ditulis dan dihapus, itu bisa mulai menjadi tidak dapat diandalkan. Ini mungkin tidak mengembalikan data yang benar, atau mengembalikan nilai dari bit tetangga.

Ini mungkin terdengar seperti banyak menulis, tetapi dapat dengan mudah mencapai batas ini jika membaca dan menulis secara terprogram (dalam lingkaran , Misalnya). Membaca data tidak menurunkan silikon, hanya menulis saja . Anda dapat membaca data dari EEPROM sebanyak yang Anda suka tanpa rasa takut!





Penting untuk dicatat bahwa batas ini berlaku untuk setiap lokasi memori. Arduino Anda mungkin memiliki 1.000 atau lebih lokasi memori yang tersedia di EEPROM, jadi jika Anda menulis terlalu banyak ke satu lokasi, hanya lokasi itu yang terpengaruh, dan bukan lokasi lainnya. Nanti saya bahas memakai leveling , yang dapat mengurangi keausan EEPROM dengan mendistribusikan data secara merata -- sesuatu yang digunakan SSD.

Apa Manfaatnya?

EEPROM sangat berguna untuk proyek Arduino Anda. Karena ia mengingat data bahkan ketika daya dimatikan, Anda dapat menyimpan status Arduino. Mungkin Anda bisa membangun menara laser yang mengingat posisinya atau berapa banyak 'amunisi' yang tersisa. Anda dapat menggunakannya untuk mengontrol peralatan Anda , dan mencatat berapa kali peralatan Anda diaktifkan.

EEPROM paling cocok untuk hal-hal seperti pengaturan atau skor tinggi. Jika Anda ingin secara teratur menulis data yang kompleks, mungkin pertimbangkan perisai ethernet (dengan slot SD bawaan) atau Raspberry Pi .

Baca dan tulis

Sekarang setelah teorinya hilang, mari kita lihat cara membaca dan menulis beberapa data! Pertama, sertakan perpustakaan (ini dilengkapi dengan Arduino IDE):

#include

Sekarang tulis beberapa data:

EEPROM.write(0, 12);

Ini menulis nomor 12 ke lokasi EEPROM 0 . Setiap penulisan membutuhkan waktu 3,3 milidetik ( MS , 1000ms = 1 detik). Perhatikan bagaimana Anda tidak dapat menulis huruf ( arang ), hanya angka dari nol hingga 255 yang diperbolehkan. Inilah sebabnya mengapa EEPROM sangat ideal untuk pengaturan atau skor tinggi, tetapi tidak begitu baik untuk nama atau kata-kata pemain. Dimungkinkan untuk menyimpan teks menggunakan metode ini (Anda dapat memetakan setiap huruf alfabet ke angka), namun Anda harus memiliki beberapa lokasi memori -- satu lokasi untuk setiap huruf.

Inilah cara Anda membaca data itu:

cara meretas aplikasi sepulang sekolah
EEPROM.read(0);

Nol adalah alamat yang Anda tulis sebelumnya. Jika Anda belum pernah menulis ke alamat sebelumnya, itu akan mengembalikan nilai maksimum ( 255 ).

Ada beberapa metode yang sedikit lebih berguna yang tersedia. Katakanlah Anda ingin menyimpan tempat desimal atau string:

EEPROM.put(2,'12.67');

Ini menulis data ke beberapa lokasi -- sesuatu yang mudah untuk ditulis sendiri, tetapi tetap berguna. Anda masih perlu melacak berapa banyak lokasi yang telah ditulisi ini, sehingga Anda tidak menimpa data Anda secara tidak sengaja! Anda harus menggunakan Dapatkan metode untuk mengambil data ini lagi:

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

Nilai dari get disimpan ke dalam float F variabel. Perhatikan bagaimana ini diinisialisasi dengan 0.00f sebagai nilai. NS F memberi tahu kompiler bahwa Anda mungkin ingin menyimpan sejumlah besar dalam variabel ini, sehingga ia menyiapkan beberapa konfigurasi tambahan selama kompilasi.

NS dokumentasi EEPROM di Situs web Arduino memiliki lebih banyak contoh.

Memakai Leveling

Leveling keausan adalah teknik yang digunakan untuk mengurangi keausan dan meningkatkan umur EEPROM. Jika Anda hanya mengerjakan proyek kecil, Anda mungkin tidak perlu khawatir tentang hal ini.

Hal paling sederhana yang dapat Anda lakukan untuk mempertahankan masa pakai EEPROM adalah membatasi penulisan Anda ke lokasi tertentu. Anda bisa melakukannya dengan membaca alamatnya terlebih dahulu, dan jika nilai yang ingin Anda tulis sudah ada, tidak perlu ditulis lagi (ingat, membaca data tidak ada salahnya). Inilah cara Anda melakukannya:

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

Itu adalah kode yang cukup sederhana, namun hanya berfungsi untuk bilangan bulat! Alih-alih menemukan kembali roda, gunakan fungsi yang ada di perpustakaan Arduino EEPROM:

EEPROM.update(address, val);

Metode ini memiliki tanda tangan yang sama persis dengan menulis metode, meskipun secara drastis dapat mengurangi jumlah penulisan yang dibutuhkan!

Jika Anda perlu menulis banyak data, dan khawatir akan kehabisan silikon, Anda dapat melacak berapa banyak penulisan yang Anda lakukan, meskipun ini menggunakan lebih banyak data. Berikut implementasi kasarnya di kodesemu :

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 dibagi di seluruh lokasi alamat). Sebagian besar waktu, tingkat perlindungan ini tidak diperlukan. Arduino juga sangat murah, jadi Anda mungkin merasa lebih mudah untuk membeli cadangan!

Anda sekarang harus cukup tahu untuk membuat beberapa proyek yang luar biasa. Beri tahu kami jika Anda membuat sesuatu yang keren! Bisakah Anda mengenali semua perangkat dalam gambar? Tinggalkan kami komentar di bawah ini!

Membagikan Membagikan Menciak Surel 5 Tips untuk Meningkatkan Mesin VirtualBox Linux Anda

Bosan dengan kinerja buruk yang ditawarkan oleh mesin virtual? Inilah yang harus Anda lakukan untuk meningkatkan kinerja VirtualBox Anda.

Baca Selanjutnya
Topik-topik yang berkaitan
  • buatan sendiri
  • Arduino
  • Elektronik
Tentang Penulis Joe Coburn(136 Artikel Diterbitkan)

Joe adalah lulusan Ilmu Komputer dari University of Lincoln, Inggris. Dia adalah pengembang perangkat lunak profesional, dan ketika dia tidak menerbangkan drone atau menulis musik, dia sering terlihat sedang mengambil foto atau membuat video.

More From Joe Coburn

Berlangganan newsletter kami

Bergabunglah dengan buletin kami untuk kiat teknologi, ulasan, ebook gratis, dan penawaran eksklusif!

Klik di sini untuk berlangganan