Arduino'da EEPROM'a Giriş

Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin





Bu yazıda, EEPROM'un ne olduğunu, verilerin EEPROM'da yerleşik olarak nasıl saklandığını anlayacağız. Arduino anakartları Mikrodenetleyici ve ayrıca birkaç örnekle EEPROM'da verilerin nasıl yazılacağını ve okunacağını pratik olarak test edin.

Arduino

Neden EEPROM?

EEPROM'un ne olduğunu sormadan önce? EEPROM'un neden ilk etapta depolama için kullanıldığını bilmek çok önemlidir. Böylece, EEPROM'lar hakkında net bir fikir edindik.



Günümüzde bilgisayar sabit diskleri gibi manyetik depolama cihazlarından, eski tip kaset kayıt cihazlarından, CD'ler, DVD'ler, Blu-ray diskler gibi optik depolama ortamlarından ve SSD (Katı Hal Sürücüsü) gibi katı hal bellekten çok sayıda depolama cihazı mevcuttur. bilgisayarlar ve Hafıza kartları vb.

Bunlar, birkaç Kilobayttan çok Terabayta kadar müzik, video, belge vb. Verileri depolayabilen yığın depolama aygıtlarıdır. Bunlar uçucu olmayan belleklerdir, yani veri depolama ortamına giden güç kesildikten sonra bile saklanabilir.



Bilgisayar veya akıllı telefon gibi kulak dinlendirici müzik veya göz kamaştırıcı videolar sunan cihaz, yapılandırma verileri, önyükleme verileri, şifreler, biyo-metrik veriler, giriş verileri vb. Gibi bazı kritik verileri depolar.

Bahsedilen bu veriler, güvenlik nedeniyle yığın depolama cihazlarında saklanamaz ve ayrıca bu veriler kullanıcılar tarafından istenmeden değiştirilebilir ve bu da cihazın arızalanmasına neden olabilir.

Bu veriler yalnızca birkaç bayt ila birkaç Megabayt alır, manyetik veya optik ortam gibi geleneksel bir depolama aygıtını işlemci yongalarına bağlamak ekonomik ve fiziksel olarak uygulanabilir değildir.

Dolayısıyla, bu kritik veriler işlem yongalarının kendisinde saklanır.

Arduino'nun bilgisayardan veya akıllı telefonlardan farkı yoktur. Sensör verileri gibi, güç kesildikten sonra bile silinmemesi gereken bazı kritik verileri saklamamız gereken birkaç durum vardır.

Şimdiye kadar, mikroişlemcilerde ve mikro denetleyici çiplerinde neden EEPROM'a ihtiyacımız olduğuna dair bir fikriniz olacaktı.

EEPROM nedir?

EEPROM, Elektrikle Silinebilir Programlanabilir Salt Okunur Bellek anlamına gelir. Ayrıca okunabilen ve yazılabilen uçucu olmayan bir bellektir. bayt bilge.

Bayt düzeyinde okuma ve yazma, onu diğer yarı iletken belleklerden farklı kılar. Örneğin flash bellek: verileri blok halinde okuma, yazma ve silme.

Bir blok, yığın depolama için uygun olan ancak bayt verilere erişmesi gereken mikro işlemcilerdeki ve mikro denetleyicilerdeki 'Salt Okunur Bellek' işlemleri için uygun olmayan birkaç yüz ila binlerce bit olabilir.

Arduino Uno kartında (ATmega328P) 1KB veya 1024 bayt EEPROM kartında bulunur. Her bayta ayrı ayrı erişilebilir, her baytın 0 ile 1023 arasında değişen bir adresi vardır (toplam 1024).

Adres (0-1023), verilerimizin depolanacağı bir hafıza konumudur.

Her adreste 8 bitlik veri, 0'dan 255'e kadar sayısal rakamlar saklayabilirsiniz. Verilerimiz ikili biçimde saklanır, bu nedenle EEPROM'a 255 sayısını yazarsak, rakamı 11111111 olarak bir adreste depolar ve sıfırı saklarsak, 00000000 olarak saklanacaktır.

Ayrıca uygun programı yazarak metni, özel karakterleri, alfasayısal karakterleri vb. Saklayabilirsiniz.

Yapım detayları ve çalışma burada tartışılmamaktadır, bu da bu makaleyi uzun sürebilir ve sizi uykulu hale getirebilir. YouTube veya Google'a gidin, EEPORM'un yapımı ve çalışmasıyla ilgili ilginç makaleler / videolar var.

EEPROM'u EPROM ile karıştırmayın:

Özetle EPROM, Elektriksel Olarak Programlanabilir Bir Salt Okunur Belleğidir, yani elektriksel olarak programlanabilir (bellek depolanabilir), ancak elektriksel olarak silinemez.

Depolanan verileri silen depolama yongasının üzerinde Ultraviyole ışığın parlak parlaklığını kullanır. EEPROM, EPROM'un yerini aldı ve artık herhangi bir elektronik cihazda neredeyse hiç kullanılmıyor.

Flash Belleği EEPROM ile karıştırmayın:

Flash bellek, aynı zamanda elektriksel olarak silinebilen ve elektriksel olarak programlanabilen yarı iletken ve uçucu olmayan bir bellektir, aslında flash bellek EEPROM'dan türetilmiştir. Ancak blok bazlı bellek erişimi veya başka bir deyişle, belleğin yoluna erişilir ve yapısı EEPROM'dan farklıdır.

Arduino Uno (ATmega328P Microcontroller) ayrıca program depolama için 32KB flash bellek kullanır.

EEPROM'un ömrü:

