وصف المشروع
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
هذا
المشروع يعتبر بدايه حقيقيه في عالم احتراف برمجه الميكرو كنتروللر وهذا المشروع
يعرض بعض المهارت البرمجيه التي تسهل علي المبرمج كتابه برنامج بسيط ومرتب ومفهوم
عند قرائته وفي نفس الوقت ذو امكانيات عاليه
الدائرة الكهربية
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
البرنامج
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
شرح البرنامج
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
يتكون هذا المشروع من عده
مشاريع
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
1- حركات الليدات متنوعه
2- PWM
3-
حركات
الليدات مع PWM
أولا:- حركات الليدات
المتنوعه
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
تم
تقسيم الحركات الي عده دوال وبرامج فرعيه صغيره
1- حركه ليد من اليسار
الي اليمين نستخدم الداله toright
2- حركه ليد من اليمين
الي اليسار نستخدم الداله toleft
3- حركه ليد من اليسار
الي اليمين والتجمع اليدات علي اليمين نستخدم الداله toright_stop
4- حركه اليد من اليمنين
الي اليسار والتجمع من جهه اليسار نستخدم الداله toleft_stop
5- حركه اليدين الاول من
اليسار والثاني من اليمين والوصول كل
منهما الي الجه المعاكسه نستخدم الداله tofromcenter
6- حركه اليدات كفرشر
سريع أضاءه ثم أنطفاء نستخدم نستخدم البرنامج الفرعي on_off
7- تبادل الأضاءه بين
اليدات نستخدم نستخدم البرنامج الفرعي convert
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
الداله toleft
الداله toleft
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
جدول يبين حركات الليدات في كل حلقه
{( void toright (int speed,short no
بدايه الداله وأستخدمنا فيها متغيرين الأول للتحكم في السرعه والثاني عدد
حركات اليد
PORTB=0b10000000 ;
ليبدأ اليد الحركه من ناحيه اليسار
for(i=0;i<no;i++){ PORTB>=1;
VDelay_ms(speed);}}
حلقه تكراريه يعتمد عدد دورتها علي المتغير noوفي كل دوره يتم أزاحه الخرج Bناحيه اليمين بمقدار خطوه واحده وهنا الزمن يتوقف علي الرقم الذي يوضع في
المتغير speed وطبعا
يكون بالمللي ثانيه
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
الداله toleft
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
نفس الداله السابقه ولكن هنا الأزاحه ناحيه اليسار
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
البرنامج
الفرعي on_off
نستخدم في هذا
البرنامج الفرعي حلقه تكراريه تقوم بأطفاء الليدات بزمن أكبر من زمن الأضاءه مع
تكرر ذلك عن طريق الحلقه التكرايه ليظهر وكأنه فلاشر كاميرا
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
البرنامج
الفرعي convert
نستخدم ايضا
حلقه تكراريه ووضع البورت Bفي البدايه كما 10101010ثم
عكس خرج البورت B عن طريق الأمر portb=~ portb وتكرار ذلك
عن طريق الحلقه التكراريه
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
الدالةtoright_stop
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
1- الحلقه i تتكرر
بمقدارالحلقه jوعدد دورات الحلقه i يعتمد علي قيمه j
2- الحلقه i تعمل علي ترحيل الليد المضئ بمقدار واحد ليد
تبعا للأمر q>>=1 ; وسوف يظهر ذلك علي خرج الميكرو للأننا كتبناالأمر التاليportb=q|k; وهذا الأمر يعمل مقارنه من نوع (أو) بين المتغير q و kثم أظهار النتيجه علي خرج الميكرو
3- بعد نهايه أول حلقه
تكراريه (i) وداخل الحلقه j يتم كتابه
الأمر k+=1; والذي يقوم بأضافه واحد منطقي الي المتغير k وتخزين الناتج داخل المتغير k نفسه للأننا
كتبنا هنا = ليصبح المتغير kبعد نهايه أول حلقه تكراريه ل j بهذه القيمه K=0b00000001
4- بعد نهايه ثاني حلقه تكراريه
(i) وداخل الحلقه j يتم كتابه الأمر k<<=1; والذي يقوم بترحيل ما بداخل المتغير kبمقدار
واحد بت وتخزين الناتج في نفس المتغيرليصبح قيمه kبعد
هذا الأمر K=0b00000010ثم يأتي الأمر k+=1; الذي يقوم
بأضافه واحد منطقي الي المتغير k ليصبح في النهايه المتغير يساوي هذه القيمه K=0b00000011
جدول يبين حركات الليدات في كل حلقه
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
الدالهtoleft_stop
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
نفس الداله السابقه ولكن هنا
سوف يتم الترحيل الي اليسار وبذلك تختلف أتجاهات الأزاحه وكذلك القيم المضافه علي
المتغيرات فهنا مثلا سوف يتم عمل مقارنه(أو) بين المتغير k والقيمه 128بدل من أن نضيف
واحد منطقي في الداله السابقه وايضا
المتغير q سوف يأخذ القيمه واحد بدلا من القيمه 0b10000000 في الداله السابقه
ليصبح الجدول كما يلي
ليصبح الجدول كما يلي
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
الداله tofromcenter
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــالداله tofromcenter
1- الحلقه i تتكرر
بمقدارالحلقه jوعدد دورات الحلقه i 8 دورات
2-
في بدايه الحلقه j وقبل البدء في الحلقه i يتم تعريف
كلا من المتغيرين qوk كما يلي
q=1;k=128;
3-
داخل الحلقه iيتم ترحيل المتغير q ناحيه اليسار بمقدار واحد وتخزين الناتج في المتغير نفسه
عن طريق الأمر q
<<=1; وترحيل
المتغير kناحيه اليمين بمقدار واحد عن طريق الأمر k >>=1;ثم عمل
مقارنه(أو) بين هذين المتغيرين وأظهار النيجه علي الخرج بالأمر PORTB=q|k;
4-
يتم عمل تكرار لهذه العمليه 8 مرات عن طريق الحلقه j
ثانيا:- PWM
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
أولا :: PWM: اختصار لـ Pulse Width Modulation . المقصود هو إرسال
موجة مربعة أو مستطيلة square wave هذه الموجة عبارة عن hi و low كما هو معلوم فمثلا لو لدينا مصدر جهد خمسة فولت وقمنا بعمل موجة منه
عن طريق المايكروكنترولر مثلا هذه الموجة قد تجعل معدل جهد الخرج أقل من خمسة فولت
( 4 فولت أو 3 أو 2.4 أو .. كما نريد ) ومن المعلومات المهمة الخاصة بالموتور dc أنه كلما قل الفولت الداخل إليه كلما قلت سرعته .
ثانيا : يمكننا عمل موجة
عبارة عن hi , low بينهم زمن انتظار
معين ومن خلال هذا الزمن يمكننا التحكم في الموجة الناتجة وبالتالي التحكم في
الفولت الناتج أو الطاقة الناتجة وبالتالي التحكم في سرعة الموتور لأن سرعة
الموتور تتغير إذا تغير جهد التغذية (فمثلا لو كان الجهد خمسة سيلف الموتور بسرعة
معينة ولو كان الجهد ستة فولت سيلف بسرعة أكبر وهكذا .. على حسب نوع الموتور.
أيضا يمكننا
التحكم في شدة الإضاءة كما يلي
ويمكن عمل ذلك في أي
نوع من أنواع كما بمشروعنا حيث نقوم
بأضاءه اليدات كلها بزمن أقل بكثير من زمن أطفائها هذا في البدايه ثم نقوم
بزياد هذا الزمن (زمن الأضاءه) حتي نساوي الزمنين (زمن الأطفاء وزمن الأضاءه) مع
ملاحظه أن كل مره نستخدم فيها زمن أطفاء
وزمن أضاءه معين نقوم بتكرار هذه الحاله عدد معين من خلال عمل لوب حتي
يتهيئ للعين أن اليد ضعيف الأضاءه ويزيد تدريجيا كما بالبرنامج كما يلي
ثالثا:- حركات الليدات PWM
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
في هذا البرنامج نستخدم خاصيه مع تحريك اليدات يمين ويسار وأيضا بالتداخل وفكره هذا المشروع تعتتمد علي أننا سوف نضئ ثلاث ليدات متجاوره ولكن كل ليد بدرجه سطوع مختلفه فمثلا لو كانت الحركه ناحيه اليسار فأن أول ليد أتجاه اليسار سوف يكون مائل للسطوع واليد الذي بجواره سيكون ساطع والذي يليه يكون مائل للأطفاء مع تحريك ذلك سوف يطفي علي الحركه أنسيابيه جميله ويهيئ للعين أن حركه اليدات يتبعها زيل مثل النجوم الساقطه ولفهم أكثر هذه البرنامج ننظر الي الصوره التاليه
من الصور التاليه يتضح لنا أننا نتعامل مع خرجين للبورت بي مع حيث نقوم بعرض هذين الخرجين بزمن صغير جدا مع تكرار عرض هذين الخرجين ثم عرض الخرجين التاليين كما بالصور فينتج هذا الشكل كما بالشكل
ملاحظات
في هذا البرنامج نستخدم خاصيه مع تحريك اليدات يمين ويسار وأيضا بالتداخل وفكره هذا المشروع تعتتمد علي أننا سوف نضئ ثلاث ليدات متجاوره ولكن كل ليد بدرجه سطوع مختلفه فمثلا لو كانت الحركه ناحيه اليسار فأن أول ليد أتجاه اليسار سوف يكون مائل للسطوع واليد الذي بجواره سيكون ساطع والذي يليه يكون مائل للأطفاء مع تحريك ذلك سوف يطفي علي الحركه أنسيابيه جميله ويهيئ للعين أن حركه اليدات يتبعها زيل مثل النجوم الساقطه ولفهم أكثر هذه البرنامج ننظر الي الصوره التاليه
من الصور التاليه يتضح لنا أننا نتعامل مع خرجين للبورت بي مع حيث نقوم بعرض هذين الخرجين بزمن صغير جدا مع تكرار عرض هذين الخرجين ثم عرض الخرجين التاليين كما بالصور فينتج هذا الشكل كما بالشكل
ملاحظات
هنا أستخدمنا دوال تعبر عن أوقات مختلفه وذلك لتوفير المساحه في الذاكره
حيث أن أمر التأخير الزمني يأخذ حجم كبير في الذاكره وتكراره داخل البرنامج يستهلك
حجم كبير جدا في الذاكره ولذلك أستخدمنا هذه الحيله مع ملاحظه ايضا عند أستخدام
التأخير الزمني كداله يوفر في ذاكره البرنامج أما عند أستخدامه كتعريف جديد
بأستخدام define فأنه لا يوفر في ذاكره البرنامج كما بالصوره التاليه
برنامج المقاطعه
نستخدم هذا البرنامج
لتغير السرعه عن طريق مفتاح وذلك بكل ضغطه علي المفتاح نقوم بزياده كلا من متغيرات
الخاصه بالسرعه (الزمن)وهي t1 ,t2
,t3حيث يقوم البرنامج بزياده هذه المتغيرات بقدر ثابت عند كل ضغطه
ليست هناك تعليقات :
إرسال تعليق