Pengenalan EEPROM di Arduino

Cuba Instrumen Kami Untuk Menghapuskan Masalah





Dalam catatan ini kita akan memahami apa itu EEPROM, bagaimana data disimpan di dalam EEPROM Papan Arduino Mikrokontroler dan juga secara praktikal menguji cara menulis dan membaca data di EEPROM dengan beberapa contoh.

Pengenalan EEPROM di Arduino

Mengapa EEPROM?

Sebelum kita bertanya apa itu EEPROM? Adalah sangat penting untuk mengetahui mengapa EEPROM digunakan untuk penyimpanan di tempat pertama. Oleh itu, kami mendapat idea yang jelas mengenai EEPROM.



Terdapat banyak peranti storan yang tersedia hari ini, mulai dari peranti penyimpanan magnetik seperti cakera keras komputer, perakam kaset sekolah lama, media penyimpanan optik seperti CD, DVD, cakera Blu-ray dan memori keadaan pepejal seperti SSD (Solid State Drive) untuk komputer dan kad Memori dll.

Ini adalah alat simpanan besar-besaran yang dapat menyimpan data seperti muzik, video, dokumen dll dari serendah Kilobyte hingga multi-Terabyte. Ini adalah memori yang tidak mudah berubah, yang bermaksud, data dapat disimpan bahkan setelah daya terputus ke media penyimpanan.



Peranti yang menyampaikan muzik yang menenangkan telinga atau video yang menjolok mata seperti komputer atau telefon pintar menyimpan beberapa data kritikal seperti data konfigurasi, data but, kata laluan, data bio-metrik, data log masuk dll.

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

Data ini hanya memerlukan beberapa bait hingga beberapa Megabait, menghubungkan peranti storan konvensional seperti media magnetik atau optik ke cip pemproses tidak dapat dilaksanakan secara ekonomi dan fizikal.

Jadi, data kritikal ini disimpan dalam cip pemprosesan itu sendiri.

Arduino tidak berbeza dengan komputer atau telefon pintar. Terdapat beberapa keadaan di mana kita perlu menyimpan beberapa data kritikal yang tidak boleh dipadamkan walaupun setelah kuasa terputus, misalnya data sensor.

Sekarang, anda pasti mendapat idea mengapa kita memerlukan EEPROM pada cip mikropemproses dan mikrokontroler.

Apa itu EEPROM?

EEPROM bermaksud Memori Baca Sahaja yang Boleh Diprogramkan dengan Pemadaman Elektrik. Ia juga merupakan memori yang tidak mudah berubah yang dapat dibaca dan ditulis byte bijak.

Membaca dan menulis tahap byte menjadikannya berbeza dari ingatan semikonduktor yang lain. Contohnya memori kilat: membaca, menulis dan memadam data dengan cara blok.

Blok dapat berukuran beberapa ratus hingga ribuan bit, yang layak untuk penyimpanan massal, tetapi tidak untuk operasi 'Memori Hanya Baca' pada mikropemproses dan mikrokontroler, yang perlu mengakses data byte byte.

Pada papan Arduino Uno (ATmega328P) ia mempunyai 1KB atau 1024 byte EEPROM. Setiap bait dapat diakses secara berasingan, setiap bait mempunyai alamat antara 0 hingga 1023 (jumlahnya 1024).

Alamat (0-1023) adalah lokasi memori di mana data kami akan disimpan.

Pada setiap alamat anda boleh menyimpan data 8-bit, angka berangka dari 0 hingga 255. Data kami disimpan dalam bentuk binari, jadi jika kami menulis nombor 255 ke dalam EEPROM, ia akan menyimpan digit sebagai 11111111 dalam alamat dan jika kami menyimpan sifar, ia akan menyimpan sebanyak 00000000.

Anda juga boleh menyimpan teks, watak khas, watak alfanumerik dll dengan menulis program yang sesuai.

Perincian pembinaan dan kerja tidak dibincangkan di sini yang mungkin menjadikan artikel ini panjang dan mungkin membuat anda mengantuk. Pergi ke YouTube atau Google, ada artikel / video menarik mengenai konstruktif dan kerja EEPORM.

Jangan mengelirukan EEPROM dengan EPROM:

Ringkasnya, EPROM adalah Memori Baca Sahaja yang Dapat Diprogramkan secara Elektrik yang bermaksud dapat diprogramkan (menyimpan memori) secara elektrik, tetapi tidak dapat dipadamkan secara elektrik.

Ia menggunakan kilauan cahaya Ultraviolet yang terang di atas cip penyimpanan yang menghapus data yang disimpan. EEPROM datang sebagai pengganti EPROM dan sekarang hampir tidak digunakan dalam mana-mana peranti elektronik.

Jangan mengelirukan Memori Flash untuk EEPROM:

Memori kilat adalah memori semikonduktor dan tidak mudah menguap yang juga boleh dipadamkan secara elektrik dan boleh diprogramkan secara elektrik, sebenarnya memori kilat berasal dari EEPROM. Tetapi akses memori yang bijak atau dengan kata lain, cara ingatan diakses dan pembinaannya berbeza dengan EEPROM.

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

Jangka hayat EEPROM:

Seperti media storan elektronik yang lain, EEPROM juga mempunyai kitaran membaca, menulis, menghapus. Tetapi masalahnya ialah ia mempunyai jangka hayat paling sedikit dibandingkan dengan memori semikonduktor jenis lain.

Pada EEPROM Arduino, Atmel menuntut sekitar 100000 (satu 100,000) kitaran tulis setiap sel. Sekiranya suhu bilik anda lebih rendah, jangka hayat EEPROM akan lebih tinggi.

Harap maklum bahawa membaca data dari EEPROM tidak mempengaruhi jangka hayat dengan ketara.

Terdapat IC EEPROM luaran yang dapat dihubungkan Arduino dengan mudah dengan kapasiti memori antara 8 KB, 128KB, 256 KB dan lain-lain dengan jangka hayat sekitar 1 juta kitaran tulis per sel.

Ini menyimpulkan EEPROM, sekarang anda pasti memperoleh pengetahuan teori yang cukup mengenai EEPROM.

Pada bahagian berikut kita akan belajar bagaimana menguji EEPROM pada arduino secara praktikal.

Cara Menguji EEPROM di Arduino

Untuk melaksanakannya, yang anda perlukan hanyalah kabel USB dan papan Arduino Uno, anda sudah bersedia.

Dari penjelasan di atas, kami memahami bahawa EEPROM mempunyai Alamat tempat kami menyimpan data kami. Kami dapat menyimpan 0 hingga 1023 lokasi di Arduino Uno. Setiap lokasi boleh memuat 8 bit atau satu bait.

Dalam contoh ini kita akan menyimpan data dalam alamat. Untuk mengurangkan kerumitan program dan membuat program sesingkat mungkin, kami akan menyimpan bilangan bulat satu digit (0 hingga 9) pada alamat dari 0 hingga 9.

Kod Program # 1

Sekarang, muat naik kod 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-------------------//

PENGELUARAN:

Setelah kod dimuat naik, buka monitor bersiri.

Ia akan meminta anda memasukkan alamat antara 0 hingga 9. Dari output di atas, saya telah memasukkan alamat 3. Oleh itu, saya akan menyimpan nilai integer di lokasi (alamat) 3.

Sekarang, ia akan meminta anda memasukkan nilai integer satu digit bermula dari 0 hingga 9. Dari output di atas, saya telah memasukkan nilai 5.

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

Sebaik sahaja anda memasukkan nilainya, ia akan menuliskan nilai di EEPROM.

Ini akan menunjukkan mesej kejayaan, yang bermaksud nilainya disimpan.

Selepas beberapa saat, ia akan membaca nilai yang tersimpan di alamat yang dikomentari dan akan menunjukkan nilai pada monitor bersiri.

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

Sekarang, kami akan menggunakan EEPROM untuk menyimpan kata laluan.

Kami akan memasukkan kata laluan nombor 6 digit (tidak kurang atau tidak lebih), ia akan disimpan dalam 6 alamat yang berbeza (setiap alamat untuk setiap digit) dan satu alamat tambahan untuk menyimpan '1' atau '0'.

Sebaik sahaja anda memasukkan kata laluan, alamat tambahan akan menyimpan nilai “1” yang menunjukkan bahawa kata laluan ditetapkan dan program akan meminta anda memasukkan kata laluan untuk menyalakan LED.

Sekiranya nilai tambahan alamat yang disimpan adalah '0' atau ada nilai lain, ia akan meminta anda membuat kata laluan 6 digit baru.

Dengan kaedah di atas, program dapat mengenal pasti sama ada anda sudah menetapkan kata laluan atau perlu membuat kata laluan baru.

Sekiranya kata laluan yang dimasukkan betul LED bina pada pin # 13 menyala, jika kata laluan yang dimasukkan salah, LED tidak akan menyala dan monitor bersiri akan meminta kata laluan anda salah.

Kod Program # 2

Sekarang muat naik kod:
//------------------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---------------//

PENGELUARAN:

Buka monitor bersiri ia akan meminta anda membuat kata laluan nombor 6 digit.

Masukkan sebarang kata laluan 6 digit dan catatnya dan tekan enter. Sekarang kata laluan telah disimpan.

Anda boleh menekan butang reset atau memutuskan kabel USB dari PC, yang menyebabkan bekalan ke papan Arduino terganggu.

Sekarang, sambungkan semula kabel USB, buka monitor bersiri, yang akan meminta anda memasukkan kata laluan 6 digit yang disimpan.

Masukkan kata laluan yang betul LED akan menyala.

Sekiranya anda ingin menukar kata laluan, ubah digit dari kod:

int passExistAdd = 200

Garis di atas adalah alamat tambahan yang telah kita bincangkan sebelumnya. Tukar di mana sahaja dari 6 hingga 1023. 0 hingga 5 alamat dikhaskan untuk menyimpan kata laluan 6 digit.

Mengubah alamat tambahan ini akan memperdayakan program bahawa kata laluan belum dibuat dan meminta anda membuat kata laluan 6 digit baru.

Sekiranya anda mempunyai pertanyaan mengenai EEPROM dalam tutorial Arduino ini, sila nyatakan di komen, anda mungkin akan mendapat balasan cepat.




Sebelumnya: Bekalan Kuasa Terputus Semasa Menggunakan Arduino Seterusnya: Kereta Robot Dikawal Telefon Bimbit Menggunakan Modul DTMF