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

أدوات الموضوع

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 16-09-2012, 11:17 PM المشاركة 1   
افتراضي الدورة الجديدة : الفصل السادس :المفاتيح ولوحات المفاتيح وأنظمة إدخال البيانات : Twitter FaceBook Google+



الدورة الجديدة : الفصل السادس :المفاتيح ولوحات المفاتيح وأنظمة إدخال البيانات :
تفاعل أنظمة الميكروكونترولر يتطلب إدخال بيانات للمستخدم . لهذا الغرض يمكنك استخدام أحهزة مثل المفاتيح switchesومصفوفة لوحة المفاتيح keyboards matrix , ولوحات المفاتيح PS2كالمستخدمة مع الكومبيوتر . هذا الفصل يركز على دراسة هذه الأجهزة .
6-1 استخدام المفاتيح الضاغطة pushbuttons :
التعامل مع المفاتيح الضاغطة هو الأكثر إنتشارا كواجهات interfacesلعمل المستخدم . المفاتيح الضاغطة بسيطة الاستخدام ورخيصة التكلفة فى التنفيذ .يمكن لهذه المفاتيح أن تكون من النوع المفتوح فى الوضع الطبيعى normally open أو مغلق فى الوضع الطبيعى normally closed لإحداث تأثير على سريان التيار . التفيذ بهذه الأجهزة معرض لتأثيرات الضوضاء الناتجة عن جهد الارتدادات عند تغيير حالتها . نظرا لسرعة معالجة الميكروكونترولر فإن تأثير هذه الضوضاء noiseيمكن أت يتسبب فى أن الميكروكونترولر يكتشف هذه التغييرات أو الحالات المنطقية الغير محددة.
لفهم هذا المفهوم , أنظر إلى الرسم البيانى التالى والذى يوضح هذه الضوضاء :







عندما يتغير الجهد عبر المنطقة الغير محددة الحالة يتولد تغيرات من الحالة المرتفعة إلى الحالة المنخفضة والعكس بالعكس كلما قام الميكروكونترولر بكشف نبضة . لتلافى تأثير الضوضاء أو الارتدادات يجب التوقفpause (النتظار) حتى تستقر الحالة المنطقية . متوسط هذه الفترة حوالى 1-5 milliseconds , وهذا يعنى أن زمن التأخير يجب أن يزيد عن هذه الفترة لتأكيد الاستقرار . التأخير المناسب لهذا التأثير أكبر من أو يساوى 10 milliseconds . هذا التأخير يجب تطبيقه بعد كشف أول تغيير بالمفتاح . لمعالجة المفاتيح الضاغطة والقضاء على تأثير الارتدادات يتضمن مترجم الميكروسى مكتبة الدالة Button , والتى يمكن العثور عليها فى تبويب لوحة مدير المكتبات .







هذه المكتبة بها دالة وحيدة :


كود:

unsigned short Button(unsigned short *port, unsigned short pin, unsigned short time, unsigned short active_state);
 
 






يوجد لهذه الدالة أربعة بارامترات كمداخل :
  • حيث المنفذ port هو المنفذ الموجود به الطرف المتصل بالمفتاح الضاغط .
  • والطرف pin هو الطرف المتصل بالمفتاح الضاغط .
  • والزمن time هو زمن الانتظار لتلافى تأثير الضوضاء والارتدادات بالملى ثانية .
  • والحالة الفعالة active_state هى الحالة المنطقية لطرف توصيل المفتاح التى نرغب أن تكون عليه أثناء تفعيله .
ويوجد لهذه الدالة بارامتر واحد كخرج وهو ما تعود به الدالة كنتيجة لتنفيذها وهو إما أن يكون صفر (0) إذا لم يتم تفعيل المفتاج ويكون 255 (أى قيمة غير صفرية) إذا كان فعال .
يمكن توصيل المفاتيح بطريقتين : "فعال فى الحالة المرتفعة" active high أو "فعال فى الحالة المنخفضة" , الشكل التالى يوضح ذلك :









قرار استخدام التفعيل فى الحالة المرتفع أو المنخفضة يؤجع للمبرمج والذى عليه أن يحلل كيف يؤدى إلى التبسيط والتوفير فى زمن التصميم . تذكر أنه فى أى حالة فإن التفعيل النهائى يمكن عكسها بالدالة .

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 16-09-2012, 11:22 PM المشاركة 2   
افتراضي


لدراسة وتحليل اسنخدام هذه المكتبة سوف نقوم بإنشاء مشروع جديد باستخدام الأجهزة الآتية :
PIC16F877A, BUTTON, RES, LED-RED كما فى الدائرة الكهربية التالية :







