السلام عليكم
ان شاء الله تجدوا فيها ما يرضيكم ..
هذه الدورة تسعى الى تحقيق هدف محدد: جعل برمجة المتحكمات من نوع PIC في متناول الجميع ..
شرط التعلم بسيط : التفاعل مع الموضوع بوضع الاسئلة حول كل الجوانب التي تبدو غامضة ..
و بما ان التنظيم والتدرج مبادئ أساسية لكل تعلم ناجح
أولا ، وحتى يكون العمل هادفا
ثانيا .. حدد موضوع اي نقاش لهذه المرحلة حول:
المتحكم PIC16F84A
من الموضوعات السابقة
أرجو من الله التوفيق ..
تسلم عزيزي ..
فلوكود حقيقة بيئة قوية للبرمجة وهذه الدورة مخصصة للمبتدئين..
وساتابعها ان شاء الله حسب المنهجية المخططة لها: التدرج والترقي خطوة خطوة بدون مباغتة..
بعد ذلك سنرى ان كان من الضروري رفع وثيرة التعلم أم لا..
بالنسبة للاخوة الذين يبحثون عن مشاريع متقدمة يمكنهم دائما زيارة موقع ماتريكس ميلتيميديا الغني بمواضيعه وتطبيقاته ..
الموقع:
بسم الله الرحمن الرحيم
اشارة مرور لاتجاهين متقابلين
تنفيذ المشروع بطريقتين:
1- طريقة متسلسلة:
2- طريقة تعويض جزء معين ب " Macro":
في هذه الطريقة استعملت اثنين ماكرو Macro:
الاول يعوض مجموع تعليمات الاتجاه الاول والثاني مجموع تعليمات الاتجاه الثاني
الماكرو الاول اسميته sens_I والماكرو الثاني أسميته Sens_II
بناء المشروع :
تذكير :
- تعرف على أدوات البرنامج فلوكود
- تنصيب فولوكود وضبط الاعدادات الاولية: في اول صفحة من الدورة
1- الدارة :
2/ تحديد الأزمنة المتعاقبة للأضواء الثلاثة في الاتجاهين:
أهم ملاحظة:
زمن الضوء الأحمر في أحد الاتجاهين = زمن الاضاءة الخضراء + زمن وميض نفس الإضاءة الخضراء + زمن الإضاءة الصفر اء ، للاتجاه المقابل
3/ شرح طريقة ادراج ماكرو:
الماكرو macro تسمية للدلالة على جزء من برنامج جانبي او مصغر يتم انشاؤه في صفحة جانبية.. ويتم استدعاؤه في البرنامج العام او الرئيس Main (او Principal بالفرنسي)..
الطريقة في فلوكود:
- بعد فتح صفحة المشروع:
نضغط على ايقونة "macro" في شريط الادوات ثم على " new" او
"nouvelle" فتظهر لنا نافذة الماكرو الذي نريد انشاءه.
- من قائمة الرموز نسحب رمز /تعليمة الماكرو الى داخل البرنامج Main لاستدعاء الماكرو .
تفاصيل أكثر عن الماكرو : المشاريع السابقة
4/إضافة سويتش
مثال عن طريقة التحكم في تشغيل الدارة
عند اغلاق السويتش تبدأ الاضواء في العمل.. وعند فتحه تتوقف الدورة .. لكن ليس قبل ان تكمل آخر رحلة حفاظا على سلامة السير..
------------
ملف التجربة :
المتحكم : PIC16F84A
المذبذب: Quartz 4 Mhz
التطبيقات التعليمية:
TUT_XX
المنصبة مع البرنامج فلوكود:
في الملف :
Examples
تذكير : إعدادات Config بحاجة الى مراجعة وضبط ..الطريقة في أول صفحة من الدورة
أخي العزيز كل المطلوب استخدامه من رموز / تعليمات تجده بالصورة المرافقةحاول ان لا تستعمل غيرها[/size]
تكبير الصورةتصغير الصورة تم تعديل ابعاد هذه الصورة. انقر هنا لمعاينتها بأبعادها الأصلية.ننشئ متغيرين نسميهما في فلوكود مثلا:Pulseو Cycle ينطلقان بالعد في نفس اللحظة A (واحد وراء الثاني مباشرة) وفي نفس اللحظة كذلك تشعل ليد على المخرج A0 = 1Pulse تجعله يعد ثم يتوقف عند 125 وتطفئ الليد (A0 = 0)Cycle تجعله يعد حتى يصل الى 255 فتجعله = 0 وتصفر كذلك Pulse وكل ذلك في حلقة لا تنتهي..يمكن ان تعطي زمن تأخير 200 ميلي ثانية حتى نتمكن من ملاحظة العد ..Pulse و Cycle ينطلقان في نفس اللحظة معناه ان لا يكون الفارق الزمني بينهما عند الانطلاق كبيرا ..والاهم ان لا يفصل بينهما أي رمز زمن تأخير Delay على الاطلاق ..اما ان تفصل بينهما ببعض الرموز الاخرى فلا بأس اذا كان ذلك ضروريا ..سأسمي Pulse الاول و Cycle الثاني للتيسير..اذن الاول يعد 125 مرة الزمن 200 ميليتانية ويتوقف والثاني يحسب 255 مرة 200 ميليتانية ويتم تصفيرهما والبداية من جديد ..حلقة لا تنتهي ..الليد تشتعل طيلة المدة 125* 200ميليتانية التي يستغرقها العداد الأول في العد وتنطفئ ما تبقى من ال 255 أي 130 * 200ميليتانية النتيجة من كل هذا :الليد 125*200ميلتانية اشتعال + 130*200ميلتانية انطفاء ..والحلقة مستمرة..ملاحظة:بالنسبة للزمن سنختار 1 ثانية وللحدود فسنختار 5 للعداد الاول و15 للعداد الثاني حتى يسهل تتبع تنفيذ البرنامج كما ذكرت ..اخي نورنادر لقد اقتربت كثيرا من اكمال البرنامج تابع معي وبعد ان نحصل على النتيجة المطلوبة سأشرح الموضوع ان شاء الله ..ارجو لك التوفيق الحمد لله أخي انك توصلت الى فهم المطلوب والذي بنيت عليه الفكرة ..
كما تعرف دائما توجد اكثر من طريقة لتنفيذ مشروع واحد ..
اضع ملف التجارب التي سأنطلق منها للشرح في فرصة قادمة بإذن الله ..
هي مرحلة اولى لتحقيق الهدف ;الذي تناسبه الدائرة التالية بعد اضافة المفاتيح والعارضة وتغيير الزمن حتى يناسب الاستعمالات الحقيقية:
وقد استخدمت الطرف A4 كخرج لاشارة PWM
وفي انتظار اضافة مفاتيح التحكم في السرعة يمكن اجراء عدة تجارب على الملف PWMZC1_2
حيث يمكن اعطاء قيم مختلفة للحد الاقصى للمتغير Pulse محصورة بين 1 و100مثال:
25
50
75
100
ومن تم ملاحظة زمن اضاءة الليد في كل مرة ..
ملحوظة: قيمة Pulse لا يمكن ان تتجاوز قيمة المتغير Cycle (اخترنا لها 100 هذه المرة لكن يمكن ان تصل الى 255) ..
أخى العزيز
اذا اعتبرنا ان الوقت الذى يضىء فيه الليد هو فترة ON
والوقت الذى ينطفىء فيه الليد هو فترة OFF
فيكون السبب فى عدم زيادة الحد الاقصى ل pulse عن الحد الأقصى ل cycle
هو حتى لا تختفى فترة off لأن
cycle يكمل العد بعد انتهاء pulse هل استنتاجى فى محله.
/ نعم اخي العزيز اسنتاجك سليم .
في التطبيق الذي نناقشه يجب مراعاة العلاقة التالية:
2/ إذا سمحت ننتقل الى المرحلة التانية:
اضافة 4 مفاتيح على مداخل المنفذ A الشاغرة
المفتاح A0 يسند القيمة 25 للمتغير Pulse
المفتاح A1 يسند القيمة 50 للمتغير Pulse
المفتاح A2 يسند القيمة 75 للمتغير Pulse
المفتاح A3 يسند القيمة 90 للمتغير Pulse
اعتقد انك تمتلك الخبرة الكافية لاضافة تلك المفاتيح
واذا دعت الحاجة تستخدم ميزة Macro
التعديل مطلوب على هذا الملف
بالتوفيق ان شاء الله
السلام عليكم أخى العزيز
هناك مشكلة واجهتنى وهى التى اضعت فيها القت الكثير حتى يأست من ايجاد الحل وهى كاتالى:
عندما ادخل المفتاح على احد اطراف ( port A (0, 1, 2, 3 وده طبعا لأن pin 4 مشغولة وعند التشغيل يضاء الليد وبعد تجاوزه ينطفىء الليد مباشرة. فى حين عند استخدام المفتاح على اى بين من port B لاتوجد هذه المشكلة ويسير البرنامج عادى وطبعا انت طالب المفتاح على port A لأن من الواضح ان port B لها استخدام مستقبلى كما ذكرت عموما الملفين فى حالة port A & B من
ارجو اتصحيح... وتقبل تحياتى
اخي العزيز
اذا كانت اضافة المفاتيح الى المنفذ "أ" تخلق مشاكل انتقل الى المنفذ "ب"..المهم هو انجاز المشروع كما هو مطلوب ..
دعني أوضح لك الهدف المنشود حتى يسهل عليك انجاز التمرين 2 :
الملف الاول
)
فيه قيمة ثابتة مسندة للمتغير Pulse .. النتيجة ان سرعة اضاءة الليد ثابتة ولا نتمكن من تغييرها ..لكن المطلوب ان تكون عندنا امكانية تغيير هذه السرعة
كيف تتغير السرعة؟
اظنك تعرف الجواب : بتغيير القيمة المسندة للمتغير Pulse ..
اترك Cycle ثابت القيمة واسند له العدد 255
لذلك نريد تعديل المشروع بإدخال 4 مفاتيح بحيث نستطيع تغيير سرعة المحرك
المفتاح الاول يدخل مثلا العدد 25 كحد اقصى للمتغير Pulse
المفتاح الثاني يدخل مثلا العدد 50 كحد اقصى للمتغير Pulse
المفتاح الثالث يدخل مثلا العدد 75 كحد اقصى للمتغير Pulse
المفتاح الرابع يدخل مثلا العدد 90 كحد اقصى للمتغير Pulse
النتيجة المرجوة:
كل مفتاح يحدد سرعة إضاءة مختلفة..
خذ ما يكفي من الوقت أخي العزيز وإذا صادفتك مشاكل اعرضها للمناقشة
السلام عليكم
أخى العزيز
لقد انتهيت من تنفيذ المطلوب ومن ملفان التنفيذ والتوضيح
ارجو اعطائى الملاحظات... وتقبل تحياتى
رائع اخي
وإضافة ليدات مؤشرات السرعة على المنفذ "ا" فكرة رائعة كذلك..
بقي فقط ان نحل مشكلة توقيت النبضة :
اقل توقيت Delay في فلوكود (وفي كومبيلرات أخرى) = 1ms ..
نبضة بقيمة 1ms تعتبر زمنا كبيرا في عالم التحكم بال PWM
فما العمل؟
الحل :
نصنع بأنفسنا توقيتا في فلوكود ونستفيد من "زمن تنفيذ تعليمة" في المتحكم..
نحن نعرف ان بيك يعمل بتردد 4ميغاهرتز (4000000Hz) ينفذ كل تعليمة خلال زمن = 1µs ..
فإذن اذا كان عداد ما يعد فهو يستغرق في كل مرة يضيف فيها 1 ، زمنا قدره 1µs ..
وعليه فالمطلوب الان أخي نور نادر ان تصنع ماكرو جديد تسميه مثلا :delay
ثم تستبدل كل رمز Delay = 1ms في برنامجك ، بالماكرو الجديد ..مثال عن ماكرو بسيط للتوقيت:
كل ما هو مطلوب من الماكرو السابق ان "يضيع" لنا 4 ميكرو ثانية ..
أخى العزيز اشكرك جداً
لقد فهمت مما شرحته أن المطلوب هو تبديل كل زمن تأخير 1ms بتوقيت تأخير آخر عن طريق خاصية الماكرو هذا جميل
ولكن ما هى قيمة زمن التأخير المطلوب تبديله مع 1ms هل هو 4 ميكروثانية كما بالمثال ام ما هو زمن التأخير المناسب والمطلوب.
تذكير بمساهمة فاتح الموضوع :بسم الله الرحمن الرحيم
مراحل برمجة الميكروكنتروللر
برمجة اي ميكروكنتروللر وبأية لغة برمجة كانت : اسمبلي او سي او بيزك ... تمر من مراحل أساسية ثلاث:
1- كتابة المسار الخطي flowchart , Organigramme يحدد مراحل تنفيذ برنامج تشغيل الميكروكنترولر.
2- إعداد ملف HEX : كتابة الكود وترجمته ببرنامج خاص( Compiler) بعد ضبط الاعدادات الضرورية
3- نقل الملف Hex الى شريحة المتحكم بواسطة برنامج خاص ومبرمجة مناسبة وجهاز حاسوب
البرمجة ببرنامج Flowcode
في الموضوع التالي الذي سيغطي ان شاء الله عدة مشاركات ، سنتعرف على أسلوب جديد في البرمجة :
البرمجة بواسطة رموز وأشكال هندسية محددة واضحة الدلالة يحولها "فلوكود" الى تعليمات برمجية بلغة السي واسمبلي ثم Hex
هناك عدة برامج خاصة بهده الطريقة المتفردة من البرمجة ..من بينها برنامج Flowcode الذي بلغ درجة من التطور تشجع على اختياره لهذا الموضوع.
فلوكود برنامج يعلم البرمجة بأسلوب ميسر وفي نفس الوقت يمنح القدرة على إعداد و تنفيذ مشاريع متميزة وحقيقية بالميكروكنترولر ..
1/ تنصيب Flowcode V3 :
تنصبه كالمعتاد وتتابع بتنصيب المكمل PPPV3
لا تتجاوز هذه الخطوة بل اضغط على install PPP3.9 ثم تابع الخطوات المتبقية لاكمال التنصيب . و لتتأكد من تنصيب PPPV3
او لاعادة تنصيبه تتبع ما يلي
2/ مشروع برمجة ب Flowcode :
المشروع التالي لا ينجز الكثير .. اشعال ليد بمجرد توصيل الدارة بالتغذية +5 فولت ..
الهدف منه تعليمي يتمثل في التعريف بخطوات بناء مشروع وخاصة:
* اختيار متحكم مناسب : PIC16F84A هذه المرة
* اختيار تردد مذبذب المتحكم : 4000.000 هرتز مثلا (كريستالة 4Mhz)
* ضبط الاعدادات الاولية المعروفة ب Configuration
ا- الدارة : PIC16F84a+ كريستالة 4Mhz :
ب - أدوات العمل الاساسية :
نتعرف على ايقونات البرنامج الاساسية والمكونات والرموز من خلال الصورة
ننشأ مجلدا جديدا ثم نتبع الخطوات :
ج- بناء المشروع :
1- اعدادات شريحة المتحكم الاولية: Configure
هي إعدادات ضرورية لتوليد ملفات هيكس صالحة لتنفيذ مشروع حقيقي ..
2- اعداد برنامج اشعال الليد :
نتابع المراحل كالتالي ..
3- توليد ملف Hex:
انتهينا من التجربة على فلوكود ونريد الحصول على ملف Hex : نضغط على ايقونة Compile to Hex كما في الصورة
-يفترض ان التالية قد تمت سابقا وهو شرط نجاح البرمجة الفعلية .
ملاحظة:
-البرنامج المكمل PPPV3 هو من يمكنك (دون ان يظهر) من ضبط الاعدادات المذكورة وذلك عندما تضغط على ايقونة Chip ثم Configure
واذا لم يتعرف فلوكود على مكان PPPV3 ستظهر لك رسالة تحذيرية
المطلوب إذن: البحث في جهازك عن PPPV3 لادماجه مع فلوكود .
- للتذكير فإنك ستجد PPPV3 في جهازك شرط ان تكون قد نصبته سابقا مع فلوكود عندما طلب منك ذلك: install PPP3.9 .
ملف المشروع :