Diğer herhangi bir elektronik depolama ortamı gibi, EEPROM'da da sonlu okuma, yazma, silme döngüleri vardır. Ancak sorun şu ki, diğer herhangi bir yarı iletken bellek türüne kıyasla en az kullanım ömrüne sahip olmasıdır.

Arduino'nun EEPROM'unda Atmel, hücre başına yaklaşık 100000 (bir lakh) yazma döngüsü talep etti. Oda sıcaklığınız düşükse, EEPROM'un ömrü o kadar uzun olur.

Lütfen EEPROM'dan veri okumanın kullanım ömrünü önemli ölçüde etkilemediğini unutmayın.

Hücre başına yaklaşık 1 milyon yazma döngüsüne sahip 8 KB, 128KB, 256 KB vb. Bellek kapasitesi ile kolaylıkla Arduino arabirimine bağlanabilen harici EEPROM IC'ler bulunmaktadır.

Bu, EEPROM'un sonucudur, artık EEPROM'lar hakkında yeterince teorik bilgi edinmiş olacaksınız.

Aşağıdaki bölümde EEPROM'un arduino üzerinde pratik olarak nasıl test edileceğini öğreneceğiz.

Arduino'da EEPROM Nasıl Test Edilir

Bunu uygulamak için tek ihtiyacınız olan bir USB kablosu ve Arduino Uno kartıdır, gitmeye hazırsınız.

Yukarıdaki açıklamalardan, EEPROM'ların verilerimizi sakladığımız Adreslere sahip olduğunu anladık. Arduino Uno'da 0 ila 1023 lokasyon saklayabiliriz. Her konum 8 bit veya bir bayt barındırabilir.

Bu örnekte verileri bir adreste depolayacağız. Programın karmaşıklığını azaltmak ve programı olabildiğince kısa tutmak için, 0'dan 9'a kadar bir adreste tek basamaklı tamsayı (0'dan 9'a) saklayacağız.

Program Kodu # 1

Şimdi kodu Arduino'ya yükleyin:
//------------------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-------------------//

ÇIKTI:

Kod yüklendikten sonra seri monitörü açın.

Sizden 0 ile 9 arasında bir adres girmenizi isteyecektir. Yukarıdaki çıktıdan 3. adresi girdim. Bu yüzden, konum (adres) 3'te bir tamsayı değeri depolayacağım.

Şimdi, sizden 0 ile 9 arasında değişen tek haneli bir tamsayı değeri girmenizi isteyecektir. Yukarıdaki çıktıdan, 5 değerini girdim.

Böylece, şimdi 5 değeri adres konumu 3'te saklanacaktır.

Değeri girdiğinizde, değeri EEPROM'a yazacaktır.

Değerin saklandığı anlamına gelen bir başarı mesajı gösterecektir.

Birkaç saniye sonra, yorumlanmış adreste depolanan değeri okuyacak ve değeri seri monitörde gösterecektir.

Sonuç olarak, Arduino’nun mikrodenetleyicisinin EEPROM'undan değerleri yazdık ve okuduk.

Şimdi, şifreyi saklamak için EEPROM'u kullanacağız.

6 basamaklı bir sayı (daha az veya daha fazla olmayan) bir şifre gireceğiz, 6 farklı adreste (her basamak için her adres) ve '1' veya '0' saklamak için bir ek adres saklanacaktır.

Parolayı girdiğinizde, ek adres parolanın ayarlandığını gösteren “1” değerini kaydedecek ve program LED'i AÇMAK için parolayı girmenizi isteyecektir.

Ek adres saklanan değeri '0' ise veya başka herhangi bir değer mevcutsa, sizden yeni 6 haneli şifre oluşturmanızı isteyecektir.

Yukarıdaki yöntemle program, önceden bir şifre belirlemiş olup olmadığınızı veya yeni bir şifre oluşturmanız gerekip gerekmediğini belirleyebilir.

Girilen şifre doğruysa 13. pimdeki yapı LED'i yanar, girilen şifre yanlışsa LED yanmaz ve seri monitör şifrenizin yanlış olduğunu bildirir.

Program Kodu # 2

Şimdi kodu yükleyin:
//------------------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---------------//

ÇIKTI:

Seri monitörü açın, sizden 6 haneli bir şifre oluşturmanızı isteyecektir.

Herhangi bir 6 basamaklı şifre girin ve not edin ve enter tuşuna basın. Şimdi şifre saklandı.

Arduino kartına beslemeyi kesintiye uğratan sıfırlama düğmesine basabilir veya USB kablosunu bilgisayardan çıkarabilirsiniz.

Şimdi, USB kablosunu yeniden bağlayın, seri monitörü açın, bu sizden kayıtlı 6 haneli parolayı girmenizi isteyecektir.

Doğru şifreyi girin, LED yanacaktır.

Şifreyi değiştirmek istiyorsanız, koddaki rakamı değiştirin:

int passExistAdd = 200

Yukarıdaki satır, daha önce tartıştığımız ek adrestir. 6'dan 1023'e herhangi bir yerde değiştirin. 0'dan 5'e kadar adres, 6 haneli şifreyi saklamak için ayrılmıştır.

Bu ek adresi değiştirmek, programı şifrenin henüz oluşturulmamış olduğu konusunda kandıracak ve 6 haneli yeni bir şifre oluşturmanızı isteyecektir.

Arduino eğitiminde bu EEPROM ile ilgili herhangi bir sorunuz varsa, lütfen yorumlarda belirtin, hızlı bir yanıt alabilirsiniz.




Önceki: Arduino Kullanarak Aşırı Akım Kesme Güç Kaynağı Sonraki: DTMF Modülünü Kullanan Cep Telefonu Kontrollü Robot Araba