البرنامج :

كود:
void main (void) { // Configure ports. TRISB = 0xF0; PORTB = 0; while (1) // infinite loop. { if (Button (& PORTB, 7, 100, 0)) // evaluates the state of the button at RB7, active low. PORTB.F0 = 1; // Turn on the LED if the button is active. else PORTB.F0 = 0; // Turn the button if the button is not active. } }








عند تشغيل المحاكاة فإن الليد يجب أن يضىء عند الضغط على المفتاح الضاغط (فعال فى الحالة المنخفضة) وينطفىء عند تحرير المفتاح كما يلى :
















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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 16-09-2012, 11:25 PM المشاركة 3   
افتراضي


فى المثال التالى , يتحكم المفتاح الضلغط فى حالة الليد ويعمل كمفتاح ON-OFF أى الضغط على المفتاح الضاغط يؤدى إلى إضاءة الليد ويظل الليد مضىء طالما الزر مضغوط أن أننا برمجيا ننتظر حتى يتم تحرير المفتاح إنتظارا للضغطة التالية . عند الضغطة التالية يتحول الليد إلى حالة الفصل وأيضا ينتظر تحرير المفتاح وتتكرر العملية .


كود:
void main (void) { // Configure ports. TRISB = 0xF0; PORTB = 0; while (1) // infinite loop. { if (Button (& PORTB, 7, 100, 0)) // Evaluates the active state of the button.Active low { if (PORTB.F0 == 1) // switches the LED status. PORTB.F0 = 0; else PORTB.F0 = 1; // It is expected that this is not the active button. while (Button (& PORTB, 7, 100, 0)); //Wait up to release >> "high" >> false } } }





6-2 استخدام المفاتيح Dip-Switch


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 17-09-2012, 12:41 AM المشاركة 4   
افتراضي


6-2 استخدام المفاتيح Dual In-line Package ) Dip-Switch)
هذا النوع من المفاتيح هو أجهزة ميكانيكية تحتوى على العديد من المفاتيح فى غلاف واحد وأطراف التوصيل فى شكل صفين . تسمح هذه الأجهزة بتبسيط تحديد الخواص الثنائية binary لأنظمة الميكروكونترولر . هذه المفاتيح متوفرة تجاريا فى أحجام وألوان وأعداد متعددة . الشكل التالى يبين المظهر الطبيعى وطريقة العرض فى محاكى برنامج ISIS :









استخدام هذه المفاتيح يشبه المفاتيح الضاغطة ويمكن إعدادها بنفس الطريقة أى فعالة فى الحالة المرتفعة أو المنخفضة . الشكل التالى يبين طريقة التوصيل :










لفهم استخدام المفاتيح Dip-Switch مع الميكروكونترولر PIC , راقب وحلل المثال التالى :




