في هذا البرنامج التعليمي سوف نتعلم مدى سهولة حفظ البيانات باستخدام EEPROM الموجود في متحكم PIC16F877A. في معظم مشاريع الوقت الفعلي ، قد نضطر إلى حفظ بعض البيانات التي لا ينبغي محوها حتى عند إيقاف تشغيل الطاقة. قد يبدو هذا كعملية معقدة ، ولكن بمساعدة XC8 Compiler يمكن القيام بهذه المهمة فقط باستخدام سطر واحد من التعليمات البرمجية. إذا كانت البيانات كبيرة من حيث ميغا بايت ، فيمكننا ربط جهاز تخزين مثل بطاقة SD وتخزين تلك البيانات عليها. ولكن يمكننا تجنب هذه العملية المتعبة إذا كانت البيانات صغيرة ، يمكننا ببساطة استخدام EEPROM الموجود في PIC Microcontroller لحفظ بياناتنا واستعادتها في أي وقت نريده.
هذا البرنامج التعليمي PIC EEPROM هو جزء من سلسلة دروس PIC Microcontroller التي بدأنا فيها من مستوى أساسي للغاية. إذا لم تكن قد تعلمت البرامج التعليمية السابقة ، فسيكون من الأفضل إلقاء نظرة عليها الآن ، لأن هذا البرنامج التعليمي يفترض أنك على دراية بـ Interfacing LCD with PIC Microcontroller واستخدام ADC مع PIC Microcontroller.
EEPROM في PIC16F877A:
يرمز EEPROM إلى "ذاكرة للقراءة فقط قابلة للمسح والبرمجة إلكترونيًا". كما يوحي الاسم ، فهي ذاكرة موجودة داخل PIC Microcontroller حيث يمكننا كتابة / قراءة البيانات عن طريق برمجتها للقيام بذلك. سيتم مسح البيانات المحفوظة في هذا فقط إذا تم ذكر ذلك في البرنامج. يختلف مقدار مساحة التخزين المتوفرة في EEPROM باختلاف كل متحكم ؛ سيتم إعطاء التفاصيل في ورقة البيانات كالمعتاد. في حالتنا الخاصة بـ PIC16F877A ، تبلغ المساحة المتاحة 256 بايت كما هو مذكور في ورقة بيانات المواصفات الخاصة بها. الآن دعونا نرى كيف يمكننا استخدام هذه الـ 256 بايت لقراءة / كتابة البيانات باستخدام إعداد تجريبي بسيط.
مخطط الدائرة وشرحها:
يظهر مخطط الدائرة للمشروع أعلاه. لقد قمنا بتوصيل شاشة LCD لتصور البيانات التي يتم حفظها واستردادها. يتم توصيل مقياس الجهد العادي بقناة AN4 التناظرية ، لذا يتم التغذية بجهد متغير ، وسيتم استخدام هذا الجهد المتغير كبيانات يتم حفظها في EEPROM. لقد استخدمنا أيضًا زر ضغط على RB0 ، عندما يتم الضغط على هذا الزر ، سيتم حفظ البيانات من القناة التناظرية في EEPROM.
يمكن إجراء هذا الاتصال على اللوح. يتم عرض pinouts من PIC Microcontroller في الجدول أدناه.
رقم S. |
الرقم السري |
اسم الدبوس |
متصلا |
1 |
21 |
RD2 |
RS لشاشات الكريستال السائل |
2 |
22 |
RD3 |
E لشاشات الكريستال السائل |
3 |
27 |
RD4 |
D4 من شاشات الكريستال السائل |
4 |
28 |
RD5 |
D5 من شاشات الكريستال السائل |
5 |
29 |
RD6 |
D6 من شاشات الكريستال السائل |
6 |
30 |
RD7 |
D7 من شاشات الكريستال السائل |
7 |
33 |
RBO / INT |
اضغط الزر |
8 |
7 |
AN4 |
مقياس فرق الجهد |
محاكاة استخدام PIC EEPROM:
يتضمن هذا المشروع أيضًا محاكاة مصممة باستخدام Proteus ، والتي يمكننا من خلالها محاكاة عمل المشروع بدون أي أجهزة. يتم تقديم برنامج هذه المحاكاة في نهاية هذا البرنامج التعليمي. يمكنك ببساطة استخدام ملف Hex من هنا ومحاكاة العملية برمتها.
أثناء المحاكاة ، يمكنك تصور قيمة ADC الحالية والبيانات المحفوظة في EEPROM على شاشة LCD. لحفظ قيمة ADC الحالية في EEPROM ، ما عليك سوى الضغط على المفتاح المتصل بـ RB0 وسيتم حفظه. يتم عرض لقطة من المحاكاة أدناه.
برمجة PIC لـ EEPROM:
يتم تقديم الكود الكامل لهذا البرنامج التعليمي في نهاية هذا البرنامج التعليمي. في برنامجنا ، يتعين علينا قراءة القيم من وحدة ADC وعندما يتم الضغط على زر ، يتعين علينا حفظ هذه القيمة في EEPROM الخاص بنا. نظرًا لأننا تعلمنا بالفعل عن ADCs وتفاعل LCD ، فسوف أشرح أيضًا الكود لحفظ البيانات واستردادها من EEPROM.
وفقًا لـ Datasheet ، "تحتوي هذه الأجهزة على 4 أو 8K كلمة لبرنامج Flash ، مع نطاق عنوان من 0000h إلى 1FFFh لـ PIC16F877A". هذا يعني أن كل مساحة تخزين EEPROM لها عنوان يمكن من خلاله الوصول إليها وفي MCU الخاص بنا يبدأ العنوان من 0000 ساعة إلى 1FFFh.
لحفظ البيانات داخل عنوان EEPROM معين ، ما عليك سوى استخدام السطر أدناه.
eeprom_write (0، adc) ؛
هنا "adc" هو متغير من نوع عدد صحيح توجد فيه البيانات المراد حفظها. و "0" هو عنوان EEPROM الذي يتم حفظ بياناتنا عليه. يتم توفير بناء الجملة "eeprom_write" من خلال برنامج التحويل البرمجي XC8 الخاص بنا ، وبالتالي سيتم الاهتمام بالسجلات تلقائيًا بواسطة المترجم.
لاسترداد البيانات المخزنة بالفعل في EEPROM وحفظها في متغير ، يمكن استخدام السطر التالي من التعليمات البرمجية.
Sadc = (int) eeprom_read (0) ؛
هنا ، "Sadc" هو المتغير الذي سيتم حفظ البيانات من EEPROM. و "0" هو عنوان EEPROM الذي نسترجع البيانات منه. يتم توفير بناء الجملة "eeprom_read" بواسطة برنامج التحويل البرمجي XC8 الخاص بنا ، ومن ثم سيتم الاهتمام بالسجلات تلقائيًا بواسطة المترجم. ستكون البيانات المحفوظة في EEPROM بالنوع الست عشري. ومن ثم نقوم بتحويلها إلى نوع صحيح عن طريق بادئة (int) قبل بناء الجملة.
العمل:
بمجرد أن نفهم كيفية عمل الكود والاستعداد مع الأجهزة ، يمكننا اختبار الكود. قم بتحميل الكود إلى متحكم PIC الخاص بك وقم بتشغيل الإعداد. إذا كان كل شيء يعمل كما هو متوقع ، فيجب أن ترى قيم ADC الحالية معروضة على شاشة LCD. يمكنك الآن الضغط على الزر لحفظ قيمة ADC في EEPROM. يمكنك الآن التحقق مما إذا تم حفظ القيمة عن طريق إيقاف تشغيل النظام بالكامل وتشغيله مرة أخرى. عند التشغيل ، يجب أن ترى القيمة المحفوظة مسبقًا على شاشة LCD.
يتم عرض العمل الكامل لهذا المشروع لاستخدام PIC Microcontroller EEPROM في الفيديو أدناه. آمل أن تكون قد فهمت البرنامج التعليمي واستمتعت به. إذا كانت لديك أي شكوك يمكنك كتابتها في قسم التعليقات أدناه أو نشرها على منتدياتنا.