قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 27-04-2011, 11:20 AM المشاركة 1   
افتراضي تفاصيل مكتبة الذاكرة EEPROM Library والتدريب عليها Twitter FaceBook Google+



تفاصيل مكتبة الذاكرة EEPROM Library والتدريب عليها

ذاكرة البيانات نوع EEPROM " ذاكرة القراءة فقط القابلة للمسح كهربائيا" متاحة فى عدد من الميكروكونترولر PIC لذلك يحتوى المترجم mikroC PRO for PIC على مكتبة لتوفير العمل المريح مع هذه الذاكرة .

روتينات المكتبة :

1- الروتين EEPROM_Read " قراءة ذاكرة EEPROM ":
  • شكل الصيغة :
كود:
unsigned short EEPROM_Read(unsigned short address);





· العائد (النتيجة) :
يعود هذا الروتين ببايت byte من العنوان المحدد .
· الوصف (الغرض) :
قراءة "البيانات" data من "العنوان" address المحدد بالروتين . البارامتر "العنوان" address يعتمد على نوع الميكروكونترولر ففى حالة المجموعة PIC16 يكون من النوع short .
· المطالب:
يتطلب وجود وحدة (موديول) EEPROM .
تأكد من وجود تأخير زمنى بحد أدنى 20ms عند الاستخدام المتتابع للروتينات EEPROM_Write و EEPROM_Read . فعلى الرغم من أن الميكروكونترولر PIC سوف يكتب القيمة الصحيحة إلا أن الروتين EEPROM_Read قد يعود بنتيجة غير محددة .
مثال :




كود:
 
unsigned short take;
كود:
 
... take = EEPROM_Read(0x3F);


2- الروتين EEPROM_Write

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 27-04-2011, 11:23 AM المشاركة 2   
افتراضي


1- الروتين EEPROM_Write
  • شكل الصيغة :
كود:
void EEPROM_Write(unsigned short address, unsigned short data);


· العائد (النتيجة) :
لا يعود بشىء .
· الوصف (الغرض) :
كتابة "البيانات" data من "عنوان" address محدد . البارامتر "العنوان" address يعتمد على نوع الميكروكونترولر ففى حالة المجموعة PIC16 يكون من النوع short .
يجب توخى الحذر ومعرفة أن جميع المقاطعات سوف يتم "عدم تمكينها" disabled خلال تنفيذ الروتين EEPROM_Write ( سوف يتم مسح clear خانة تمكين عموم المقاطعات GIE بالسجل INTCON ). يقوم الروتين بإعادة الحالة السابقة لهذه الخانة عند إنتهائه (خروجه) .
· المطالب:
يتطلب وجود وحدة (موديول) EEPROM .
تأكد من وجود تأخير زمنى بحد أدنى 20ms عند الاستخدام المتتابع للروتينات EEPROM_Write و EEPROM_Read . فعلى الرغم من أن الميكروكونترولر PIC سوف يكتب القيمة الصحيحة إلا أن الروتين EEPROM_Read قد يعود بنتيجة غير محددة .
مثال :




كود:
 
EEPROM_Write(0x32, 19);


تدريب على استخدام ذاكرة EEPROM :

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 27-04-2011, 11:28 AM المشاركة 3   
افتراضي


تدريب على استخدام ذاكرة eeprom :

يتناول هذا التدريب الكتابة على والقراءة من ذاكرة eeprom الموجودة ضمن بناء الميكروكونترولر .
يعمل البرنامج كما يلى :
تقوم الحلقة الرئيسية بصفة مستمرة بقراءة لبيانات الموجودة فى عنوان الموقع 5 (عشرى) . ثم يدخل البرنامج فى حلقة غير منتهية وفيها يتم تزايد محتويات كل من سجل المنفذ portb والمنفذ porta . يتم اختبار (التحقق من ) مدخلين . فى اللحظة التى يتم فيها الضغط على الزر الضاغط المسمى memo فإن الرقم المخزن فى سجل المنفذ portb سوف يتم حفظه فى ذاكرة eeprom ومباشرة يتم قراءته وبيانه على المنفذ portd فى الشكل الثنائى .
الدائرة الكهربية :



الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 27-04-2011, 11:31 AM المشاركة 4   
افتراضي


البرنامج :


كود:
/*Header******************************************************/ void main() { ANSEL = 0; // All I/O pins are configured as digital ANSELH = 0; PORTB = 0; // Port B initial value TRISB = 0; // All port B pins are configured as outputs PORTD = 0; // Port B initial value TRISD = 0; // All port D pins are configured as outputs TRISA = 0xFF; // All port A pins are configured as inputs PORTD = EEPROM_Read(5); // Read EEPROM memory at address 5 do { PORTB=PORTB++; // Increment port B by 1 Delay_ms(100); // 100mS delay if (!PORTA.F2){ EEPROM_Write(5,PORTB); // If MEMO is pressed, save PORTB PORTD = EEPROM_Read(5); // Read written data do; while (!PORTA.F2); // Remain in this loop as long as the button is pressed } } while(1); // Endless loop }


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 27-04-2011, 11:34 AM المشاركة 5   
افتراضي


التعليق على البرنامج :

1- مقدمة (رأس) البرنامج

كود:
/*Header*********PIC16F887*****************************/
2- بداية الدالة الرئيسية حيث يتم :
  • إعداد (تهيئة) أطراف المنافذ
كود:
void main() { ANSEL = 0; // All I/O pins are configured as digital ANSELH = 0; PORTB = 0; // Port B initial value TRISB = 0; // All port B pins are configured as outputs PORTD = 0; // Port B initial value TRISD = 0; // All port D pins are configured as outputs TRISA = 0xFF; // All port A pins are configured as inputs


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 27-04-2011, 11:36 AM المشاركة 6   
افتراضي


  • قراءة البيانات الموجودة فى الموقع (العنوان) 5 من ذاكرة EEPROM ونسخ النتيجة لسجل المنفذ PORTD .
كود:
PORTD = EEPROM_Read(5); // Read EEPROM memory at address 5


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 27-04-2011, 11:37 AM المشاركة 7   
افتراضي


  • الدخول فى حلقة غير منتهية do{….}while(1) وفيها يتم :
# تزايد محتويات سجل المنفذ PORTB بواحد .
# ثم التأخير 100 ملى ثانية لضماء إستقرار التنفيذ .

كود:
do { PORTB=PORTB++; // Increment port B by 1 Delay_ms(100); // 100mS delay


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 27-04-2011, 11:39 AM المشاركة 8   
افتراضي


# التحقق من حالة الطرف RA2 المتصل به المفتاح الضاغط فإن كانت منخفضة فيكون معكوسها مرتفعة (الوضع العادى للمفتاح مفتوح أى عدم الضغط عليه تكون حالة الطرف مرتفعة لتوصيلها بالجهد الموجب من خلال المقاومة 10K وتنخفض عند الضغط عليه ) عندئذ يتحقق شرط عبارة if ويتم تنفيذ جسمها .
# حيث يتم كتابة (نسخ) محتويات سجل المنفذ PORTB إلى السجل الموجود بالعنوان 5 بذاكرة EEPROM .
# ثم قراءة محتويات هذا السجل ونسخه (نقله) لسجل المنفذ PORTD .
# والانتظار طالما أن المفتاح ما زال مضغوطا عليه وذلك باستخدام حلقة do{…}while(..) داخلية


كود:
if (!PORTA.F2){ EEPROM_Write(5,PORTB); // If MEMO is pressed, save PORTB PORTD = EEPROM_Read(5); // Read written data do; while (!PORTA.F2); // Remain in this loop as long as the button is pressed }
  • تكرار العملية بصفة مستمرة
كود:

} while(1); // Endless loop }
للتحقق من صحة البرنامج يتم الضغط على المفتاح الضاغط MEMO وفصل القدرة عن الدائرة . بعد إعادة توصيل القدرة إلى الدائرة فإن البرنامج سوف يعرض القيمة المحفوظة (المخزنة) فى سجل المنفذ PORTD .
للعمل الصحيح لهذا التدريب يجب ضم مكتبة EEPROM للمشروع قبل الترجمة .

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 09:28 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025