برمجة اي ميكروكنتروللر وبأية لغة برمجة كانت : اسمبلي او سي او بيزك ... تمر من مراحل أساسية ثلاث:
1- كتابة المسار الخطي flowchart , Organigramme يحدد مراحل تنفيذ برنامج تشغيل الميكروكنترولر.
2- إعداد ملف HEX : كتابة الكود وترجمته ببرنامج خاص( Compiler) بعد ضبط الاعدادات الضرورية
3- نقل الملف Hex الى شريحة المتحكم بواسطة برنامج خاص ومبرمجة مناسبة وجهاز حاسوب
في الموضوع التالي الذي سيغطي ان شاء الله عدة مشاركات ، سنتعرف على أسلوب جديد في البرمجة :
البرمجة بواسطة رموز وأشكال هندسية محددة واضحة الدلالة يحولها "فلوكود" الى تعليمات برمجية بلغة السي واسمبلي ثم 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 .
ملف المشروع :
تحتاج لبرنامجين للتعلم الاول أساسي وهو برنامج فلوكود للبرمجة والمحاكاة ..
والثاني مكمل وهو البرنامج الشهير بروتوس لرسم الدوائر الالكترونية ومحاكاتها..
لتنزيل فلوكود مباشرة اضغط هنا :
موقع Flowcode :
السلام عليكم أخى العزيز
هناك مشكلة واجهتنى وهى التى اضعت فيها القت الكثير حتى يأست من ايجاد الحل وهى كاتالى:
عندما
ادخل المفتاح على احد اطراف ( 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 ميكروثانية كما بالمثال ام ما هو زمن التأخير المناسب والمطلوب.
نعم اخي العزيز تضيف ماكرو متكون من 4 "تعليمات فارغة" ..
(لو كنا نبرمج بالاسمبلي لوضعنا 4 تعليمات nop تؤدي نفس المهمة ) :
الماكرو ليس ضروري يمكنك وضع الاربع تعليمات مباشرة لكن في هذا تعب لامبرر
له ..لاتنس ان كل الماكروات التي عندك ، بها توقيت يجب ان يستبدل .. هذه
ميزة اضافة ماكرو كما تعرف..
بعد اكمال المهمة ارسل لي الملف وبه ستختتم هذه المرحلة وسيبقى فقط اعطاء خلاصة ..
االسلام عليكم
أخى العزيزشكراً
لقد انتهيت من إضافة زمن التأخير وقد عمل البرنامج بشكل طبيعى والملف من
ولكنى لم الاحظ الفرق بين 4 ميكروثانية والوضع الأول 1 ملى ثانية واعتقد ان
هذا منطقى لأن العين البشرية لا تلاحظ الفرق ولكن اعتقد الميكروكنترولر
يقدر يلاحظ الفرق بكل دقة. وطبعا من المعروف أن تقليل زمن التأخير كما
فعلنا يؤدى الى تسريع دورة العد بالنسبة ل pulse و ايضا ل cycle لكن
السؤال ما هى العواقب السلبية التى يمكن ان تحدث من زيادة زمن التأخير. فى
انتظارك شكرا لك وتقبل تحياتى
[center]اخي العزيز لاتوجد اية عواقب سلبية فقط يجب ضبط الحسابات وخاصة مراعاة
pulse اصغر من cycle
و Cycle اصغر من256
واسهل طريقة ان نعطيه القيمة 100 ..
وبذلك يصبح تحديد السرعة بنسب مائوية بين زمن الجهد الاعلى والجهد الادنى
للزمن الدوري الذي يمثله المتغير cycle..علما بأن العداد Pulse هو الذي
نضبط به زمن النبضة PWM اي النسبة المائوية للجهد +5 فولت من الزمن الدوري
الذي يحدده المتغير Cycle
مثال: 4 سرعات مختلفة
25%
50%
75%
90%
----------------
الحقيقة ان الملف الاخير يوضح المستوى الجيد الذي وصلت اليه والفضل يرجع لله تعالى فله الحمد والشكر..
نتابع بإجراء بعض التعديلات التي ستوجه المشروع الى الاستعمال الحقيقي :
في البداية لاحظت انك عملت خرجا خاصا لكل سرعة ..
هذه الطريقة ليست معمولا بها، لانها لا تمكن من تغيير سرعة
المحرك..والمطلوب ان يكون الخرج موحدا تخرج منه السرعات الاربع حسب
الاختيار بالمفاتيح ..
إذن المرحلة الثانية هي إجراء تعديلات كالتالي:
1/ اجعل المنفذ A منفذ المفاتيح :
4 مفاتيح لتحديد 4 مستويات للسرعة والمفتاح الاخير اجعله يتحكم في المحرك
ON/OFF وذلك بجعل المخرج عند تشغيل المحركB7 =1 و = 0 عند توقيفه ..
(في رموز البرنامج اظن ان هذا المفتاح سيكون اول حلقة في سلسلة اختبار حالات المفاتيح الاخرى)
2/ اجعل B7 هو خرج PWM الذي تخرج اية سرعة تم اختيارها بالمفتاح الخاص بها
3/ اربط 4 ليدات مع 4 مخارج من المنفذ B
ليد على B0 تضيء عندما تختار السرعة 25%
ليد على B1 تضيء عندما تختار السرعة 50%
ليد على B2 تضيء عندما تختار السرعة 75%
ليد على B3 تضيء عندما تختار السرعة 90%
وعليه فإن الشكل النهائي للدارة سيكون كالتالي:
ارجو لك التوفيق
سلام عليكم
أخى العزيز
لقد انتهيت من إضافة التعديلات المطلوبة
وقد عمل البرنامج بشكل جيد والملف من
أرجو مراجعته وإبداء ملاحظاتك وتوجبهاتك شكرا لك وتقبل تحياتى
رائع أخي الدارس ..
اعيد لك ملف نفس المشروع بعدما أجريت عليه بعض التعديلات.. والمطلوب ان
تطلع عليه وتوضح ما هي التعديلات التي تمت وذكر السبب او الجدوى إن أمكن..
ارجو لك التوفيق
أخى العزيز
بالنسبة لزمن التأخير إذا كان فعلا 3 ميكروثانية فما الهدف من العد الى 8
ثم التصفير ولماذا العدد 8 بالذات فى حين ان 3 ميكروثانية تأتى ببساطة من
المرور على ثلاثة تعليمات أم أن الهدف هو ضرورة ادخال رمز الاختبار فى
ماكرو التأحير وبناء عليه لابد من اختيار حد أقصى له وهو العدد 8 وكان من
الممكن يكون عدد آخر . إن كان كذلك فبصفة عامة كلما احتجت الى ادخال توقبت
زمنى لابد ان يكون بنفس هذا الشكل (عداد - رمز اختبار - تصفير) .... هذه
النقطة غير واضحة بالنسبة لى . ارجو التوضيح وشكرا
اخي الدارس ..
1/
[right] العدد 8 ليس إلزاميا ..هو فقط مثال ..
العدد 8 = 8 تعليمات فارغة تقريبا من نوع: ctr_delay = 0
يعني زمن تاخير = 8 او 10 ميكروتانية بما ان المذبذب = 4 ميغاهرتز
واما طريقة العداد فليست الزامية كذلك. هي مفيدة اذا كان الزمن المطلوب كبيرا مثلا 15 ميكرو او 20 ميكرو .
تصور .. عدد التعليمات سيكون كبيرا.
كذلك فإن الطموح هو ان تتوفر لك يوما ما القدرة على ادخال زمن النبضات بواسطة كيباد () يجمع كل مفاتيح التحكم..
ومن بينها ادخال رقم للمتغير ctr_delay يحدد التردد المطلوب .
وعلى كل حال المهم انك تتوفر الان على خيارين وهذا احسن من خيار وحيد ..
---------------
2/
ا - المصطلحات التي اشتغلنا بها
ب - ملف المشروع بعد ادخال المصطلحات المتداولة :
Duty_cycle بدل Pulse
Period بدل cycle
السلام عليكم ورحمة الله وبركاته
أستاذى بارك الله فيك
برجاء المساعدة فى عمل مشروع ساعة رقمية والاظهار على وحدة العرض الرقمية وذالك بواسطة الفلوكود فكيف أبداء
المشروع يعتمد على المتحكم 16f628a
بارك الله لك على المجهود الطيب
وعليكم السلام ورحمة الله وبركاته
أخي ميدو شراقي في بداية الدورة تجد دارة ساعة رقمية لكن بعرض LCD..
اذا سمحت ترسل لي الدارة التي تريد الحصول على برنامج لها بفلوكود ..
تحياتي
السلام عليكم
أخى العزيز
لقد
قمت بتوليد ملف الهيكس من ملف فلوكود الخاص بالمشروع بعد التعديل وكذلك
قمت بتنفيذ المشروع على بروتس ولكن عندما قمت بعملية المحاكاة بعد تحميل
ملف الهيكس حصلت على الخطأ المبين بالصورة ولم اكتشف السبب
ارجو افادتى هل الخطأ فى توليد ملف الهيكس ام فى دائرة المحاكاة والثلاثة ملفات من شكرا لك وتقبل تحياتى
علا
أخى الكريم السبب هو ملف الهيكس وجدته فارع ولا ادرى لماذا ولكن قمت
بتوليده من جديد وحملته فى دائرة المحاكاة والحمد لله اشتغل بنجاح والملفات
من ولكن هناك بعض الملاحظات:
1- هناك مشكلة ظهرت من مفاتيح
السرعات المختلفة حيث انها من النوع Bush فندما اضغط عليها يدور المحرك
وبعد تركها يقف فقمت بدبديلها بمفاتيح toggel فهل هذا يجوز حيت ان المشكلة
تم حلها.
2- هناك رقم بجانب المحرك كما بالصورة يزداد تدريجيا مع
اختيار مفاتيح السرعة الأعلى فالأعلى هل هذا الرقم يمثل السرعة وان كان
كذلك فتعتبر وحدتها لفة/الدقيقة ومعنى اشارة (+) ان السرعة فى اتجاه واحد
وليكن مع عقارب الساعة مثلا.
3- هل هناك وسيلة للحماية من عدم الضغط على اكثر من مفتاح فى وقت واحد
حيث انه هناك مشاكل تحدث عند القيام بذلك.... شكرا لك وتقبل تحياتى
طريقة
استخدام مفتاح لحظي
في الملف
تجربة على فلوكود
وعلى بروتوس
ومسار خطي يساعد
على كتابة البرنامج بأية لغة برمجة أخرى
(اسمبلي، بيزك او سي..)
السلام عليكم
أخى العزيز/ بالنسبة لمشروع المفتاح اللحظى
يالنسبة لمشروع المفتاح اللحظى ارجو توضيح دور المتعير set المبين بالصورة
وكيف استغل هذه الفكرة فى حل مشكلة عدم تشغيل اكثر من مفتاح فى وقت واحد
فى مشروعى ..ارجو التوضيح عندما يكون عندك متسع من الوقت..
شكرا لك وتقبل تحياتى
وعليكم السلام أخي نور
المتغير set يسجل اول نبضة على المفتاح (يضيف واحد)..بهذا يبقى عندي أثر لتلك النبضة حتى ولو رفع الضغط على المفتاح ..
حاول اولا ان تستفيد من الطريقة لتحويل المفاتيح من ماسكة الى لحظية..وبعد ذلك ربما تظهر افكار حول ماتطلب ..
بالتوفيق
[center]
السلام عليكم إخوانىاليكم اخوانى الأعزاء بيان يوضح اطراف الميكروكنتوللرودائرة لبرمجته هذه صورة PIC16F84A توضح كافة أطرافه: حيث يظهر طرفا التغذية : الموجب: VDD --- Pin 14 = +5V الارضي (السالب): VSS ---Pin 5 = 0V --------------- 2/ دارة الاختبار
لم أتقيد بدارة معينة لان الاختلاف في برمجة المنافذ يختلف من تطبيق إلى
اخر.. نترك لكل تطبيق الحرية في برمجة هذا المنفذ اوذاك مرة مخرج واخرى
مدخل .. احيانا نربطه مع ليد واحيانا مع عارضة سباعية واحيانا مع سويتش
واخرى مع LCD ...وغير ذلك --------------- 3/ المبرمجة هناك عدة انواع من المبرمجات .. منها ما يشترى جاهزا وأفضلها منتجات MICROCHIP ومنها ما يمكن تصنيعه بسهولة مثل هاته المبرمجة المجربة: