الذاكرة الدائمة EEPROM
ماهي ذاكرة EEPROM
تحتوي شريحة Atmega328p على 3 أنواع من الذاكرة
نوع الذاكرة | الإستخدام | السعة |
---|---|---|
ذاكرة الفلاش Flash memory | تستخدم لتخزین الكود (sketch) | 32KB |
ذاكرة الـ رام RAM | تنشط أثناء تنفیذ البرنامج مثل قیم المتغیرات | 2KB |
ذاكرة الایبروم EEPROM | ھي ذاكرة سنركز علیھا في هذا المقال | 1KB |
الـ EEPROM ھي ذاكرة مكونة من بايتات Bytes منفصلة وهي مخصصة للاحتفاظ بالبيانات حتى بعد فصل الطاقة عنها. وھي مفيدة كثيرا في كثير من المشاریع المتقدمة. في الأردوينو أونو (شريحة Atmega328p ) تكون سعة الايبروم = 1KB و تكون البايتات مرقمة من 0 إلى 1023.لكل بايت عنوان ويمكنه تخزين قيمة (0-255 ) فقط وتعتبر قيمة صغيرة. تعمل ذاكرة الـ EEPROM بشكل أبطأ من الـ RAM حوالي (3ms) لتخزين البايت الواحد. الإيبروم لها عمر افتراضي من مرات الكتابة أو القراءة (حوالي 100 ألف مرة) الرقم كبير لاشك. لكن في بعض التطبيقات ينبغي الانتباه لهذا الأمر حتى لا تتلف الايبروم.

كتابة و قراءة 1 بايت
توجد مكتبات عديدة غير رسمية للتحكم بالـ EEPROM ولديك الحرية في استخدامها وفي بعض الأحيان تكون أسهل من المكتبة الرسمية لكننا سنستخدم المكتبة الرسمية EEPROM.h في هذا المقال. لا يجب تنزيل المكتبة حيث تأتي مدمجة مع محرر أكواد الأردوينو. يمكنك ملاحظة استخدام الأمر ()EEPROM.write لكتابة قيمة داخل الذاكرة كل ما عليك فعله تمرير العنوان و القيمة وستتم الكتابة. كما يستخدم الأمر ()EEPROM.read لقراءة قيمة مخزنة داخل الذاكرة. مشكلة الأمرين السابيقين أنهما يعملان على تخزين أو قراءة بايت واحد فقط . بينما معظم المتغيرات (int مثلا) تكون أكثر من بايت
نوع المتغير | int | float | byte | bool | long | char | string |
---|---|---|---|---|---|---|---|
عدد البايتات | 2 | 4 | 1 | 1 | 4 | 1 | any |
#include "EEPROM.h"
void setup(){Serial.begin(9600);}
void loop() {
EEPROM.write(0,199); //(address:0-1023 , value 0-255)
byte x=EEPROM.read(0); //(address)
Serial.println(x);}
كتابة و قراءة الأرقام
في هذا المثال يتم تخزين رقم int في ذاكرة الايبروم (x) ثم إعادة قراءته و وضع القيمة في (y). يجب أن يكون المتغيرين من نفس النوع وفي حال اختلاف النوع قد تظهر قراءات خاطئة. لاحظ استخدام الأمر ()EEPROM.put للتخزين في الذاكرة و ()EEPROM.get لقراءة القيمة وووضعها داخل متغير.
#include
int x=31287; int y;
void setup(){
Serial.begin(9600);}
void loop(){
EEPROM.put(0, x);
EEPROM.get(0, y);
Serial.println(y);}
كتابة و قراءة العبارات
لا يمكن تخزين عبارة بصيغة String داخل الذاكرة وبدلاً عن ذلك استخدم مصفوفة حروف محددة الحجم .
#include "EEPROM.h"
char x[13] = "JEEM2 Academy";
char y[13];
void setup(){
EEPROM.put(100,x); //used address : 100
EEPROM.get(100,y);
Serial.begin(9600);
Serial.println(y);}
void loop(){}
معرفة حجم المصفوفة المطلوب لاحتواء عبارة String
يمكنك استخدام الأمر ()length لتحديد الحجم المناسب لمصفوفة الحروف. لاحظ أننا نحتاج لمصفوفة ب 6 خانات لاحتواء Sting x و 53 خانة لاحتواء String y.
String x="EEPROM";
String y="electronically erasable programmable read-only memory";
void setup(){
Serial.begin(9600);
Serial.println(x.length());
Serial.println(y.length());}
void loop(){}
قراءة مقاومة متغيرة وتخزين القيمة في ذاكرة EEPROM
لاحظ استخدام المتغير add لتحديد عنوان تخزين القيمة داخل الذاكرة حيث يجب أن لا تتجاوز المجال من 0 إلى 1023

#include "EEPROM.h"
int x=0;
int add=0;
void setup(){
delay(10000);
Serial.begin(9600);}
void loop(){
x=analogRead(A0);
Serial.println(x);
if(add<1022){ EEPROM.put(add,x); add=add+2;}
delay(3000);}