| برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) | |
|
|
كاتب الموضوع | رسالة |
---|
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 7:55 | |
| برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)
المرجع :
http://justanotherlanguage.org/
مقدمة :
لغة JAL هى لغة ذات مصدر مفتوح تم إنشاؤها لبرمجة الميكروكونترولر PIC . إذا كنت مهتم بالإلكترونيات فإن هذه اللغة تكون خاصة بك .
ماذا تعنى JAL؟
هى إختصار للعبارة Just Another Language "مجرد لغة أخرى" .
لماذا نستخدم لغة JAL ؟
لغة JAL هى لغة عالية المستوى مخصصة للميكروكونترولر PIC . تتيح لك هذه اللغة برمجة الميكروكونترولر PIC بسهولة . هى لغة مجانية مفتوحة المصدر تعتمد سلسلة الأنواع PIC 10,12,16,18.
لغة JAL هى لغة ذات شكل متحرر لبرمجة الميكروكونترولر PIC . يمكن نشر الأوامر على عدة أسطر حسب رغبتك . التبويبات Tabs والفراغات spaces والأسطر الجديدة newlines جميعها تعتبر مكان أبيض (فارغ) whitespace. لا يوجد علامة "تحديد" delimiter بين الأوامر المختلفة . نظريا يمكنك وضع جميع الأوامر فى سطر واحد طويل . عمليا , الأماكن البيضاء تؤدى إلى برامج أسهل فى القراءة لأن إى إصطلاح تختارة يكون ممكنا .
لغة JAL هى مجرد لغة متقدمة مجانية ولها قاعدة مستخدمين عالمية واسعة وفعالة . هذه اللغة قابلة للتهيئة والتوسعة عن طريق استخدام المكتبات ويمكن حتى إدماجها مع مترجم لغة الأسمبلى assembler .
التحميل والتثبيت Installation & Download:
1- تحميل البرنامج من الرابط :
http://jaledit.googlecode.com/files/JALPack_2.4_0.4_0.6.1.0.exe,
سوف يتم تحميل البرنامج JALv2 والمحرر JalEdit .
2- تحديث التثبيت بصفة مستمرة بتحميل المكتبات والأمثلة من الرابط :
http://code.google.com/p/jallib/downloads/list
يتم نسخ المحتويات إلى دليل تثبيت مكتبة البرنامج Jallib .
3- يتم تشغيل البرنامج وتثبيته تبعا للخطوات التالية :
التفاصيل بملف word على الرابط :
http://www.eeecb.com/vb/showthread.php?p=3099#post3099 | |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 7:56 | |
| لماذا استخدام الميكروكونترولر PIC ولغة JALv2 وهذا الموضوع ؟
1- بساطة الاستخدام :
نعم , هذا صحيح , الميكروكونترولر يكون سهل الاستخدام بمساعدة لغة JAL مفتوحة المصدر . ليس فقط الميكروكونترولر ولكن العديد من الأجهزة hardware الخارجية المعقدة تصبح سهلة مثل أجهزة :الاتصال عن طريق USB و التحويل من تناظرى لرقمى ADC و الاتصال التسلسلى والأقراص الصلبة Hard Disks و وبطاقات SD Cards ووحدات العرض LCD والحساسات وغيرها الكثير .
كل ما تحتاجه هو كمية صغيرة من المعرفة حول الإلكترونيات العامة وسوف نتناول بقية ما تحتاج لمعرفته.
2- تبسيط الدائرة الكهربية :
هل ترغب فى تقليص حجم الدوائر الخاصة بك ؟ ما الذى تستخدمه حاليا لبناء الدوائر الرقمية ؟
السلسلة 74LS والسلسلة CMOS والمؤقت 555 ....
يمكنك بناء أى شىء بهذه الدوائر المتكاملة ولكن كم عدد ما تحتاجه لإكمال مشروعك ؟
باستخدام الميكروكونترولر يمكنك تقليص الدائرة إلى شريحة واحدة هى الميكروكونترولر نفسه .
3- مشاريع أكبر :
لا توجد حدود لما يمكن بناءه . | |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 8:00 | |
| ما الذى تحتاجه للبدء ؟
سوف تحتاج إلى الآتى :
1- شريحة ميكروكونترولر PIC .
2- جهاز برمجة للميكروكونترولر PIC .
3- لغة برمجة , وهى هنا JALv2 , ومكتبات , وهى هنا JALLIB , ومحرر ,وهو هنا JAL EDIT.
4- جهاز كومبيوتر ويفضل أن يكون به منفذ تسلسلى .
5- برمجيات لتحميل (حرق) ملف كود البرنامج بالميكروكونترولر .
6- مجموعة من العناصر الإلكترونية ولوحة تجارب وأسلاك ومقياس متعدد . | |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 8:06 | |
| برنامجك الأول : وميض ليد Blink A Led فى هذا البرنامج التعليمى سوف نتعرف على كيفية توصيا أول دائرة لنا عن طريق عمل وميض لليد . من أين نبدأ ؟ لنجعل ليد يومض أى يضىء on و ينطفىء off . بعد أن تم تثبيت البرنامج والمكتبات ومحرر لغة JAL سوف نستخدم المحرر JALEdIt فى كتابة برنامجنا الأول . بناء الدائرة الكهربية : | |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 8:09 | |
| فهم بناء الدليل JALPack : فى البداية إلقة نظرة على محتويات الدليل JALPack بالكومبيوتر حيث قمت بالتثبيت : المجلد : المترجم compiler يحفظ برمجيات المترجم لتحويل كود لغة JAL إلى كود HEX لتحميله على الميكروكونترولر . المجلد : المحرر jaledit محرر نصوص لغة JAL حيث سوف تكتب كود برنامجك . المجلد : المكتبة lib يحتوى على مجموعة من المكتبات ضرورية لجعل الأشياء تعمل . المجلد : عينة sample يحتوى على أمثلة للعمل . · قم بإنشاء مجلد باسم workspace , وفى هذا المجلد قم بإنشاء مجلد باسم blink_a_led ( على سبيل المثال يكون المسار C: \ JALPack \workspace\blink_a_led\ . | |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 8:16 | |
| كتابة التعليمات البرمجية (الكود) : سوف نكتب برنامج لوميض ليد . الكود بكامله ذات نص مميز بألوان محددة . 1- الجزء الأول : (بلوك) العنوان والكاتب Title & Author Block : نبدأ بكتابة بلوك العنوان حتى يتعرف أى شخص على من قام بإنشائه . - الكود:
-
-- ------------------------------------------------------ -- Title: Blink-a-led of the Microchip pic16f877a -- -- Author: Rob Hamerling, Copyright (c) 2008..2009, all rights reserved. -- -- Adapted-by: -- -- Compiler: 2.4l -- -- This file is part of jallib (http://jallib.googlecode.com) -- Released under the BSD license (http://www.opensource.org/licenses/bsdlicense.php) -- -- Description: -- Sample blink-a-led program for Microchip PIC16f877a. -- -- Sources: -- -- Notes: -- - File creation date/time: 14 Oct 2009 20:24:20. -- -- ------------------------------------------------------
يمكنك رؤية "شرطتان "-" للإعلان عن "تعليق" comment حتى يتم تجاهله من قبل المترجم . أيضا يمكن استخدام الفاصلة المنقوطة “;” للتعليقات . ونحن نمضى , سوف نقوم بالتعليق على طول البرنامج حتى يصبح من السهل علينا قراءة برنامجنا . تذكر : التعليقات Comments : الأسطر التى تتضمن تعليقات يسبقها "شرطتين" أو "فاصلة منقوطة" . يجب عمل ذلك فى كل سطر حيث لا يوجد تعبيير لمجموعة من التعليقات "بلوك تعليقات". الصيغة : ;this is a comment -- and this too يستخدم سطر التعليق لتوضيح السبب من البرنامج أو سبب فعل الأشياء وطريقة عملها . التعليق مفيد جدا فى المستقبل كمرجع أو عندما تريد مشاركة الأخرين بالبرامج . من المفضل عمليا بيان إصدار لغة JAL فى أو سطر بالبرنامج وهذا يزيل الكثير من التساؤلات . التعليقات الجيدة تكون حول سبب استخدام عبارة ما . إذا استخدمت مكتبة يجب أن تستخدم أسطر تعليقات لشرح تفاصيل سبب وطريقة استخدام المكتبة . المكتبات بدون هذه التعليقات تكون غير مفيدة على الإطلاق . | |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 8:21 | |
| 2- الجزء الثانى : إختيار نوع الميكروكونترولر PIC : فى الكود التالى يتم اختيار الميكروكونترولر 16F877A ( يمكنك استخدام أى نوع آخر) : - الكود:
-
include 16f877a -- target PICmicro
تذكر : نموذج برنامج لغة JAL يجب أن يبدأ باستدعاء المكتبة التى تتضمن تفاصيل الميكروكونترولر PIC المستهدف بكتابة البرنامج عن طريق التعليمة include 16f877a -- target PICmicro | |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 8:26 | |
| 3- الجزء الثالث :إختيار سرعة (تردد) الكريستال : فى الكود التالى يتم استخدام كريستال بتردد 20 MHz : 4- الجزء الرابع : تهيئة إعدادات الميكروكونترولر PIC فى الكود التالى بعض الإعدادات الداخلية للميكروكونترولر PIC , والتى تسمى المصهرات fuses . تحديد (ضبط) المذبذب OSC ليكون "سرعة عالية" HS يخبر الميكروكونترولر بنوع المصدر الخارجى للساعة (مذبذب الكريستال) . يجب أن تقوم بإيقاف تمكين disable الأطراف التناظرية بالتعليمة enable_digital_io() " تفعيل المداخل / المخارج الرقمية" . لا داعى للقلق بشأن التحديدات الأخرى . - الكود:
-
-- This program assumes a 20 MHz resonator or crystal -- is connected to pins OSC1 and OSC2. pragma target clock 20_000_000 -- oscillator frequency -- configuration memory settings (fuses) pragma target OSC HS -- HS crystal or resonator pragma target WDT disabled -- no watchdog pragma target LVP disabled -- no Low Voltage Programming --
تذكر : الأمر Pragma : الأمر Pragma خاص بالمترجم . هذا الأمر قوى جدا ولكنه معقد وسوف نذكر استخداماته المتعددة كل فى حينه . أمثلة : | |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 8:32 | |
| 1- إختيار طرف خرج Choose an output pin دعونا نختار طرف خرج للتحكم فى الليد . كما ترى من الدائرة الكهربية , الييد متصل بالطرف رقم #2 . كما ترة الطرف #2 هو الطرف RA0/ANO . اسم الطرف هو RA0 , بينما AN0 هو اسم آخر لنفس الطرف ( يستخدم كمدخل تناظرى كما سنرى فيما بعد ) . فى لغة JAL يعبر عن الطرف RA0بالصيغة pin_A0 . الطرف RA0 هو طرف دخل/خرج رقمى من النوع TTL وليس من النوع "خرج مصب مفتوح". خرج المصب المفتوح ( مثل الطرف RA4 ) يحتاج لمقاومة جذب لأعلى توصل بين الطرف والجهد الموجب V+ . الآن نكتب كود الطرف A0 . سوف نستخدم "اسم مستعار" “alias” فقط حتى يتثنى لنا فى المستقبل الإشارة إلى الطرف (A0) بالاسم المستعار “led” . بهذه الطريقة لم نعد بحاجة لتذكر اسم الطرف (فيما عدا سجل الاتجاه فى السطر التالى من الكود ) . - الكود:
-
-- -- You may want to change the selected pin: alias led is pin_A0
| |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 8:37 | |
| 6- الجزء السادس : تهيئة (إعداد) الطرف كمدخل أو كمخرج "إتجاه البيانات" : الآن يجب علينا أن نخبر الميكروكونترولر PIC عما إذا كان هذا الطرف كمدخل أو كمخرج . تحديد الاتجاه دائما تكون بالصيغة (pin_ + pinname_ + direction) " , وحيث أننا نكتب بيانات إلى المنفذ بغرض توصيل الليد فيكون الطرف مخرج وتكون الصيغة : - الكود:
-
pin_A0_direction = output
كما يمكننا عمل اسم مستعار alias بالصيغة : alias led_direction is pin_A0_direction عندئذ يمكننا كتابة الكود : led_direction =output بهذه الطريقة يمكننا تغييره من مخرج إلى مدخل فى منتصف البرنامج بدون معرفة اسم الطرف . لكن فى حالتنا هذه سوف نستخدمه مرة واحدة لذلك فلا حاجة لعمل اسم مستعار . تذكر : الأسماء المستعارة Alias names : عندما يكون للطرف الواحد عدد من الوظائف تبعا لسجلات التحكم أو أعدادات بتات التهيئة , يتم إعلان أسماء مستعارة للوصول إلى الطرف باسم يعبر عن وظيفته . | |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 8:43 | |
| 1- الجزء السابع : كتابة البرنامج الرئيسى الآن لدينا ليد تحت سيطرتنا , دعنا نخبرها عما تفعله . نريد أن تستمر الليد فى فعل ما نريده بصفة مستمرة "إلى الأبد" forever لذلك سوف نقوم بعمل حلقة غير منتهية : من المفضل عمليا وضع مسافة بادئة قبل كل سطر داخل الحلقة من أجل تحسين قابلية القراءة . ثلاثة فراغات قبل كل سطر هى المعيار للمكتبة Jallib . فى هذه الحلقة سوف : · نخبر الليد بالقيام بالتوصيل on . · الآن تأخير (إنتظار) لربع ثانية (250ms) حتى يتثنى لنا رؤية الليد وهى فى حالة التوصيل : · ثم فصل الليد off : · ثم إنتظار آخر قبل العودة للتوصيل مرة أخرى : · غلق (إنهاء) الحلقة , عندما يصل الميكروكونترولر لهذا الموقع يعود مرة أخرى إلى بداية الحلقة : وهذا كل ما لدينا فى البرنامج . إحفظ الملف , وسوف يكون بالشكل التالى : - الكود:
-
-- ------------------------------------------------------ -- Title: Blink-a-led of the Microchip pic16f877a -- -- Author: Rob Hamerling, Copyright (c) 2008..2009, all rights reserved. -- -- Adapted-by: -- -- Compiler: 2.4l -- -- This file is part of jallib (http://jallib.googlecode.com) -- Released under the BSD license (http://www.opensource.org/licenses/bsdlicense.php) -- -- Description: -- Sample blink-a-led program for Microchip PIC16f877a. -- -- Sources: -- -- Notes: -- - File creation date/time: 14 Oct 2009 20:24:20. -- -- ------------------------------------------------------ include 16f877a -- target PICmicro -- This program assumes a 20 MHz resonator or crystal -- is connected to pins OSC1 and OSC2. pragma target clock 20_000_000 -- oscillator frequency -- configuration memory settings (fuses) pragma target OSC HS -- HS crystal or resonator pragma target WDT disabled -- no watchdog pragma target LVP disabled -- no Low Voltage Programming -- enable_digital_io() -- disable analog I/O (if any) -- -- -- You may want to change the selected pin: alias led is pin_A0 pin_A0_direction = output forever loop led = ON _usec_delay(250000) led = OFF _usec_delay(250000) end loop --
| |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 8:46 | |
| ترجمة كود البرنامج إلى ملف سداسى عشر .hex : الميكروكونترولر PIC لا يفهم الكود المكتوب بلغة JAL , ولكنه يفهم الأعداد السداسية عشر وهذه هى وظيفة المترجم compiler . يأخد المترجم القود القابل للقراءة بمعرفتنا ويحوله إلى كود يمكن أن يفهمه الميكروكونترولر PIC . إذا كنت تستخدم المحرر JALEdit , إنقر على قائمة الترجمة compile واختار "ترجمة" compile : إذا تم كل شىء على ما يرام فسوف يكون لديك الملف blink_a_led.hex موجود بنفس مجلد المشروع blink_a_led.jal , أما إذا كان هناك أخطاء errorsأو تحذيرات warnings , فإن المترجم سوف يخبرك بها . الخطأ error يعنى أن الكود به مشكلة ولا يمكن توليد الملف .hex . إذا كان هناك تحذير (تنبيه) warning , فسوف يتم توليد الملف .hex وقد يمكن تشغيله على الميكروكونترولر PIC ولكن يجب تصحيح الكود . كتابة ملف hex على الميكروكونترولر : حسب نوع جهاز البرمجة يتم تحميل (حرق) الملف السداسى عشر بالميكروكونترولر . تجربة البرنامج : شغل الدائرة وشاهد النتائج . سوف ترى الليد وهو يومض . تهنئة : لم أنهيت برنامجك الأول بنجاح . يمكنك مشاهدة النتيجة بالفديو على الرابط التالى : https://www.youtube.com/watch?v=PYuPZO7isoo | |
|
| |
metwally.mustafa فريق أول
عدد الرسائل : 4226 العمر : 38 الموقع : Egypt العمل/الترفيه : automation engineer تاريخ التسجيل : 12/01/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 9:20 | |
| جزاكم الله خيرا ............موضوع متميز _________________ I am so far behind, I think i am first
| |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 11:20 | |
| ترجمة كود البرنامج إلى ملف سداسى عشر .hex : الميكروكونترولر PIC لا يفهم الكود المكتوب بلغة JAL , ولكنه يفهم الأعداد السداسية عشر وهذه هى وظيفة المترجم compiler . يأخد المترجم القود القابل للقراءة بمعرفتنا ويحوله إلى كود يمكن أن يفهمه الميكروكونترولر PIC . إذا كنت تستخدم المحرر JALEdit , إنقر على قائمة الترجمة compile واختار "ترجمة" compile : إذا تم كل شىء على ما يرام فسوف يكون لديك الملف blink_a_led.hex موجود بنفس مجلد المشروع blink_a_led.jal , أما إذا كان هناك أخطاء errorsأو تحذيرات warnings , فإن المترجم سوف يخبرك بها . الخطأ error يعنى أن الكود به مشكلة ولا يمكن توليد الملف .hex . إذا كان هناك تحذير (تنبيه) warning , فسوف يتم توليد الملف .hex وقد يمكن تشغيله على الميكروكونترولر PIC ولكن يجب تصحيح الكود . كتابة ملف hex على الميكروكونترولر : حسب نوع جهاز البرمجة يتم تحميل (حرق) الملف السداسى عشر بالميكروكونترولر . تجربة البرنامج : شغل الدائرة وشاهد النتائج . سوف ترى الليد وهو يومض . تهنئة : لم أنهيت برنامجك الأول بنجاح . يمكنك مشاهدة النتيجة بالفديو على الرابط التالى : https://www.youtube.com/watch?v=PYuPZO7isoo باختصار يمكن كتابة الكود بالشكل التالى - الكود:
-
include 16f877a -- إستدعاء أو ضم ملف خواص الميكروكونترولر المستهدف enable_digital_io() -- جميع المداخل/ المخارج رقمية alias led is pin_A0 -- تسمية الطرف باسم مستعار pin_A0_direction = output -- تحديد اتجاه التطرف كمخرج forever loop -- حلقة غير منتهية led = ON -- إضاءة الليد _usec_delay(250000) -- إنتظار أو تأخير ربع ثانية led = OFF -- إطفاء الليد _usec_delay(250000) -- إنتظار أو تأخير ربع ثانية end loop -- نهاية الحلقة الغير منتهية
| |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 12:01 | |
| تنفيذ التدريب باستخدم برمجيات بروتيس : | |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 12:06 | |
| الملفات فى المرفقات على الرابط
http://www.eeecb.com/vb/showthread.php?p=3112#post3112
| |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 18:47 | |
| تدريب على التعامل مع المخارج فقط "وميض ليدات": أولا : الميكروكونترولر المستخدم هو PIC16F877A : | |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 18:56 | |
| ثانيا : المكونات : ملاحظة : الأطراف 1,11,12,31,32 دائما يجب أن تكون موصلة بغض النظر عن المشروع الذى تقوم بإنشاءه . عند استخدام كريستال فإن الأطرف 13 , 14 أيضا تكون موصلة دائما . الشىء الوحيد الذة تحتاج لاختياره فى هذا المشروع هو " مكان توصيل الليدات" وحيث أنهيمكننا اختيار إى أطراف من المنافذ ports B , C , D فسوف نختار أى أطراف عشوائيا ولتكن الأطراف 22(D3) و 23(C4) . ثالثا : الدائرة الكهربية: | |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الأربعاء 6 يونيو 2012 - 19:06 | |
| رابعا : البرمجة : يتم كتابة البرنامج باستخدام المحرر JALEdit . بمجرد بدء المحرر سوف تشاهد صفحة فارغة حيث يتم إدخال البرنامج . يتكون البرنامج من سلسلة أوامر . هذه الأوامر تخبر الميكروكونترولر PIC16F877A كما يجب عليه القيام بفعله . تبدأ الأوامر من إلى الصفحة إلى أسفلها ( بعض الأوامر سوف يسبب القفز إلى أجزاء مختلفة) . البرمجة بلغة JAL ليس لها شكل معين لتوزيع الأوامر على الصفحة . لكنك تحتاج إلى أن تكون قادرا على فهم البرنامج بنفسك لذلك سوف نضع بعض القواعد لأنفسنا : 1- كل سطر سوف يكون به أمر واحد فقط . 2- سوف نستخدم تعليقات مختصرة لشرح ما يفعله البرنامج . 3- نبدأ بإعداد الحلقات و الأوامر الشرطية . معنى القاعدة الثالثة سوف يكون واضحا فيما بعد . لجعل البرنامج أسهل فى القراءة فإن المحرر JALEdit سوف يقوم بتلوين كل شىء تقوم بإدخالة وهذا ليس له أى تأثير على العمل الوظيفى للبرنامج . الخطوة الأول فى البرنامج هى تحميل مكتبة . هذه المكتبة تحتوى على أوامر إضافية , والتى عادة لا يمكن أن تكون جزء من لغة JAL نفسها لأنها تختلف حسب نوع الميكروكونترولر . وأنت كمبرمج لا تحتاج لمعرفة ما تحتويه لذلك فهى مخبأة بعيدا فى مكتبة . الشىء الوحيد الذى تحتاج لفعله هو استخدام المكتبة التى تتمشى مع الميكروكونترولر . وحيث أننا نكتب برنامج للميكروكونترولر 16F877A يتم تحميل المكتبة "16f877a" تحميل المكتبة يتم بالأمر التالى : -- target PICmicro include 16f877a أوامر لغة JAL القياسية يتم التعرف عليها عن طريق المحرر وكود الألوان . المتغيرات والأوامر من المكتبة تكون باللون الأزرق . · السطر الأول يبدأ بشرطتين "-" لبيان تعليق وهو يخصك أنت بينما يتم تجاهلة بالمترجم , أى أن الميكروكونترولر لن يفعل بالتعليق أى شىء . · السطر الثانى يبدأ بالأمر include ثم اسم المكتية . كل شىء موجود بهذه المكتبة يتم إدراجه (ضمه) عند هذه النقطة (دون أن تراه ) . حيث أن الأطراف الرقمية بالميكروكونترولر 16F877A يمكن أن تكون مخارج أو مداخل فإننا نحتاج لتعريف إتجاهات الأطراف التى ننوى استخدامها . فى هذا البرنامج نريد أن يكون كلا الطرفين مخارج لأننا نرغب فى تحويل الليدات المتصلة بهذه الأطراف بين حالة التوصيل on وحالة الفصل off . صيغة أوامر تحديد ( تعيين) إتجاه البيانات : pin_c4_direction = output pin_d3_direction = output تذكر : يجب بيان "اتجاه الطرف" لكل طرف تستخدمه . يتم عمل إضاءة الليد عن طريق تطبيق القدرة على الطرف المتصل به الليد . يتم فعل ذلك عن طريق جعل الطرف فى الحالة المنطقية "المرتفعة" high . يتم فصل القدرة عن الطرف عن طريق جعله فى الحالة المنطقية "المنخفضة" low . صيغة الأوامر : pin_d3 = high pin_c4 = low بعد تنفيذ هذه الأوامر فإن الليد المتصل بالطرف d3 يكون فى حالة توصيل "مضىء" والليد المتصل بالطرف c4 فى حالة فصل "مطفأ" . وحيث أننا نرغب فى عمل وميض بالليدات , فإن الخطوة التالية تكون العكس . pin_d3 = low pin_c4 = high بين الحالة الأولى والحالة الثانية يجب إدراج "توقف" pause . وإلا فإن الوميض سوف يكون سريعا جدا بحيث لا يمكن ملاحظته . التوقف الذى سوف نستخدمه عبارة عن تأخير لثانية واحدة : صيغة الأمر : _usec_delay(1_000_000) -- one second delay العدد الموجود بين الأقواس يحدد مدة الانتظار مقدرة بالميكروثانية . باستخدام هذه الأوامر فإن الليد سوف يومض لمرة واحدة فقط , لكن الوميض الحقيقى لا يتوقف . لذلك فإن أوامرنا تحتاج لأن تتكرر بصفة مستمرة , أى "إلى الأبد" forever . صيغة حلقة التكرار الغير منتهى : forever loop end loop يمكن أن يصبح البرنامج بالشكل : كما ترى تم إعداد هذه الحلقة بغرض التكرار الغير منتهى . وهذا يجعل من الواضح جدا أين تبدأ الحلقة وأين تنتهى . تذكر أن هذه هى القاعدة الثالثة التى وضعناها كمدخل للبرنامج . الآن حان الوقت المناسب لإدخال البرنامج بالمحرر وحفظه . - الكود:
-
-- JAL 2.0.4 include 16f877 pragma target clock 20_000_000 -- oscillator frequency -- configuration memory settings (fuses) pragma target OSC HS -- HS crystal or resonator pragma target WDT disabled -- no watchdog pragma target LVP disabled -- no Low Voltage Programming -- enable_digital_io() -- disable analog I/O (if any) -- definitions pin_c4_direction = Output pin_d3_direction = Output
forever loop
-- LEDs in starting state pin_d3 = high pin_c4 = low _usec_delay(1_000_000) -- one second delay
-- LEDs switched pin_d3 = low pin_c4 = high _usec_delay(1_000_000) -- one second delay
end loop
| |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الخميس 7 يونيو 2012 - 17:47 | |
| المفاتيح Switches :
يتناول هذا الجزء موضوع المشاريع التى تتعامل مع المفتاح .
هذا الموضوع غير معقد وخاصة بعد إتمام الجزء السابق لكن هذا الجزء خطوة جيدة قبل الدخول إلى المشاريع المعقدة فيما بعد .
ملخص المشاريع :
1- المؤقت Timer :
ويعرف أيضا بالمذبذب المتعدد أحادى الاستقرار ( أو المذبذب المتعدد للطلقة أو النبضة الواحدة) . عند الضغط اللحظى على المفتاح الضاغط يضىء الليد ويظل مضىء لفترة زمنية محددة ( مؤقت تأخير الفصل) .
2- مفتاح بطريقين Two way switch :
استخدام مفتاح ضاغط لتحويل حالة ليد بين التوصيل on والفصل off . يسمى أيضا مذبذب متعدد ثنائى الاستقرار .
3- النرد (زهر الطاولة) Dice
النرد الإلكتروتى كتطبيق لمفتاح بدون إرتدادات de-bounced .
4- جرس الباب السرى Secret doorbell :
جرس باب يعطى رنين فقط عند إدخال كود سرى عن طريق لوحة مفاتيح keypad . | |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الخميس 7 يونيو 2012 - 17:55 | |
| المؤقت Timer : المؤقت الذى سوف نتناوله فى هذا المشروع يعرف أيضا باسم المذبذب المتعدد أحادى الاستقرار . عند الضغط اللحظى على المفتاح الضاغط يظل الليد مضىء لفترة زمنية محددة . معلومات فنية : غير مسموح للطرف الذى يستخدم ( يعنى أن الميكروكونترولر يبحث عن هذا الطرف) بأن يكون "سائب" float بل دائما يجب أن يوصل إما إلى الجهد الموجب 5 V أو الأرضى 0V . هذا يعنى أن لدينا طريقتين لتوصيل المفتاح كما فى الشكل التالى : فى الحالة الأولى (جهة اليسار) : يكون الطرف فى الحالة العادية عند الجهد المرتفع 5 V . هذا الجهد يسمى "1" أو"true" أو high"" . بمجرد غلق المفتاح يهبط جهد الطرف إلى الصفر . هذا الجهد يسمى "0" أو "false" أو "low" . عند هذه النقطة , يمر تيار قدرة 0.5mA خلال المقاومة , هذا التيار ليس بالكثير , ولكنه يعطينا سببا لاستخدام المفتاح المفتوح فى الوضع العادى حيث يتم غلقه فقط عند الحاجة . بهذه التهيئة تتولد إشارة منخفضة low عند غلق المفتاح . تسمى هذه الحالة "فعال فى الحالة المنخفضة" active low . فى الحالة الثانية (جهة اليمين) : بنفس الطريقة السابقة يمكن القول أن هذه الحالة تمثل "فعال فى الحالة المرتفعة" active high والتى تبدو كطريقة تفكير طبيعية حيث أن غلق المفتاح (حالة التفعيل) يؤدى إلى تطبيق الجهد المرتفع 5 V على الطرف . نظريا يمكن أن يتم توصيل المفتاح بإى طرف للميكروكونترولر PIC16F877A ( فيما عدا أطراف القدرة , بالطبع) . الميكروكونترولر PIC16F877A له أنواع مختلفة من الأطراف . من المهم تذكر أن المنفذ portA والمنفذ portE هى مداخل تناظرية . هذه المنافذ تقيس الجهد على أطرافها . يمكنك توصيل مفتاح بها , لكن فى كل مرة تريد أن تعرف ما إذا كان المفتاح مفتوح أو مغلق يجب عليك قياس الجهد وإلا يجب عليك تغيير الأطراف من مداخل تناظرية إلى رقمية أولا . لذلك من السهل استخدام الأطراف الرقمية الاعتيادية بالمنافذ portB,C,D . إذا تم استخدام الطرف d1(pin20) فى نظام active low (الشكل الأيمن) , يمكن للبرنامج تحديد موضع المفتاح كما يلى : - الكود:
-
If pin_d1 == 1 then
--switch on
else
-- switch off
end if
بينما للدائرة بالجانب الأيسر يمكن كتابة : - الكود:
-
If pin_d1 then
--switch on
else
-- switch off
end if
| |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الخميس 7 يونيو 2012 - 18:01 | |
| الدائرة الكهربية : البرنامج : الفكرة : الليد سوف يظل مضىء حتى بعد تحرير الزر الضاغط . أسهل طريقة لعمل ذلك هى استخدام عبارة التأخير . فى بداية البرنامج نحتاج لتعريف اتجاه البيانات لكل طرف مستخدم كما يلى : pin_d1_direction = input pin_d2_direction = output المفتاح متصل بالطرف d1 لذلك يكون هذا الطرف مدخل . الليد متصل بالطرف d2 لذلك يكون هذا الطرف مخرج . لتسهيل تذكر ما هو متصل بالطرف يمكنك تسمية الأطراف فى البرنامج كما يلى : var bit switch is pin_d1 var bit led is pin_d2 هذا يعنى أن "switch" يكافىء "pin_d1" وأن "led" يكافىء "pin_d2" . كما أن المترجم يفهم أن "on" تكافىء "high" و "off" تكافىء "low" . البرنامج يكون بالشكل : - الكود:
-
-- JAL ver
include 16f877a -- target PICmicro
-- This program assumes a 20 MHz resonator or crystal
-- is connected to pins OSC1 and OSC2.
pragma target clock 20_000_000 -- oscillator frequency
-- configuration memory settings (fuses)
pragma target OSC HS -- HS crystal or resonator
pragma target WDT disabled -- no watchdog
pragma target LVP disabled -- no Low Voltage Programming
--
enable_digital_io() -- disable analog I/O (if any)
-- define pins
pin_d1_direction = input
pin_d2_direction = output
--
var bit switch is pin_d1
var bit led is pin_d2
-- initial condition
led = off
-- loop
forever loop
if pin_d1 then -- condition
-- switch is on
led = on
_usec_delay(3_000_000)
led = off
end if
end loop
| |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الخميس 7 يونيو 2012 - 18:06 | |
| المفتاح ذو الوضعين Two way switch : فى هذا المشروع يتم استخدام مفتاح ضاغط لتوصيل وفصل ليد . يسمى هذا المفتاح أيضا "مذبذب ثنائى الاستقرار" . معلومات فنية : المطلوب : عند الضغط على الزر الضاغط يتم توصيل (إضاءة) الليد إذا حدث وكان فى حالة الفصل (مطفأ) , أو فصله إذا حدث وكان موصل (مضىء) . الصعوبة تكمن فى عدم معرفة الحالة الراهنة لليد هل هو موصل أم مفصول ؟ يمكننا عمل ذلك ببساطة عن طريق التحقق من حالة طرفه ثم تغيرها . سوف نستخدم " عامل operator المعكوس NOT أو المكمل "المتمم" Complement " . هذا العامل يقوم بتحويل الواحد "1" إلى معكوسه أو المكمل له وهو الصفر "0" وتحويل الصفر إلى معكوسه أو المكمل له وهو الواحد ويرمز له بالرمز "!" . لتوضيح ما يفعله هذا العامل نستخدم جدول الحقيقة التالى : نظرا لأن الطرف الرقمة يمكن فقط أن يكون له أحد حالتين ,الصفر أو الواحد , ( 0 or 1 ) يمكننا تغيير حالته كما يلى : - الكود:
-
pin_d2 = ! pin_d2
أو عند استخدام الاسماء المستعارة يكون : - الكود:
-
led = ! led
نتيجة لذلك فإن القطعة الصغيرة للكود التالى سوف تقوم بتوصيل وفصل الليد فى كل مرة يتم الضغط فيها على المفتاح الضاغط : - الكود:
-
if switch then
led = ! led
end if
هذا البرنامج سوف يعمل , لكنك لن ترى عمله بالطريقة التى ترغب فيها . فحتى قبل أن ترفع أصبعك من على المفتاح فإن الليد سوف يقوم بالتوصيل والفصل ألاف من المرات ولا أحد يستطيع تخمين إلى أى وضع ينتهى . لهذا السبب فإن البرنامج فى حاجة إلى انتظارك حتى ترفع أصبعك من على المفتاح قبل أن يقوم بفعل أى شىء . تستخدم حلقة صغيرة حيث يدور البرنامج حولها حتى لا يكون هناك ضغط على المفتاح بعد : - الكود:
-
while switch loop
end loop
المشكلة المتبقية هى "الارتدادات" bouncing . عندما تقوم بالضغط على المفتاح فإن التلامسات المعدنية يحدث بها ذبذبات أو ارتدادات . خلال زمن حدوث الارتدادات يتم فصل وتوصيل التلامسات عدة مرات . أنت لن تلاحظ ذلك , لكن الميكروكونترولر يشعر ويتأثر بها . سوف يراها كسلسلو من عمليات التحويل بين التوصيل والفصل on/off . فترة تأخير قصيرة تكون كافية للتخلص من هذا التأثير . الكود التالى يبين ذلك : - الكود:
-
if switch then
led = ! led
while switch loop
delay_10ms(1)
end loop
end if
استخدام العبارة led = ! led بها مخاطرة بسيطة . حتى تعمل هذه العبارة يحتاج البرنامج أولا معرفة الحالة الراهنة للطرف . دعنا نفترض أنك جعلت الطرف فى الحالة المرتفعة , وأن هذا الطرف يتصل بمكثف كبير , والذى يجب أن يتم تفريغه قبل أن يتحول فعليا إلى الحالة المرتفعة ( هذاالمكثف كحمل يؤدى إلى هبوط الحهد) . إذا حدث عند ,هذه اللحظة, أن قام الميكروكونترولر بالتحقق من حالة الطرف فسوف يجدها منخفضة حتى يتم شحن المكثف . إذا كان الحمل ضخم بما فيه الكفاية فإن الطرف لن يصل أبدا إلى الحالة المرتفعة .بالقطع تزداد حدة خطورة الحالة كلما تغيرت حالة الطرف بسرعة . نتيجة لذلك من المفضل استخدام متغير "كوسيط" كما يلى : - الكود:
-
flag = ! flag
pin_d2 = flag
بالطبع تحتاج أولا تعريف المتغير flsg كما يلى : | |
|
| |
F.Abdelaziz عقيد
عدد الرسائل : 639 تاريخ التسجيل : 20/05/2009
| موضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) الخميس 7 يونيو 2012 - 18:11 | |
| الدائرة الكهربية : البرنامج : عند تشغيل البرنامج يجب التأكد من أن الليد فى حالة الفصل off بالعبارة led = off . شكل البرنامج كما يلى : - الكود:
-
-- JAL 2.0.4
include 16f877a -- target PICmicro
-- This program assumes a 20 MHz resonator or crystal
-- is connected to pins OSC1 and OSC2.
pragma target clock 20_000_000 -- oscillator frequency
-- configuration memory settings (fuses)
pragma target OSC HS -- HS crystal or resonator
pragma target WDT disabled -- no watchdog
pragma target LVP disabled -- no Low Voltage Programming
--
enable_digital_io() -- disable analog I/O (if any)
var bit switch is pin_d1
var bit led is pin_d2
-- define pins
pin_d1_direction = input
pin_d2_direction = output
led = off
forever loop
if switch then
led = ! led
while switch loop
_usec_delay(10000)-- 10 ms
end loop
end if
end loop
النرد (زهر الطاولة) Dice : | |
|
| |
| برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language) | |
|