كود:
void main (void) { // Configure ports. TRISB = 0; // All Outputs PORTB = 0;// All leds off TRISC = 255;// All Inputs while (1) // infinite loop. { // Store the value of the port C supplemented on port B. // ~ = bitwise complement (unary); inverts each bit PORTB = ~ PORTC; } }









نتيجة المحاكاة :








6-3 استخدام مصفوفة لوحة المفاتيح


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 17-09-2012, 12:12 PM المشاركة 5   
افتراضي


6-3 استخدام مصفوفة لوحة المفاتيح matrixUsing keyboards
تتطلب تطبيقات الميكروكونترولر فى بعض الحالات استخدام المفاتيح لإدخال البيانات العددية والوظائف وحتى حروف النصوص . الخيار الأكثر عمليا هو استخدام مصفوفة لوحة المفاتيح , والتى تتكون من مفاتيح ضاغطة مرتبة فى صفوف rows وأعمدة columns , لتقليل عدد التوصيلات الكهربائية . الشكل التالى يبين المظهر الطبيعى لمصفوفة لوحة مفاتيج 4X4 والدائرة المكافئة :

مصفوفة لوحات المفاتيح يمكن أن يكون لها أبعاد أكثر وفقا لحاجة المبرمج . يمكن تصنيع لوحات المفاتيح من غشاء مطاطى خاص ويوزع عليها رقم المفتاح لتلبى احتياجات المستخدم . مع ذلك فإن لوحة المفاتيح 4X4 تسمح لتكون واجهة كاملة بما يكفى للعديد من التطبيقات . عمل مصفوفة لوحة المفاتيح يتم بتفعيل واحد من الأربع أعمدة وفحص الصف الذى يتم تنشيطه , هذه العملية تحدد المفتاح الذة تم ضغطه , ويمكن الوضول إلى نفس النتيجة عن طريق عكس الأعمدة بالصفوف (تفعيل صف وفحص الأعمدة) .


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 17-09-2012, 12:14 PM المشاركة 6   
افتراضي


يحتوى مترجم الميكروسى برو على مكتبة للتحكم وقراءة لوحة المفاتيح 4X4 , هذه المكتبة بها ثلاثة دوال مخصصة لهذا الغرض .

دوال المكتبة التى تسمح باستخدام لوحة المفاتيح 4X4 هى :
الدالة الأولى :Keypad_Init (void): لتهيئة لوحة المفاتيح للاستخدام اعتمادا على المنفذ المصمم لهذا الغرض .
الدالة الثانية : char Keypad_Key_Press (void): هذه الدالة تقوم بإرجاع (العودة) قيمة من 0 إلى 16 , قيمة الصفر (0) تعنى أن لوحة المفاتيح بكاملها غير نشطة , والقيم من (1) إلى (16) تمثل 16 مفتاح متاح . هذه الدالة تقوم على الفور بإرجاع حالة المفتاح فى كل مرة يتم استدعاؤها .
الدالة الأخيرة : Keypad_Key_Click (void)char : سلوك هذه الدالة مطابق للدالة السابقة , والفرق الحيوى هو أنه إذا كشفت الدالة الضغط على المفتاح , فإنها بقيمته فقط عندما يتم تحرير هذا المفتاح .
لدراسة خواص لوحة المفاتيح هذه , سوف نستعرض مشروع جديد ببرنامج ISISوالذى يحتاج للأجهزة التالية : PIC16F877A, RES, BUTTON, LM016L. فقط يجب عليك إنشاء مشروع جديد بمترجم الميكروسى برو .
الشكل التالى يبين الدائرة الكهربية :





الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 17-09-2012, 12:20 PM المشاركة 7   
افتراضي


البرنامج التالى يقوم بقراءة لوحة المفاتيح وعرض نتيجة العودة على LCD . لهذا الهدف راقب وحلل البرنامج :


كود:
// Declaration 4x4 keyboard port char keypadPort at PORTC; // Define pins for LCD. sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D7 at RB3_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D4 at RB0_bit; // Definition of TRIS registers for LCD. sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D7_Direction at TRISB3_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D4_Direction at TRISB0_bit; void main (void) { // Declaration of variables. unsigned short key; char Text [20]; // Setup and initialization of PIC. Lcd_init (); // Initialize the LCD. Lcd_Cmd (_LCD_CURSOR_OFF); // Turns off the cursor. Lcd_Out (1, 1, "key"); // Print text. while (1) // infinite loop. { Key = Keypad_Key_Press (); // It reads the keyboard and stores the result in key. ByteToStr (Key, Text); // conversion from integer to text. Lcd_Out (2,1, Text); // Display the value returned by the keyboard. } }











المحاكاة : يمكنك مشاهدة القيم التى تعود عند الضغط على المفتاح , الشكل التالى يبين أنه عند الضغط على المفتاح المسمى 8فأن نتيجة العودة هى (10) وهى ترتيب المفتاح , بينما عندما لا يكون هناك مفتاح مضغوط فتظهر قيمة العائد بصفر (0).










لهذه الحالة المحددة بالمثال يتم مسح لوحة المفاتيح من اليسار إلى اليمين ومن أعلى إلى أسفل بدءا من المفتاح (1) ,إنتهاء بالمفتاح (D) . هذا يعنى أن عوائد دالة لوحة المفاتيح كما يلى :




الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 17-09-2012, 12:22 PM المشاركة 8   
افتراضي


حتى هذه النقطة يمكنك قراءة لوحة المفاتيح كسلسلة من الأعداد ولكنها لا تكافىء المفتاح المضغوط , لتصحيح هذا الوضع يجب تنقيذ دالة لفك شفرة القيم المعطاة بلوحة المفاتيح لكى تصبح حروف حقيقية لما تمثله المفاتيح . لهذا الهدف يتم عمل الدالة التالية عن طريق عبارة switch case لفك شفرة لوحة المفاتيح:


كود:
/ Function to decode the keyboard. char ReadKeyboard (void) { // Switch case structure to assess the values returned // by press keyboard. switch (Keypad_Key_Press ()) { case 1: return "1"; case 2: return "2"; case 3: return "3"; case 4: return "A"; case 5: return "4"; case 6: return "5"; case 7: return "6"; case 8: return "B"; case 9: return "7"; case 10: return "8"; case 11: return "9"; case 12: return "C"; case 13: return "*"; case 14: return "0"; case 15: return "#"; case 16: return "D"; default: return 0; // button not pressed. } }

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


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

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2024