منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

التدريب الثالث : المفتاح عديم الارتداد :

اذهب الى الأسفل

التدريب الثالث : المفتاح عديم الارتداد : Empty التدريب الثالث : المفتاح عديم الارتداد :

مُساهمة من طرف Admin السبت مارس 05, 2016 5:57 pm

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

التدريب الثالث : المفتاح عديم الارتداد : 125

البرنامج :
بعد كتابة التعليقات لتوثيق التدريب نتبع الخطوات التالية :
1- نبدأ بإنشاء دالة الإعدادات اللازمة للتدريب :



الكود:


void init_port(void)
{
ANSEL = 0x00; //set port as digital I/O , not analog input
CMCON = 0x07; //shut off the comparator
TRISIO = 0x08; // 0b001000  = GP3 bit only as input
GPIO = 0x00; //make all pins low "0"
}


2- ثم إعلان متغير من نوع البت لحفظ حالة المفتاح السابقة لمقارنتها بحالته الراهنة  :



الكود:


bit oldstate;              // Old state flag
3- وتبدا الدالة الرئيسية باستدعاء دالة الإعدادات وتصفير بت متغير الحالة السابقة للمفتاح لتكون بصفر وندخل إلى حلقة التكرار :
void main() {
init_port();
oldstate = 0;
  do {



4- نبدا الحلقة باختبار حالة المفتاح ( التحول إلى الحالة المرتفعة)  عن طريق وضع "عائد" دالة المفتاح كشرط لعبارة if . إذا تحقق الشرط (عند الضغط على المفتاح يكون عائد دالة المفتاح بواحد ويكون عائدها بواحد أو true ) يتم تنفيذ عبارة الشرط وهى تحديث بت متغير الحالة السابقة للمفتاح ليكون بواحد كإشارة أو علامة على حالة المفتاح المضغوط (التحول من الحالة المنخفضة إلى الحالة المرتفعة تبعا لصيغة دالة المفتاح ) . لاحظ أن دالة المفتاح تحتوى على زمن تاخير 20 ملى ثانية لعلاج ارتدادات المفتاح .



الكود:


if (Button(&GPIO, 3, 20, 1)) {  // Detect logical one ie pressed button
      oldstate = 1;                // Update flag



5- مرة أخرى يتم عمل اختبار المفتاح ( التحول للحالة المنخفض) وتشكيل عبارة شرط if  . الشرط هذه المرة هو نتيجة عملية  AND ( ورمزها && ) بين حالة المفتاح السابقة والمخزنة ببت الحالة السابقة للمفتاح وبين نتيجة دالة المفتاح (عند التحول للوضع المنخفض) . فإذا كانت الحالة السابقة للمفتاح هى الحالة المضغوطة ( المرتفعة) وتلتها حالة راهنة غير مضغوطة ( منخفضة) كانت نتيجة الشرط صواب true ويتم تنفيذ عبارة الشرط , حيث يتم تحويل حالة أطراف المنفذ وتصفير بت متغير الحالة السابقة للمفتاح . بعبارة أخرى عند الضغط على المفتاح يتم تذكر هذه الحالة , ثم بعد تحرير المفتاح يتم تغيير حالة أطراف المنفذ من حالة الفصل off إلى حالة التوصيل on , وفى الضغطة التالية ثم التحرير يتم التحويل من حالة التوصيل on إلى حالة الفصل off وهلم جرا .



الكود:


if (oldstate && Button(&GPIO, 3,20, 0)) {
      // Detect one-to-zero transition ie press then release
      GPIO = ~GPIO;               // Invert GPIO
      oldstate = 0;               // Update flag
    }                     // beginning of a repeat loop



البرنامج :



الكود:


//EX3:Button : ON-OFF All output using PIC12F675
//4MHz internal clock
//Master Clear Enable : Disable
//Eng:F.Abdelaziz
//Date :05-03-2016

void init_port(void)
{
ANSEL = 0x00; //set port as digital I/O , not analog input
CMCON = 0x07; //shut off the comparator
TRISIO = 0x08; // 0b001000  = GP3 bit only as input
GPIO = 0x00; //make all pins low "0"
}

bit oldstate;              // Old state flag
void main() {
init_port();
oldstate = 0;
  while(1) {          // endless loop
    if (Button(&GPIO, 3, 20, 1)) {  // Detect logical one ie pressed button
      oldstate = 1;                // Update flag
    }
    if (oldstate && Button(&GPIO, 3,20, 0)) {
      // Detect one-to-zero transition ie press then release
      GPIO = ~GPIO;               // Invert GPIO
      oldstate = 0;               // Update flag
    }                     // beginning of a repeat loop
  }  
}

Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

- مواضيع مماثلة
» تدريبات كتاب برمجة الميكروكونترولر PIC بلغة السى والمترجم mikroC PRO : التدريب الثالث
» التدريب الثالث : إنشاء عداد بمفتاح ضاعط أو بحساس لعد الأشياء من “0” إلى “99” باستخدم وحدتى عرض سفن سيجمنت مع استخدام ترانزستورات ومع المترجم CCS C .
» مراجعة برمجة الميكروكونترولر PIC من خلال مشاريع الميكروكونترولر PIC16F877A مع الدايودات المشعة للضوء والمترجم ميكروسى برو :
» التدريب رقم 3  : إنشاء عداد ثنائى تصاعدى 3 بت :
» مدخلك الشخصى إلى الميكروكونترولر Your Personal Introductory Course :The PIC Microcontroller

 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى