قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 23-11-2015, 08:45 PM المشاركة 9   
افتراضي



المشروع الرابع : عجلة يوم الحظ السعيد Wheel of Lucky Day :
وصف المشروع :

• فى هذا المشروع يتم توصيل 7 ليدات إلى أطراف المنفذ PORT B(RB0-RB6) للميكروكونترولر . بالإضافة إلى توصيل مفتاح ضغط START بالطرف RB7 . يتم ترقيم الليدات بأيام الإسبوع كما هو مبين بالشكل التالى :



• عندما يبدأ البرنامج يتم توصيل وفصل الليدات بسرعة كبيرة فى شكل دائرى بحيث لا يمكن تمييز الليد الموصل فى أى لحظة .
• الضغط على المفتاح الضاغط يوقف الدوران وفقط آخر ليد ، والتى كانت فى حالة توصيل ، هى التى تظل مضاءة . اليوم المناظر لهذه الحالة هو يوم حظك السعيد فى الإسبوع .
المخطط الصندوقى :





مخطط الدائرة الكهربائية :





بشكل عام ، يمكن توصيل مفتاح الزر الضاغط إلى أطراف الدخل/الخرج للميكروكونترولر باستخدام طريقتين : "فعال فى الحالة المنخفضة" Active Low و "فعال فى الحالة المرتفعة" .

الشكل التالى يبين طريقة "فعال فى الحالة المنخفضة" :



فى هذه الحالة عندما لا يتم الضغط على المفتاح ، فإن طرف الدخل للميكروكونترولر يكون عند المنطق "المرتفع" HIGH . الضغط على المفتاح يسحب هذا الطرف إلى المنطق "المنخفض" LOW ، وهذا التغير فى الحالة يمكن تحديده (التعرف علية) عن طريق البرنامج .
الشكل التالى يبين طريقة "فعال فى الحالة المرتفعة" :





فى هذه الحالة عندما لا يتم الضغط على المفتاح ، فإن طرف الدخل للميكروكونترولر يكون عند المنطق "المنخفض" LOW. الضغط على المفتاح يسحب هذا الطرف إلى المنطق "المرتفع" HIGH ، وهذا التغير فى الحالة يمكن تحديده (التعرف علية) عن طريق البرنامج .

فى مخطط الدائرة الكهربائية للمشروع يتم توصيل 7 ليدات لأطراف المنفذ PORT B من RB0 إلى RB6 . ويتم توصيل مفتاح الزر الضاغط START إلى الطرف RB7 فى وضع "فعال فى الحالة المنخفضة" Active Low . فى هذا الوضع ، يكون طرف دخل الميكروكونترولر فى الوضع العادى عند المنطق "المرتفع" HIGH . عند الضغط على المفتاح الضاغط ، يتحول طرف الدخل إلى حالة المنطق "المنخفض" LOW .
وصف منطق البرنامج :




البرنامج :

كود:
/******************************************************************** Project4-a WHEEL OF LUCKY DAY --------------------------------- In this project 7 LEDs are connected to PORT B of a PIC16F877A type microcontroller (any other PIC microcontroller can also be used in this project). In addition, a push-button switch is connected to bit 7 of PORT B (RB7). The microcontroller is operated from an 8MHz crystal. In this project the LEDs are constructed in the form of a circle and the days of the week are written next to each LED. When the push-button switch is pressed the LEDs start rotating fast. Pressing the button stops while only one LED is lit. The day name corresponding to this LED is your lucky day!. ******************************************************************/ #define STRT PORTB.RB7 void main() { unsigned char Cnt = 1; // Initialise Cnt CMCON = 0x07; // To turn off comparators ADCON1 = 0x06; // To turn off analog to digital converters TRISB = 0x80 ; // RB0 - RB6 output, RB7 input PORTB = 0; for(;;) // DO FOREVER { while(STRT == 1); // Wait until START is pressed while(STRT == 0); // Wait until button is released for(;;) // FOREVER loop { PORTB = Cnt; // Send Cnt to PORT B Delay_Ms(50); // Delay 50ms Cnt = Cnt << 1; // Left shift Cnt if(Cnt == 0)Cnt = 1; if(STRT == 0)break; // If button is pressed } while(STRT == 0); // Wait until button is released Delay_Ms(1000); // Wait 1 second } }
• فى بداية البرنامج ، يتم تعريف الطرف RB7 على أنه START ، كما يتم إعلان تهيئة المتغير Cnt بواحد كقيمة ابتدائية ، وإعاداد الأطراف من RB0 إلى RB6 كمخارج رقمية والطرف RB7 كمدخل رقمى .
• بعد ذلك يتم إنشاء حلقة غير منتهية وينتظر البرنامج حتى يتم الضغط على المفتاح الضاغط (START==1) ثم ينتظر حتى يتم تحرير المفتاح ( SART==0).
• بمجرد أن يتم الضغط على المفتاح الضاغط ثم تحريره ، يتم تشكيل "حلقة داخلية" ، حيث يتم إضاءة الليدات وتدور بسرعة كبيرة . ، مع تأخير زمنى 50 ms بين كل خرج .
• داخل حلقة for الداخلية هذه ، يقوم البرنامج باختبار ما إذا كان المفتاح مضغوط أو لا
(START ==0) .
• عند الضغط على المفتاح ، يقفز البرنامج خارج الحلقة الداخلية وينتظر حتى يتم تحرير المفتاح . عند هذه النقطة ، آخر ليد يصل فى حالة توصيل ON .
• بعد تأخير واحد ثانية ، تتكرر العملية السابقة حيث ينتظر البرنامج من أجل الضغط على المفتاح مرة أخرى عند بداية البرنامج .


اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 23-11-2015, 09:45 PM المشاركة 10   
افتراضي


علاج الارتداد (الوثبات) فى المفاتيح Switch De- Bouncing
جميع المفاتيح الميكانيكية ليست مثالية فهى تظهر نوعا من مشاكل ارتداد التلامس . فكلما تم ضغط اثنين من التلامسات المعدنية لمفتاح معا ، سوف يكون هناك بعض الوقت القصير ( حوالى 10 ملى ثانية) قبل أن يستقر عمل التلامس الكهربائى . خلال هذه الفترة فإن تلامسات المفتاح تولد العديد من توصيل وفصل التلامسات ، كما هو مبين بالشكل التالى :



هذا النوع من السلوك غير مرغوب فيه فى الدوائر المعتمدة على الميكروكونترولر ، لأن حالة دخل المفتاح قد لا تكون معروفة بالضبط بعد الضغط على المفتاح .
يمكن القضاء على مشاكل ارتداد المفتاح إما بالأجهزة (الهاردوير) أو بالبرمجيات (السوفت وير) .
• فى الأجهزة ، عادة ما تستخدم دائرة مقاومة ومكثف RC كمرشح ، أو يستخدم قلاب (فليب فلوب) للقضاء على ارتداد تلامس المفتاح .
• فى البرمجيات ، عادة ما يتم إدراج تأخير صغير ( 10 ملى ثانية مثلا) بعد تغييرات حالة المفتاح ، من أجل القضاء على ارتداد تلامس المفتاح .
المترجم الميكروسى برو يوفر دالة مدمجة تسمى ‘button’ ، والتى تستخدم للقضاء على مشاكل ارتداد التلامسات . فمن المستحسن استخدام هذه الدالة عندما يكون مطلوبا قراءة حالة مفتاح ميكانيكى . هذه الدالة تكون بالصيغة التالية :

كود:
Button(&port, pin, time, active_state)
• حيث port و pin تحدد المنفذ والطرف المتصل بالمفتاح . هذا الطرف يجب تحديده كطرف دخل input
• و time هو الفترة الزمنية للقضاء على الارتداد بالملى ثانية .
• و active_state تكون (1) أو (0) وتحدد إذا كان طرف المنفذ فعال على المنطق (0) أو فعال على المنطق (1) .
الاستخدام النموذجى لهذه الدالة مبين بالمثال التالى :

كود:
Button(&PORTB, 0, 1, 1);
فى هذا المثال ، يتم توصيل المفتاح إلى الطرف RB0 للمنفذ PORTB يتم تحديد زمن القضاء على الارتداد بواحد ملى ثانية ، وطرف المنفذ يصبح عند المنطق (1) عند الضغط على المفتاح (فعال فى الحالة المرتفعة) .

تعديل برنامج المشروع الرابع باستخدام الدالة Button للقضاء على ارتداد تلامسات المفتاح :

كود:
/******************************************************************** Project4-b WHEEL OF LUCKY DAY ---------------------------------- In this project 7 LEDs are connected to PORT B of a PIC16F877A type microcontroller (any other PIC microcontroller can also be used in this project). In addition, a push-button switch is connected to bit 7 of PORT B (RB7). The microcontroller is operated from an 8MHz crystal. In this project the LEDs are constructed in the form of a circle and the days of the week are written next to each LED. When the push-button switch is pressed the LEDs start rotating fast. Pressing the button stops while only one LED is lit. The day name corresponding to this LED is your lucky day!. In this modified program the switch contacts are de-bounced using the mikroC "Button" function ******************************************************************/ void main() { unsigned int Cnt = 1; // Initialise Cnt CMCON = 0x07; // To turn off comparators ADCON1 = 0x06; // To turn off analog to digital converters TRISB = 0x80; // RB0-RB6 output, RB7 input PORTB = 0; for(;;) { while(Button(&PORTB, 7, 5, 1)); // Wait until button is pressed while(Button(&PORTB, 7, 5, 0)); // Wait until button is released for(;;) // FOREVER loop { PORTB =Cnt; // Send Cnt to PORT B Delay_Ms(50); // Delay 100ms Cnt = Cnt << 1; // Left shift Cnt if(Cnt == 0)Cnt = 1; if(Button(&PORTB, 7, 5, 0))break; // If button is pressed } while(Button(&PORTB, 7, 5, 0)); // Wait until button is released } }
• لاحظ أنه قد تم إزالة التأخير واحد ثانية من البرنامج ، حيث لا توجد مشاكل ارتداد التلامسات .
• لاحظ أنه إذا لم يتم تضمين مكتبة Button فى مشروعك ، قد تحصل على خطأ أثناء وقت الترجمة . لتضمين هذه المكتبة ، انقر على View -> Library Manager وقم بتمكين المكتبة Button بالنقر عليها . الوضع الافتراضى عن لإنشاء مشروع جديد هو ضم جميع المكتبات .

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 04:40 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)