مقدمة إلى EEPROM في Arduino

جرب أداة القضاء على المشاكل





في هذا المنشور ، سوف نفهم ماهية EEPROM ، وكيف يتم تخزين البيانات على مدمج في EEPROM لوحة اردوينو وحدة تحكم دقيقة وأيضًا اختبار عملي لكيفية كتابة وقراءة البيانات على EEPROM من خلال بعض الأمثلة.

مقدمة إلى EEPROM في Arduino

لماذا إيبروم؟

قبل أن نسأل ما هو إيبروم؟ من المهم جدًا معرفة سبب استخدام EEPROM للتخزين في المقام الأول. لذلك ، لدينا فكرة واضحة عن EEPROMs.



هناك الكثير من أجهزة التخزين المتاحة هذه الأيام ، بدءًا من أجهزة التخزين المغناطيسية مثل الأقراص الصلبة للكمبيوتر ، ومسجلات أشرطة الكاسيت المدرسية القديمة ، ووسائط التخزين الضوئية مثل الأقراص المضغوطة وأقراص DVD وأقراص Blu-ray وذاكرة الحالة الصلبة مثل SSD (محرك الحالة الصلبة) لـ أجهزة الكمبيوتر وبطاقات الذاكرة إلخ.

هذه عبارة عن جهاز تخزين كبير السعة يمكنه تخزين البيانات مثل الموسيقى ومقاطع الفيديو والمستندات وما إلى ذلك من أقل من بضعة كيلوبايت إلى تيرابايت متعدد. هذه ذاكرة غير متطايرة مما يعني أنه يمكن الاحتفاظ بالبيانات حتى بعد انقطاع التيار الكهربائي عن وسيط التخزين.



يقوم الجهاز الذي يوفر موسيقى مهدئة للأذن أو مقاطع فيديو تفرقع العين مثل الكمبيوتر أو الهاتف الذكي بتخزين بعض البيانات الهامة مثل بيانات التكوين وبيانات التمهيد وكلمات المرور وبيانات المقاييس الحيوية وبيانات تسجيل الدخول وما إلى ذلك.

لا يمكن تخزين هذه البيانات المذكورة في أجهزة التخزين كبير السعة لأسباب أمنية وأيضًا يمكن تعديل هذه البيانات من قبل المستخدمين دون قصد مما قد يؤدي إلى حدوث خلل في الجهاز.

لا تستغرق هذه البيانات سوى عدد قليل من البايتات إلى بضع ميغا بايت ، لذا فإن توصيل جهاز تخزين تقليدي مثل الوسيط المغناطيسي أو البصري بشرائح المعالج ليس مجديًا اقتصاديًا وماديًا.

لذلك ، يتم تخزين هذه البيانات الهامة في شرائح المعالجة نفسها.

لا يختلف Arduino عن الكمبيوتر أو الهواتف الذكية. هناك العديد من الظروف التي نحتاج فيها إلى تخزين بعض البيانات الهامة التي لا يجب محوها حتى بعد انقطاع التيار الكهربائي ، على سبيل المثال بيانات المستشعر.

الآن ، ستكون لديك فكرة عن سبب حاجتنا إلى EEPROM على المعالجات الدقيقة وشرائح وحدات التحكم الدقيقة.

ما هو إيبروم؟

يرمز EEPROM إلى ذاكرة القراءة فقط القابلة للمسح والبرمجة كهربائيًا. وهي أيضًا ذاكرة غير متطايرة يمكن قراءتها وكتابتها البايت الحكيم.

القراءة والكتابة على مستوى البايت تجعلها مختلفة عن ذاكرات أشباه الموصلات الأخرى. على سبيل المثال ذاكرة فلاش: قراءة وكتابة ومسح البيانات بطريقة كتلة.

يمكن أن تتكون الكتلة من بضع مئات إلى آلاف البتات ، وهو أمر ممكن للتخزين كبير السعة ، ولكن ليس لعمليات 'قراءة الذاكرة فقط' في المعالجات الدقيقة والميكروكونترولر ، والتي تحتاج إلى الوصول إلى بيانات بايت بايت.

على لوحة Arduino Uno (ATmega328P) تحتوي على 1 كيلو بايت أو 1024 بايت من EEPROM. يمكن الوصول إلى كل بايت على حدة ، ولكل بايت عنوان يتراوح من 0 إلى 1023 (أي ما مجموعه 1024).

العنوان (0-1023) هو موقع ذاكرة حيث سيتم تخزين بياناتنا.

في كل عنوان يمكنك تخزين بيانات 8 بت ، وأرقام رقمية من 0 إلى 255. يتم تخزين بياناتنا في شكل ثنائي ، لذلك إذا كتبنا الرقم 255 في EEPROM ، فسيتم تخزين الرقم كـ 11111111 في عنوان وإذا قمنا بتخزين الصفر ، سيتم تخزينه كـ 00000000.

يمكنك أيضًا تخزين النصوص والأحرف الخاصة والأحرف الأبجدية الرقمية وما إلى ذلك عن طريق كتابة البرنامج المناسب.

لم تتم مناقشة تفاصيل البناء والعمل هنا مما قد يجعل هذه المقالة طويلة وقد تجعلك تشعر بالنعاس. توجه نحو YouTube أو Google ، هناك مقال / مقاطع فيديو مثيرة للاهتمام تتعلق ببناء وعمل EEPORM.

لا تخلط بين EEPROM و EPROM:

باختصار ، EPROM عبارة عن ذاكرة للقراءة فقط قابلة للبرمجة كهربائيًا مما يعني أنه يمكن برمجتها (تخزين الذاكرة) كهربائيًا ، ولكن لا يمكن محوها كهربائيًا.

إنه يستخدم لمعانًا ساطعًا للأشعة فوق البنفسجية فوق شريحة التخزين مما يمحو البيانات المخزنة. جاء EEPROM كبديل لـ EPROM والآن نادرًا ما يستخدم في أي أجهزة إلكترونية.

لا تخلط بين ذاكرة فلاش لـ EEPROM:

ذاكرة الفلاش عبارة عن ذاكرة شبه موصلة وغير متطايرة يمكن أيضًا محوها كهربائيًا وقابلة للبرمجة كهربائيًا ، في الواقع ذاكرة فلاش مشتقة من EEPROM. لكن الوصول إلى الذاكرة الكتلة أو بمعنى آخر ، يتم الوصول إلى طريقة الذاكرة وبنيتها تجعلها مختلفة عن EEPROM.

يحتوي Arduino Uno (متحكم ATmega328P) أيضًا على ذاكرة فلاش بسعة 32 كيلو بايت لتخزين البرنامج.

عمر EEPROM:

مثل أي وسيط تخزين إلكتروني آخر ، يحتوي EEPROM أيضًا على دورات محدودة للقراءة والكتابة والمسح. لكن المشكلة تكمن في أن لها أقل عمر افتراضي مقارنة بأي نوع آخر من ذاكرة أشباه الموصلات.

على EEPROM من Arduino ، ادعى Atmel حوالي 100000 (واحد لكح) دورة كتابة لكل خلية. إذا كانت درجة حرارة غرفتك منخفضة ، فكلما زاد عمر EEPROM.

يرجى ملاحظة أن قراءة البيانات من EEPROM لا تؤثر بشكل كبير على العمر الافتراضي.

هناك وحدات خارجية EEPROM ICs يمكن توصيلها بأردوينو بسهولة مع سعة ذاكرة تتراوح من 8 كيلوبايت ، 128 كيلوبايت ، 256 كيلوبايت وما إلى ذلك مع عمر افتراضي يصل إلى حوالي مليون دورة كتابة لكل خلية.

هذا يخلص EEPROM ، الآن كنت قد اكتسبت ما يكفي من المعرفة النظرية حول EEPROMs.

في القسم التالي سوف نتعلم كيفية اختبار EEPROM على اردوينو عمليا.

كيفية اختبار EEPROM في Arduino

لتنفيذ ذلك ، كل ما تحتاجه هو كبل USB ولوحة Arduino Uno ، فأنت جاهز للانطلاق.

من التفسيرات المذكورة أعلاه ، فهمنا أن EEPROMs لها عنوان حيث نقوم بتخزين بياناتنا. يمكننا تخزين 0 إلى 1023 موقعًا في Arduino Uno. يمكن أن يستوعب كل موقع 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-------------------//

انتاج:

بمجرد تحميل الرمز ، افتح الشاشة التسلسلية.

سيطلب منك إدخال عنوان يتراوح من 0 إلى 9. من الإخراج أعلاه ، أدخلت العنوان 3. لذلك ، سأخزن قيمة عدد صحيح في الموقع (العنوان) 3.

الآن ، سيطالبك بإدخال قيمة عدد صحيح مكون من رقم واحد تتراوح من 0 إلى 9. من الناتج أعلاه ، قمت بإدخال القيمة 5.

لذلك ، سيتم الآن تخزين القيمة 5 في موقع العنوان 3.

بمجرد إدخال القيمة ، ستكتب القيمة على EEPROM.

ستظهر رسالة نجاح ، مما يعني أن القيمة مخزنة.

بعد بضع ثوانٍ ، سيقرأ القيمة المخزنة على العنوان المعلق عليه وسيظهر القيمة على الشاشة التسلسلية.

في الختام ، لقد كتبنا وقرأنا القيم من EEPROM لوحدة التحكم الدقيقة في Arduino.

الآن ، سنستخدم EEPROM لتخزين كلمة المرور.

سنقوم بإدخال كلمة مرور مكونة من 6 أرقام (لا تقل أو لا تزيد عن) ، وسيتم تخزينها في 6 عناوين مختلفة (كل عنوان لكل رقم) وعنوان إضافي واحد لتخزين '1' أو '0'.

بمجرد إدخال كلمة المرور ، سيخزن العنوان الإضافي القيمة '1' للإشارة إلى أنه تم تعيين كلمة المرور وسيطلب منك البرنامج إدخال كلمة المرور لتشغيل مؤشر LED.

إذا كانت القيمة المخزنة للعنوان الإضافي هي '0' أو أي قيمة أخرى موجودة ، فسيطلب منك إنشاء كلمة مرور جديدة مكونة من 6 أرقام.

بالطريقة المذكورة أعلاه ، يمكن للبرنامج تحديد ما إذا كنت قد قمت بالفعل بتعيين كلمة مرور أو تحتاج إلى إنشاء كلمة مرور جديدة.

إذا كانت كلمة المرور التي تم إدخالها صحيحة ، يتوهج التصميم في LED عند الطرف رقم 13 ، وإذا كانت كلمة المرور التي تم إدخالها غير صحيحة ، فلن يتوهج مؤشر LED وسيطالبك جهاز العرض التسلسلي بأن كلمة مرورك خاطئة.

رمز البرنامج # 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---------------//

انتاج:

افتح جهاز العرض التسلسلي وسيطالبك بإنشاء كلمة مرور مكونة من 6 أرقام.

أدخل أي كلمة مرور مكونة من 6 أرقام وقم بتدوينها واضغط على Enter. الآن تم تخزين كلمة المرور.

يمكنك إما الضغط على زر إعادة الضبط أو فصل كبل USB من جهاز الكمبيوتر ، مما يؤدي إلى انقطاع الإمداد بلوحة Arduino.

الآن ، أعد توصيل كبل USB ، وافتح الشاشة التسلسلية ، والتي ستطالبك بإدخال كلمة المرور المحفوظة المكونة من 6 أرقام.

أدخل كلمة المرور الصحيحة التي سيتوهج بها مؤشر LED.

إذا كنت تريد تغيير كلمة المرور ، فقم بتغيير الرقم من الرمز:

int passExistAdd = 200

السطر أعلاه هو العنوان الإضافي الذي ناقشناه من قبل. قم بتغيير أي مكان من 6 إلى 1023. يتم حجز عناوين من 0 إلى 5 لتخزين كلمة مرور مكونة من 6 أرقام.

سيؤدي تغيير هذا العنوان الإضافي إلى خداع البرنامج الذي لم يتم إنشاء كلمة المرور بعد ويطالبك بإنشاء كلمة مرور جديدة مكونة من 6 أرقام.

إذا كان لديك أي أسئلة بخصوص هذا البرنامج التعليمي EEPROM في Arduino ، فيرجى التعبير عن ذلك في التعليقات ، فقد تتلقى ردًا سريعًا.




زوج من: أكثر من التيار الكهربائي المقطوع باستخدام Arduino التالي: سيارة روبوت يتم التحكم فيها بواسطة الهاتف المحمول باستخدام وحدة DTMF