Pengantar EEPROM di Arduino

Coba Instrumen Kami Untuk Menghilangkan Masalah





Dalam posting ini kita akan memahami apa itu EEPROM, bagaimana data disimpan pada EEPROM bawaan Papan Arduino Mikrokontroler dan juga secara praktis menguji cara menulis dan membaca data di EEPROM dengan beberapa contoh.

Pengantar EEPROM di Arduino

Mengapa EEPROM?

Sebelum kita bertanya apa itu EEPROM? Sangat penting untuk mengetahui mengapa EEPROM digunakan untuk penyimpanan. Sehingga, kami mendapatkan ide yang jelas tentang EEPROM.



Ada banyak perangkat penyimpanan yang tersedia saat ini, mulai dari perangkat penyimpanan magnetik seperti hard disk komputer, perekam kaset jadul, media penyimpanan optik seperti CD, DVD, Blu-ray disk dan memori solid state seperti SSD (Solid State Drive) untuk komputer dan kartu memori dll.

Ini adalah perangkat penyimpanan massal yang dapat menyimpan data seperti musik, video, dokumen, dll. Mulai dari beberapa Kilobyte hingga multi-Terabyte. Ini adalah memori non-volatile yang berarti, data dapat disimpan bahkan setelah daya terputus ke media penyimpanan.



Perangkat yang memberikan musik yang menenangkan telinga atau video yang memukau seperti komputer atau smartphone menyimpan beberapa data penting seperti data konfigurasi, data booting, kata sandi, data bio-metrik, data login, dll.

Data yang disebutkan ini tidak dapat disimpan di perangkat penyimpanan massal untuk alasan keamanan dan juga data ini dapat dimodifikasi oleh pengguna secara tidak sengaja yang dapat menyebabkan kerusakan perangkat.

Data ini hanya membutuhkan beberapa byte hingga beberapa Megabyte, menghubungkan perangkat penyimpanan konvensional seperti media magnetik atau optik ke chip prosesor tidak layak secara ekonomi dan fisik.

Jadi, data penting ini disimpan dalam chip pemrosesan itu sendiri.

Arduino tidak berbeda dengan komputer atau smartphone. Ada beberapa keadaan di mana kita perlu menyimpan beberapa data penting yang tidak boleh terhapus bahkan setelah listrik mati, misalnya data sensor.

Sekarang, Anda pasti sudah tahu mengapa kita membutuhkan EEPROM pada mikroprosesor dan chip mikrokontroler.

Apa itu EEPROM?

EEPROM adalah singkatan dari Electrically Erasable Programmable Read Only Memory. Ini juga merupakan memori non-volatile yang dapat membaca dan menulis byte bijaksana.

Membaca dan menulis tingkat byte membuatnya berbeda dari memori semikonduktor lainnya. Misalnya memori flash: membaca, menulis dan menghapus data dengan cara blok.

Satu blok dapat berukuran beberapa ratus hingga ribuan bit, yang layak untuk penyimpanan massal, tetapi tidak untuk operasi 'Memori Hanya Baca' di mikroprosesor dan mikrokontroler, yang perlu mengakses data byte demi byte.

Pada papan Arduino Uno (ATmega328P) itu memiliki papan 1KB atau 1024 byte EEPROM. Setiap byte dapat diakses secara individual, setiap byte memiliki alamat mulai dari 0 hingga 1023 (totalnya 1024).

Alamat (0-1023) adalah lokasi memori tempat data kita akan disimpan.

Pada setiap alamat Anda dapat menyimpan data 8-bit, digit numerik dari 0 hingga 255. Data kita disimpan dalam bentuk biner, jadi jika kita menulis angka 255 ke EEPROM itu akan menyimpan digit sebagai 11111111 dalam sebuah alamat dan jika kita menyimpan nol, itu akan disimpan sebagai 00000000.

Anda juga dapat menyimpan teks, karakter khusus, karakter alfanumerik, dll. Dengan menulis program yang sesuai.

Detail konstruksi dan pengerjaannya tidak dibahas di sini yang mungkin membuat artikel ini panjang dan kami mungkin membuat Anda mengantuk. Pergilah ke YouTube atau Google, ada artikel / video menarik tentang konstruksi dan cara kerja EEPORM.

