Arduino में EEPROM का परिचय

समस्याओं को खत्म करने के लिए हमारे साधन का प्रयास करें





इस पोस्ट में हम यह समझने जा रहे हैं कि EEPROM क्या है, EEPROM में निर्मित डेटा को कैसे संग्रहीत किया जाता है Arduino बोर्ड का माइक्रोकंट्रोलर और व्यावहारिक रूप से यह भी परीक्षण करते हैं कि EEPROM पर डेटा कैसे लिखें और पढ़ें।

Arduino में EEPROM का परिचय

क्यों EEPROM?

इससे पहले कि हम पूछें EEPROM क्या है? यह जानना बहुत महत्वपूर्ण है कि EEPROM का उपयोग पहली जगह पर भंडारण के लिए क्यों किया जाता है। ताकि, हम EEPROMs पर स्पष्ट विचार प्राप्त करें।



इन दिनों बहुत सारे स्टोरेज डिवाइस उपलब्ध हैं, जिसमें कंप्यूटर हार्ड डिस्क, पुराने स्कूल कैसेट टेप रिकॉर्डर, ऑप्टिकल स्टोरेज माध्यम जैसे सीडी, डीवीडी, ब्लू-रे डिस्क और सॉलिड स्टेट मेमोरी जैसे एसएसडी (सॉलिड स्टेट ड्राइव) के लिए चुंबकीय स्टोरेज डिवाइस हैं। कंप्यूटर और मेमोरी कार्ड आदि।

ये मास स्टोरेज डिवाइस होते हैं जो डेटा जैसे म्यूजिक, वीडियो, डॉक्यूमेंट आदि को कम से कम कुछ किलोबाइट्स से मल्टी-टेराबाइट्स में स्टोर कर सकते हैं। ये गैर-वाष्पशील मेमोरी हैं, जिसका मतलब है, स्टोरेज माध्यम के पावर कट-ऑफ होने के बाद भी डेटा को बरकरार रखा जा सकता है।



वह उपकरण जो कान सुखदायक संगीत या आंखें पॉपिंग वीडियो जैसे कंप्यूटर या स्मार्टफोन में कुछ महत्वपूर्ण डेटा संग्रहीत करता है जैसे कॉन्फ़िगरेशन डेटा, बूट डेटा, पासवर्ड, जैव-मीट्रिक डेटा, लॉगिन डेटा आदि।

इन उल्लिखित डेटा को सुरक्षा कारणों से बड़े पैमाने पर भंडारण उपकरणों में संग्रहीत नहीं किया जा सकता है और इन आंकड़ों को उपयोगकर्ताओं द्वारा अनायास ही संशोधित किया जा सकता है जिससे डिवाइस की खराबी हो सकती है।

ये डेटा कुछ मेगाबाइट्स के लिए केवल कुछ बाइट्स लेता है, एक पारंपरिक स्टोरेज डिवाइस जैसे चुंबकीय या ऑप्टिकल माध्यम से प्रोसेसर चिप्स को कनेक्ट करना आर्थिक और शारीरिक रूप से संभव नहीं है।

तो, ये महत्वपूर्ण डेटा प्रसंस्करण चिप्स में ही संग्रहीत होते हैं।

Arduino कंप्यूटर या स्मार्टफ़ोन से अलग नहीं है। ऐसी कई परिस्थितियाँ हैं जहाँ हमें कुछ महत्वपूर्ण डेटा को संग्रहित करने की आवश्यकता होती है, जो कि बिजली कट जाने के बाद भी मिट नहीं जाना चाहिए, उदाहरण के लिए सेंसर डेटा।

अब तक, आपको एक विचार मिल गया होगा कि हमें माइक्रोप्रोसेसरों और माइक्रोकंट्रोलर चिप्स पर EEPROM की आवश्यकता क्यों है।

EEPROM क्या है?

EEPROM का मतलब है इरेक्टेबल इरेज़ेबल प्रोग्रामेबल रीड ओनली मेमोरी। यह एक गैर-वाष्पशील मेमोरी भी है जिसे पढ़ा और लिखा जा सकता है बाइट वार।

बाइट-स्तर को पढ़ना और लिखना इसे अन्य अर्धचालक यादों से अलग बनाता है। उदाहरण के लिए फ्लैश मेमोरी: ब्लॉक-वार तरीके से डेटा पढ़ना, लिखना और मिटाना।

एक ब्लॉक कुछ सैकड़ों से हजारों बिट्स हो सकता है, जो बड़े पैमाने पर भंडारण के लिए संभव है, लेकिन माइक्रोप्रोसेसरों और माइक्रोकंट्रोलरों में 'रीड ओनली मेमोरी' संचालन के लिए नहीं, जो बाइट डेटा द्वारा बाइट को एक्सेस करने की आवश्यकता है।

Arduino Uno बोर्ड (ATmega328P) पर EEPROM के 1KB या 1024 बाइट्स हैं। प्रत्येक बाइट को व्यक्तिगत रूप से एक्सेस किया जा सकता है, प्रत्येक बाइट का पता 0 से लेकर 1023 तक है (जो कुल 1024 है)।

पता (0-1023) एक मेमोरी लोकेशन है जहां हमारा डेटा स्टोर किया जाएगा।

प्रत्येक पते पर आप 0 से 255 तक 8-बिट डेटा, संख्यात्मक अंक स्टोर कर सकते हैं। हमारा डेटा बाइनरी फॉर्म में संग्रहीत है, इसलिए यदि हम ईईपीआरओ में नंबर 255 लिखते हैं तो यह एक पते में 11111111 के रूप में अंक को संग्रहीत करेगा और यदि हम शून्य को स्टोर करते हैं, यह 00000000 के रूप में संग्रहित होगा।

आप उपयुक्त कार्यक्रम लिखकर पाठ, विशेष वर्ण, अल्फ़ान्यूमेरिक वर्ण आदि भी संग्रहीत कर सकते हैं।

निर्माण के विवरण और कार्य की चर्चा यहाँ नहीं की गई है जो इस लेख को लंबा बना सकते हैं और हम आपको नींद में डाल सकते हैं। YouTube या Google की ओर जाएं, EEPORM के निर्माण और काम के बारे में दिलचस्प लेख / वीडियो हैं।

EPROM के साथ EEPROM को भ्रमित न करें:

संक्षेप में, EPROM एक इलेक्ट्रोनिक रूप से प्रोग्रामेबल रीड ओनली मेमोरी है जिसका अर्थ यह प्रोग्राम किया जा सकता है (स्टोर मेमोरी) विद्युत रूप से, लेकिन इसे विद्युत रूप से मिटाया नहीं जा सकता है।

यह भंडारण चिप के ऊपर पराबैंगनी प्रकाश के उज्ज्वल चमक का उपयोग करता है जो संग्रहीत डेटा को मिटा देता है। EEPROM EPROM के प्रतिस्थापन के रूप में आया और अब शायद ही किसी इलेक्ट्रॉनिक उपकरणों में उपयोग किया जाता है।

EEPROM के लिए फ्लैश मेमोरी को भ्रमित न करें:

एक फ्लैश मेमोरी एक अर्धचालक और गैर-वाष्पशील मेमोरी है जो विद्युत रूप से मिटाने योग्य और विद्युत रूप से प्रोग्राम करने योग्य है, वास्तव में फ्लैश मेमोरी EEPROM से ली गई है। लेकिन ब्लॉक-वार मेमोरी एक्सेस या दूसरे शब्दों में, मेमोरी का तरीका एक्सेस किया गया है और इसका निर्माण EEPROM से अलग है।

Arduino Uno (ATmega328P Microcontroller) भी प्रोग्राम स्टोरेज के लिए 32KB फ्लैश मेमोरी को स्पोर्ट करता है।

EEPROM का जीवनकाल:

किसी भी अन्य इलेक्ट्रॉनिक स्टोरेज माध्यम की तरह, EEPROM में भी साइकल को पढ़ना, लिखना, मिटाना है। लेकिन समस्या यह है कि यह किसी भी अन्य प्रकार के अर्धचालक स्मृति की तुलना में कम से कम जीवनकाल है।

Arduino के EEPROM पर, Atmel ने प्रति सेल लगभग 100000 (एक लाख) लिखने का दावा किया। यदि आपके कमरे का तापमान EEPROM का जीवनकाल कम है।

कृपया ध्यान दें कि EEPROM से डेटा पढ़ना जीवनकाल को महत्वपूर्ण रूप से प्रभावित नहीं करता है।

बाह्य EEPROM IC होते हैं, जो Arduino को आसानी से 8 KB, 128KB, 256 KB आदि से लेकर लगभग 1 मिलियन प्रति चक्र लिख चक्र के जीवन काल के साथ बाधित कर सकते हैं।

यह EEPROM का निष्कर्ष है, अब आपको EEPROM के बारे में पर्याप्त सैद्धांतिक ज्ञान प्राप्त होगा।

निम्नलिखित अनुभाग में हम सीखेंगे कि कैसे Arduino पर EEPROM का व्यावहारिक रूप से परीक्षण किया जाए।

Arduino में EEPROM का परीक्षण कैसे करें

इसे लागू करने के लिए, आपको USB केबल और Arduino Uno बोर्ड की आवश्यकता है, आप जाने के लिए तैयार हैं।

उपरोक्त स्पष्टीकरण से हमने समझा कि EEPROM का पता है जहां हम अपना डेटा संग्रहीत करते हैं। हम Arduino Uno में 0 से 1023 स्थानों को संग्रहीत कर सकते हैं। प्रत्येक स्थान 8-बिट या एक बाइट को समायोजित कर सकता है।

इस उदाहरण में हम एक पते में डेटा स्टोर करने जा रहे हैं। कार्यक्रम की जटिलता को कम करने और कार्यक्रम को यथासंभव छोटा रखने के लिए, हम 0 से 9 के पते पर एकल अंक पूर्णांक (0 से 9) स्टोर करने जा रहे हैं।

