- المواد المطلوبة
- فهم وحدة جويستيك:
- مخطط الرسم البياني:
- البرمجة لربط عصا التحكم:
- عرض المحاكاة:
- الأجهزة والعمل:
تلعب أجهزة الإدخال دورًا حيويًا في أي مشروع إلكترونيات. تساعد أجهزة الإدخال هذه المستخدم على التفاعل مع العالم الرقمي. يمكن أن يكون جهاز الإدخال بسيطًا مثل زر الضغط أو معقدًا مثل شاشة اللمس ؛ يختلف بناءً على متطلبات المشروع. في هذا البرنامج التعليمي سوف نتعلم كيفية التعامل مع عصا التحكم مع متحكم PIC الخاص بنا ، عصا التحكم هي طريقة رائعة للتفاعل مع العالم الرقمي وكان الجميع تقريبًا قد استخدموا واحدة للعب ألعاب الفيديو في سن المراهقة.
قد يبدو أن عصا التحكم هي جهاز متطور ، لكنها في الواقع مجرد مزيج من مقياسين للجهد وزر ضغط. ومن ثم ، فمن السهل جدًا التفاعل مع أي MCU بشرط أن نعرف كيفية استخدام ميزة ADC في MCU. لقد تعلمنا بالفعل كيفية استخدام ADC مع PIC ، ومن ثم سيكون مجرد حل لربط جويستيك. بالنسبة للأشخاص الجدد الذين سيتم اختيارهم ، يوصى بتعلم مشروع ADC أعلاه بالإضافة إلى مشروع تسلسل وميض LED لتسهيل فهم المشروع.
المواد المطلوبة
- PicKit 3 للبرمجة
- وحدة عصا الفرح
- PIC16F877A إيك
- 40 - حامل دبوس IC
- مجلس بيرف
- 20 ميجا هرتز كريستال OSC
- دبابيس Bergstik
- 220 أوم المقاوم
- 5-LEDs من أي لون
- 1 طقم لحام
- IC 7805
- محول 12 فولت
- توصيل الأسلاك
- اللوح
فهم وحدة جويستيك:
تتوفر أذرع التحكم بأشكال وأحجام مختلفة. يتم عرض وحدة جويستيك نموذجية في الشكل أدناه. إن عصا التحكم ليست أكثر من بضعة مقاييس فرق جهد وزر ضغط مُركب فوق ترتيب ميكانيكي ذكي. يتم استخدام مقياس الجهد لتتبع حركة X و Y لعصا التحكم ويتم استخدام الزر للاستشعار إذا تم الضغط على عصا التحكم. ينتج كل من مقاييس الجهد جهدًا تناظريًا يعتمد على موضع عصا التحكم. ويمكننا الحصول على اتجاه الحركة من خلال تفسير تغيرات الجهد هذه باستخدام بعض الميكروكونترولر. في السابق قمنا بتوصيل Joystick مع AVR و Joystick مع Arduino و Raspberry Pi.
قبل توصيل أي جهاز استشعار أو وحدة مع متحكم دقيق ، من المهم معرفة كيفية عمله. هنا يحتوي ذراع التحكم لدينا على 5 دبابيس إخراج ، اثنان منها للطاقة وثلاثة للبيانات. يجب أن تعمل الوحدة بجهد +5 فولت. تم تسمية دبابيس البيانات باسم VRX و VRY و SW.
يشير المصطلح "VRX" إلى الجهد المتغير على المحور X والمصطلح "VRY" يشير إلى الجهد المتغير في المحور الصادي بينما يرمز المصطلح "SW" إلى المفتاح.
لذلك عندما ننقل عصا التحكم إلى اليسار أو اليمين ، ستختلف قيمة الجهد في VRX وعندما نغيرها لأعلى أو لأسفل ، فإن VRY ستختلف. وبالمثل ، عندما نقوم بتحريكه قطريًا ، فسوف يختلف كل من VRX و VRY. عندما نضغط على المفتاح ، سيتم توصيل دبوس SW بالأرض. سيساعدك الشكل أدناه على فهم قيم الإخراج بشكل أفضل
مخطط الرسم البياني:
الآن بعد أن عرفنا كيفية عمل عصا التحكم ، يمكننا التوصل إلى استنتاج أننا سنحتاج إلى دبابيس ADC ودبوس إدخال رقمي لقراءة جميع دبابيس البيانات الثلاثة لوحدة جويستيك. يظهر مخطط الدائرة الكاملة في الصورة أدناه
كما ترون في مخطط الدائرة ، بدلاً من عصا التحكم ، استخدمنا مقياسين للجهد RV1 و RV3 كمدخلات جهد تناظري ومدخل منطقي للمفتاح. يمكنك اتباع الملصقات المكتوبة باللون البنفسجي لمطابقة أسماء المسامير وإجراء اتصالاتك وفقًا لذلك.
لاحظ أن المسامير التناظرية متصلة بالقناتين A0 و A1 وأن المحول الرقمي متصل بـ RB0. سيكون لدينا أيضًا 5 مصابيح LED متصلة كإخراج ، حتى نتمكن من إضاءة أحدها بناءً على اتجاه تحريك عصا التحكم. لذلك فإن دبابيس الإخراج هذه متصلة بـ PORT C من RC0 إلى RC4. بمجرد أن ننتهي من مخطط دائرتنا ، يمكننا المضي قدمًا في البرمجة ، ثم محاكاة البرنامج على هذه الدائرة ثم بناء الدائرة على لوحة توصيل ثم تحميل البرنامج على الجهاز. لإعطائك فكرة عن أجهزتي بعد إجراء الاتصالات أعلاه ، موضح أدناه
البرمجة لربط عصا التحكم:
في برنامج على التفاعل مع عصا التحكم PIC بسيطة ومباشرة إلى الأمام. نحن نعلم بالفعل ما هي المسامير التي يتصل بها جويستيك وما هي وظيفتها ، لذلك علينا ببساطة قراءة الجهد التمثيلي من المسامير والتحكم في LED الناتج وفقًا لذلك.
يتم تقديم البرنامج الكامل للقيام بذلك في نهاية هذا المستند ، ولكن لشرح الأشياء ، أقوم بتقسيم الكود إلى مقتطفات صغيرة ذات معنى أدناه.
كما هو الحال دائمًا ، يتم بدء تشغيل البرنامج عن طريق تعيين بتات التكوين ، فلن نناقش الكثير حول تعيين بتات التكوينات لأننا تعلمناها بالفعل في مشروع LED Blinking وهو نفس الشيء بالنسبة لهذا المشروع أيضًا. بمجرد تعيين بتات التكوينات ، يتعين علينا تحديد وظائف ADC لاستخدام وحدة ADC في PIC الخاص بنا. تم تعلم هذه الوظيفة أيضًا في كيفية استخدام ADC مع البرنامج التعليمي PIC. بعد ذلك ، يجب أن نعلن أي دبابيس هي مدخلات وأيها دبابيس إخراج. هنا يتم توصيل LED بـ PORTC لذا فهي عبارة عن دبابيس إخراج ودبوس Switch الخاص بعصا التحكم هو دبوس إدخال رقمي. لذلك نستخدم الأسطر التالية لنصرح بذلك:
// ***** تكوين الإدخال / الإخراج **** // TRISC = 0X00 ؛ // يستخدم PORT C كمنافذ إخراج PORTC = 0X00 ؛ // MAke جميع المسامير منخفضة TRISB0 = 1 ؛ // يتم استخدام RB0 كمدخل // *** نهاية تكوين الإدخال / الإخراج ** ///
و ليس من الضروري أن يعرف دبابيس ADC كمدخل دبابيس لأنهم عند استخدام وظيفة ADC سيتم تعيينه ك دبوس الإدخال. بمجرد تحديد الدبابيس ، يمكننا استدعاء وظيفة ADC_initialize التي حددناها سابقًا. ستقوم هذه الوظيفة بتعيين سجلات ADC المطلوبة وإعداد وحدة ADC.
ADC_Initialize () ، // تكوين وحدة ADC
الآن ، نخطو إلى حلقة while اللانهائية. داخل هذه الحلقة ، يتعين علينا مراقبة قيم VRX و VRY و SW وبناءً على القيم التي يتعين علينا التحكم فيها في إخراج الصمام. يمكننا بدء عملية المراقبة بقراءة الجهد التناظري لـ VRX و VRY باستخدام الأسطر أدناه
int joy_X = (ADC_Read (0)) ؛ // اقرأ المحور X لعصا التحكم int joy_Y = (ADC_Read (1)) ؛ // اقرأ المحور الصادي لعصا التحكم
سيوفر هذا الخط قيمة VRX و VRY في المتغيرين joy_X و joy_Y على التوالي. تعني الوظيفة ADC_Read (0) أننا نقرأ قيمة ADC من القناة 0 وهي دبوس A0. لقد قمنا بتوصيل VRX و VRY بدبوس A0 و A1 ولذا نقرأ من 0 و 1.
إذا استطعت أن تتذكر من البرنامج التعليمي ADC الخاص بنا ، فنحن نعلم أننا قرأنا الجهد التناظري ، فالموافقة المسبقة عن علم باعتبارها جهازًا رقميًا سوف تقرأها من 0 إلى 1023. وتعتمد هذه القيمة على موضع وحدة عصا التحكم. يمكنك استخدام مخطط الملصق أعلاه لمعرفة القيمة التي يمكنك توقعها لكل موضع في عصا التحكم.
لقد استخدمت هنا القيمة الحدية 200 كحد أدنى وقيمة 800 كحد أعلى. يمكنك استخدام أي شيء تريده. لذلك دعونا نستخدم هذه القيم ونبدأ في إضاءة مصابيح LED وفقًا لذلك. للقيام بذلك ، يتعين علينا مقارنة قيمة joy_X بالقيم المحددة مسبقًا باستخدام حلقة IF وجعل دبابيس LED عالية أو منخفضة كما هو موضح أدناه. ستساعدك سطور التعليق على فهم أفضل
إذا (joy_X <200) // انتقل Joy لأعلى {RC0 = 0 ؛ RC1 = 1 ؛} // توهج مؤشر LED علوي آخر إذا (joy_X> 800) // انتقل Joy لأسفل {RC0 = 1 ؛ RC1 = 0 ؛} // Glow Lower LED else // إذا لم يتم نقله {RC0 = 0 ؛ RC1 = 0 ؛} // أوقف كلا المصباحين
يمكننا أن نفعل الشيء نفسه بالنسبة لقيمة المحور ص أيضًا. علينا فقط استبدال joy_X المتغير بـ joy_Y والتحكم أيضًا في دبابيس LED التالية كما هو موضح أدناه. لاحظ أنه عندما لا يتم تحريك عصا التحكم فإننا نطفئ كلاً من مصابيح LED.
إذا (joy_Y <200) // انتقل Joy إلى اليسار {RC2 = 0 ؛ RC3 = 1 ؛} // توهج مؤشر LED يسار آخر إذا (joy_Y> 800) // انتقل Joy إلى اليمين {RC2 = 1 ؛ RC3 = 0 ؛} // Glow Right LED else // إذا لم يتم نقلها {RC2 = 0 ؛ RC3 = 0 ؛} // قم بإيقاف تشغيل كلا LED
الآن لدينا شيء أخير علينا القيام به ، علينا التحقق من المفتاح إذا تم الضغط عليه. يتم توصيل دبوس التبديل بـ RB0 حتى نتمكن من استخدام حلقة if مرة أخرى والتحقق مما إذا كان قيد التشغيل. إذا تم الضغط عليه ، فسندير مؤشر LED للإشارة إلى أنه تم الضغط على المفتاح.
إذا (RB0 == 1) // إذا تم الضغط على Joy RC4 = 1 ؛ // توهج متوسط LED آخر RC4 = 0 ؛ // إيقاف الصمام الأوسط
عرض المحاكاة:
يمكن محاكاة المشروع الكامل باستخدام برنامج Proteus. بمجرد كتابة البرنامج ، قم بتجميع الكود وربط الكود السداسي عشرية للمحاكاة بالدائرة. ثم يجب أن تلاحظ توهج أضواء LED وفقًا لموضع مقاييس الجهد. تظهر المحاكاة أدناه:
الأجهزة والعمل:
بعد التحقق من الكود باستخدام المحاكاة ، يمكننا بناء الدائرة على لوح الخبز. إذا كنت تتابع دروس الموافقة المسبقة عن علم ، فستلاحظ أننا نستخدم نفس لوحة الأداء التي تحتوي على PIC ودائرة 7805 ملحومة بها. إذا كنت مهتمًا أيضًا بصنع واحدة بحيث تستخدمها مع جميع مشاريع الموافقة المسبقة عن علم ، فقم بتوصيل الدائرة على لوحة الأداء أو يمكنك أيضًا بناء دائرة كاملة على لوح التجارب أيضًا. بمجرد الانتهاء من الجهاز ، سيكون شيئًا كهذا أدناه.
الآن قم بتحميل الكود إلى متحكم PIC باستخدام PICkit3. يمكنك الرجوع إلى مشروع LED Blink للحصول على إرشادات. يجب أن تلاحظ ارتفاع الضوء الأصفر بمجرد تحميل البرنامج. الآن استخدم عصا التحكم وقم بتغيير المقبض ، لكل اتجاه من اتجاه عصا التحكم ستلاحظ ارتفاع مؤشر LED الخاص به. عند الضغط على المفتاح الموجود في المنتصف ، سيتم إيقاف تشغيل مؤشر LED في المنتصف.
هذا العمل مجرد مثال ، يمكنك بناء الكثير من المشاريع المثيرة للاهتمام فوقه. يمكن أيضًا العثور على العمل الكامل للمشروع في الفيديو المقدم في نهاية هذه الصفحة.
آمل أن تكون قد فهمت المشروع واستمتعت ببنائه ، إذا كان لديك أي مشكلة في القيام بذلك ، فلا تتردد في نشره في قسم التعليقات أدناه أو كتابته على المنتديات للحصول على المساعدة.