Jangan bingung antara EEPROM dengan EPROM:

Singkatnya EPROM adalah Memori Hanya Baca yang Dapat Diprogram Secara Elektrik yang artinya dapat diprogram (menyimpan memori) secara elektrik, tetapi tidak dapat dihapus secara elektrik.

Ini menggunakan sinar Ultraviolet terang di atas chip penyimpanan yang menghapus data yang disimpan. EEPROM hadir sebagai pengganti EPROM dan sekarang hampir tidak digunakan di perangkat elektronik mana pun.

Jangan bingung dengan Flash Memory untuk EEPROM:

Memori flash adalah memori semikonduktor dan non-volatil yang juga dapat dihapus secara elektrik dan dapat diprogram secara elektrik, sebenarnya memori flash berasal dari EEPROM. Tetapi akses memori blok-bijaksana atau dengan kata lain, cara memori diakses dan konstruksinya membuat berbeda dari EEPROM.

Arduino Uno (Mikrokontroler ATmega328P) juga menggunakan memori flash 32KB untuk penyimpanan program.

Umur EEPROM:

Seperti media penyimpanan elektronik lainnya, EEPROM juga memiliki siklus baca, tulis, hapus yang terbatas. Tetapi masalahnya adalah ia memiliki salah satu umur paling sedikit dibandingkan dengan jenis memori semikonduktor lainnya.

Di EEPROM Arduino, Atmel mengklaim sekitar 100000 (satu lakh) siklus tulis per sel. Jika suhu ruangan Anda lebih rendah, semakin besar umur EEPROM.

Harap dicatat bahwa membaca data dari EEPROM tidak mempengaruhi umur secara signifikan.

Ada IC EEPROM eksternal yang dapat dihubungkan dengan Arduino dengan mudah dengan kapasitas memori mulai dari 8 KB, 128KB, 256 KB dll dengan masa pakai sekitar 1 juta siklus tulis per sel.

Itu menyimpulkan EEPROM, sekarang Anda akan mendapatkan pengetahuan teoretis yang cukup tentang EEPROM.

Pada bagian berikut kita akan belajar bagaimana menguji EEPROM di arduino secara praktis.

Cara Menguji EEPROM di Arduino

Untuk mengimplementasikan ini, yang Anda butuhkan hanyalah kabel USB dan papan Arduino Uno, Anda siap untuk pergi.

Dari penjelasan di atas kami memahami bahwa EEPROM memiliki Alamat tempat kami menyimpan data kami. Kami dapat menyimpan 0 hingga 1023 lokasi di Arduino Uno. Setiap lokasi dapat menampung 8-bit atau satu byte.

Dalam contoh ini kita akan menyimpan data di sebuah alamat. Untuk mengurangi kompleksitas program dan membuat program sesingkat mungkin, kita akan menyimpan bilangan bulat satu digit (0 hingga 9) pada alamat dari 0 hingga 9.

Kode Program # 1

Sekarang, unggah kodenya ke Arduino:
//------------------Program Developed by R.GIRISH-------------------//
#include
int inputAddress = 0
int inputValue = 0
int ReadData = 0
boolean Readadd = true
boolean Readval = true
void setup()
{
Serial.begin(9600)
Serial.println('Enter the address (0 to 9)')
Serial.println('')
while(Readadd)
{
inputAddress = Serial.read()
if(inputAddress > 0)
{
inputAddress = inputAddress - 48
Readadd = false
}
}
Serial.print('You have selected Address: ')
Serial.println(inputAddress)
Serial.println('')
delay(2000)
Serial.println('Enter the value to be stored (0 to 9)')
Serial.println('')
while(Readval)
{
inputValue = Serial.read()
if(inputValue > 0)
{
inputValue = inputValue - 48
Readval = false
}
}
Serial.print('The value you entered is: ')
Serial.println(inputValue)
Serial.println('')
delay(2000)
Serial.print('It will be stored in Address: ')
Serial.println(inputAddress)
Serial.println('')
delay(2000)
Serial.println('Writing on EEPROM.....')
Serial.println('')
EEPROM.write(inputAddress, inputValue)
delay(2000)
Serial.println('Value stored successfully!!!')
Serial.println('')
delay(2000)
Serial.println('Reading from EEPROM....')
delay(2000)
ReadData = EEPROM.read(inputAddress)
Serial.println('')
Serial.print('The value read from Address ')
Serial.print(inputAddress)
Serial.print(' is: ')
Serial.println(ReadData)
Serial.println('')
delay(1000)
Serial.println('Done!!!')
}
void loop()
{
// DO nothing here.
}
//------------------Program Developed by R.GIRISH-------------------//