प्रोग्राम कोड # 1

अब, कोड को 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-------------------//

OUTPUT:

कोड अपलोड होने के बाद, सीरियल मॉनिटर खोलें।

यह आपको 0 से 9. तक के पते को दर्ज करने के लिए कहेगा। उपरोक्त आउटपुट से, मैंने पता 3 दर्ज किया है। इसलिए, मैं स्थान (पता) 3 में एक पूर्णांक मान संग्रहीत करूंगा।

अब, यह आपको 0 से 9. तक एकल अंक पूर्णांक मान दर्ज करने के लिए संकेत देगा। उपरोक्त आउटपुट से, मैंने मान 5 दर्ज किया है।

तो, अब मान 5 पता स्थान 3 में संग्रहीत किया जाएगा।

एक बार जब आप मूल्य दर्ज करते हैं, तो यह EEPROM पर मूल्य लिख देगा।

यह एक सफलता संदेश दिखाएगा, जिसका अर्थ है कि मूल्य संग्रहीत है।

कुछ सेकंड के बाद यह उस मूल्य को पढ़ेगा जो टिप्पणी पते पर संग्रहीत है और यह धारावाहिक मॉनिटर पर मूल्य दिखाएगा।

निष्कर्ष में, हमने Arduino के माइक्रोकंट्रोलर के EEPROM से मूल्यों को लिखा और पढ़ा है।

अब, हम पासवर्ड स्टोर करने के लिए EEPROM का उपयोग करने जा रहे हैं।

हम एक 6 अंकों की संख्या (कोई कम या अधिक नहीं) पासवर्ड दर्ज करेंगे, इसे 6 अलग-अलग पते (प्रत्येक अंक के लिए प्रत्येक पते) और '1' या '0' संग्रहीत करने के लिए एक अतिरिक्त पते में संग्रहीत किया जाएगा।

एक बार जब आप पासवर्ड दर्ज करते हैं, तो अतिरिक्त पता '1' मान को दर्शाएगा कि पासवर्ड सेट है और प्रोग्राम आपको एलईडी चालू करने के लिए पासवर्ड दर्ज करने के लिए कहेगा।

यदि अतिरिक्त पता संग्रहीत मान '0' या कोई अन्य मान मौजूद है, तो यह आपको नया 6 अंकों का पासवर्ड बनाने के लिए कहेगा।

उपरोक्त विधि से, प्रोग्राम यह पहचान सकता है कि क्या आपने पहले ही पासवर्ड सेट कर लिया है या नया पासवर्ड बनाने की आवश्यकता है।

यदि दर्ज पासवर्ड पिन में एलईडी # 13 चमक में बिल्ड को सही करता है, यदि दर्ज पासवर्ड गलत है, तो एलईडी चमक नहीं है और सीरियल मॉनिटर यह संकेत देगा कि आपका पासवर्ड गलत है।

प्रोग्राम कोड # 2

अब कोड अपलोड करें:
//------------------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---------------//

OUTPUT:

सीरियल मॉनिटर खोलें यह आपको 6 अंकों की संख्या का पासवर्ड बनाने के लिए प्रेरित करेगा।

कोई भी 6 अंकों का पासवर्ड डालें और उसे नोट करें और एंटर दबाएं। अब पासवर्ड को स्टोर कर लिया गया है।

आप या तो रीसेट बटन को दबा सकते हैं या पीसी से यूएसबी केबल को डिस्कनेक्ट कर सकते हैं, जो कि Arduino बोर्ड को आपूर्ति बाधित करता है।

अब, यूएसबी केबल को फिर से कनेक्ट करें, सीरियल मॉनिटर खोलें, जो आपको सहेजे गए 6 अंकों के पासवर्ड को दर्ज करने के लिए संकेत देगा।

सही पासवर्ड दर्ज करें एलईडी चमक जाएगी।

यदि आप पासवर्ड बदलना चाहते हैं तो कोड से अंक बदलें:

int passExistAdd = 200

उपरोक्त पंक्ति वह अतिरिक्त पता है जिसके बारे में हमने पहले चर्चा की थी। 6 से 1023 तक कहीं भी बदलें। 6 अंकों के पासवर्ड को संग्रहीत करने के लिए 0 से 5 पते आरक्षित हैं।

इस अतिरिक्त पते को बदलने से उस प्रोग्राम को बेवकूफ बनाया जाएगा जो पासवर्ड अभी तक नहीं बना है और आपको नया 6 अंकों का पासवर्ड बनाने के लिए संकेत देता है।

यदि आपके पास Arduino ट्यूटोरियल में इस EEPROM के बारे में कोई प्रश्न हैं, तो कृपया टिप्पणियों में व्यक्त करें, आपको त्वरित उत्तर मिल सकता है।




पिछला: Arduino का उपयोग करके वर्तमान कट-ऑफ बिजली की आपूर्ति अगला: DTMF मॉड्यूल का उपयोग करते हुए मोबाइल फोन नियंत्रित रोबोट कार