KELUARAN:

Setelah kode diunggah, buka monitor serial.

Ini akan meminta Anda memasukkan alamat mulai dari 0 hingga 9. Dari output di atas, saya telah memasukkan alamat 3. Jadi, saya akan menyimpan nilai integer di lokasi (alamat) 3.

Sekarang, Anda akan diminta untuk memasukkan satu digit nilai integer mulai dari 0 hingga 9. Dari output di atas, saya telah memasukkan nilai 5.

Jadi, sekarang nilai 5 akan disimpan di lokasi alamat 3.

Setelah Anda memasukkan nilainya, itu akan menulis nilainya di EEPROM.

Ini akan menunjukkan pesan sukses, yang berarti nilainya disimpan.

Setelah beberapa detik itu akan membaca nilai yang disimpan di alamat komentar dan itu akan menunjukkan nilai pada monitor serial.

Sebagai kesimpulan, kami telah menulis dan membaca nilai-nilai dari EEPROM mikrokontroler Arduino.

Sekarang, kita akan menggunakan EEPROM untuk menyimpan kata sandi.

Kami akan memasukkan 6 digit nomor (tidak kurang atau tidak lebih) kata sandi, itu akan disimpan di 6 alamat berbeda (setiap alamat untuk setiap digit) dan satu alamat tambahan untuk menyimpan '1' atau '0'.

Setelah Anda memasukkan kata sandi, alamat tambahan akan menyimpan nilai '1' yang menunjukkan bahwa kata sandi telah disetel dan program akan meminta Anda untuk memasukkan kata sandi untuk menyalakan LED.

Jika nilai alamat tambahan yang disimpan adalah '0' atau ada nilai lain, itu akan meminta Anda untuk membuat kata sandi 6 digit baru.

Dengan metode di atas, program dapat mengidentifikasi apakah Anda telah menyetel kata sandi atau perlu membuat kata sandi baru.

Jika kata sandi yang dimasukkan benar, LED bawaan pada pin # 13 menyala, jika kata sandi yang dimasukkan salah, LED tidak akan menyala dan monitor serial akan menanyakan bahwa kata sandi Anda salah.

Kode Program # 2

Sekarang unggah kode:
//------------------Program Developed by R.GIRISH---------------//
#include
int passExistAdd = 200
const int LED = 13
int inputAddress = 0
int word1 = 0
int word2 = 0
int word3 = 0
int word4 = 0
int word5 = 0
int word6 = 0
int wordAddress1 = 0
int wordAddress2 = 1
int wordAddress3 = 2
int wordAddress4 = 3
int wordAddress5 = 4
int wordAddress6 = 5
int passwordExist = 0
boolean ReadVal1 = true
boolean ReadVal2 = true
boolean ReadVal3 = true
boolean ReadVal4 = true
boolean ReadVal5 = true
boolean ReadVal6 = true
int checkWord1 = 0
int checkWord2 = 0
int checkWord3 = 0
int checkWord4 = 0
int checkWord5 = 0
int checkWord6 = 0
void setup()
{
Serial.begin(9600)
pinMode(LED, OUTPUT)
digitalWrite(LED, LOW)
passwordExist = EEPROM.read(passExistAdd)
if(passwordExist != 1)
{
Serial.println('Enter a new 6 number password:')
while(ReadVal1)
{
word1 = Serial.read()
if(word1 > 0)
{
word1 = word1 - 48
ReadVal1 = false
}
}
while(ReadVal2)
{
word2 = Serial.read()
if(word2 > 0)
{
word2 = word2 - 48
ReadVal2 = false
}
}
while(ReadVal3)
{
word3 = Serial.read()
if(word3 > 0)
{
word3 = word3 - 48
ReadVal3 = false
}
}
while(ReadVal4)
{
word4 = Serial.read()
if(word4 > 0)
{
word4 = word4 - 48
ReadVal4 = false
}
}
while(ReadVal5)
{
word5 = Serial.read()
if(word5 > 0)
{
word5 = word5 - 48
ReadVal5 = false
}
}
while(ReadVal6)
{
word6 = Serial.read()
if(word6 > 0)
{
word6 = word6 - 48
ReadVal6 = false
}
}
Serial.println('')
Serial.print(word1)
Serial.print(word2)
Serial.print(word3)
Serial.print(word4)
Serial.print(word5)
Serial.print(word6)
EEPROM.write(wordAddress1, word1)
EEPROM.write(wordAddress2, word2)
EEPROM.write(wordAddress3, word3)
EEPROM.write(wordAddress4, word4)
EEPROM.write(wordAddress5, word5)
EEPROM.write(wordAddress6, word6)
EEPROM.write(passExistAdd,1)
Serial.println(' Password saved Sucessfully!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
if(passwordExist == 1)
{
Serial.println('')
Serial.println('Please enter the 6 digit number password:')
while(ReadVal1)
{
word1 = Serial.read()
if(word1 > 0)
{
word1 = word1 - 48
ReadVal1 = false
}
}
while(ReadVal2)
{
word2 = Serial.read()
if(word2 > 0)
{
word2 = word2 - 48
ReadVal2 = false
}
}
while(ReadVal3)
{
word3 = Serial.read()
if(word3 > 0)
{
word3 = word3 - 48
ReadVal3 = false
}
}
while(ReadVal4)
{
word4 = Serial.read()
if(word4 > 0)
{
word4 = word4 - 48
ReadVal4 = false
}
}
while(ReadVal5)
{
word5 = Serial.read()
if(word5 > 0)
{
word5 = word5 - 48
ReadVal5 = false
}
}
while(ReadVal6)
{
word6 = Serial.read()
if(word6 > 0)
{
word6 = word6 - 48
ReadVal6 = false
}
}
checkWord1 = EEPROM.read(wordAddress1)
if(checkWord1 != word1)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord2 = EEPROM.read(wordAddress2)
if(checkWord2 != word2)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord3 = EEPROM.read(wordAddress3)
if(checkWord3 != word3)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord4 = EEPROM.read(wordAddress4)
if(checkWord4 != word4)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord5 = EEPROM.read(wordAddress5)
if(checkWord5 != word5)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord6 = EEPROM.read(wordAddress6)
if(checkWord6 != word6)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
digitalWrite(LED, HIGH)
Serial.println('')
Serial.println('LED is ON')
Serial.println('')
Serial.println('Press Reset Button.')
}
}
void loop()
{
}
//------------------Program Developed by R.GIRISH---------------//

KELUARAN:

Buka monitor serial ini akan meminta Anda untuk membuat kata sandi 6 digit angka.

Masukkan 6 digit kata sandi dan catat dan tekan enter. Sekarang kata sandi telah disimpan.

Anda dapat menekan tombol reset atau mencabut kabel USB dari PC, yang membuat pasokan ke papan Arduino terputus.

Sekarang, sambungkan kembali kabel USB, buka monitor serial, yang akan meminta Anda memasukkan sandi 6 digit yang disimpan.

Masukkan kata sandi yang benar LED akan menyala.

Jika Anda ingin mengubah kata sandi, ubah digit dari kode:

int passExistAdd = 200

Baris di atas adalah alamat tambahan yang telah kita bahas sebelumnya. Ubah di mana saja dari 6 hingga 1023. 0 hingga 5 alamat dicadangkan untuk menyimpan 6 digit kata sandi.

Mengubah alamat tambahan ini akan menipu program bahwa kata sandi belum dibuat dan meminta Anda untuk membuat kata sandi 6 digit baru.

Jika Anda memiliki pertanyaan tentang EEPROM ini dalam tutorial Arduino, silakan ungkapkan di komentar, Anda dapat menerima balasan cepat.




Sepasang: Catu Daya Pemutus Arus Lebih Menggunakan Arduino Berikutnya: Mobil Robot yang Dikendalikan Ponsel Menggunakan Modul DTMF