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

   

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 12-06-2011, 03:05 AM المشاركة 33   
افتراضي



بارك الله فيك استاذ العزيز ماشاء الله دروس ممتازة جزاك الله كل الخير

أخى الكريم

شكرا جزيلا لك


بارك الله فيك

مع تمنياتى بدوام التوفيق

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 12-06-2011, 03:26 AM المشاركة 34   
افتراضي


التجربة الرابعة :
الدخل INPUT
إضافة مفتاح ضاغط واستخدام ماكروهات المكونات Component Macros :

"أضواء متحركة جهة اليمين وجهة اليسار "

الدائرة الكهربية :







التغيير الوحيد عن التجارب السابقة هو إضافة مفتاح ضاغط متصل لالطرف RA2 مع مقاومة الجذب لأسفل pull-down resistor .

تمهيد :

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 12-06-2011, 03:27 AM المشاركة 35   
افتراضي


تمهيد :
هذه التجربة أمتداد (توسعة) للتجربة السابقة بإضافة مفتاح ضاغط لتغيير إتجاه تتابع الإزاحة بسجل المنفذ PORTC .
تلعب المفاتيح الميكانيكية دورا هاما وعمليا فى جميع أجهزة الكومبيوتر وفى تطبيقات المعالجات الدقيقة والميكروكونترولر . المفاتيح الميكانيكية غير مكلفة وبسيطة وفعالة . ومع هذا فإن المفاتيح يمكن أن تكون مصدر للضوضاء الكهربائية بدرجة مرتفعة . تظهر الضوضاء بسبب فعل الغلق والفتح والذى نادرا ما ينتج إنتقال كهربائى نظيف . يتم التوصيل والقطع عدة بل وربما مئات المرات قبل استقرار المفتاح فى حالته النهائية .هذه المشكلة تعرف بارتدادات المفتاح switch bounce . هذه الظاهرة ينتج عنها وجود فترة زمنية تتغير فيها حالة طرف المدخل / المخرج المتصل بالمفتاح بين الحالة المرتفعة والحالة المنخفضة مرات عديدة قبل أن تنحصر هذه الارتدادات .
بعض هذا النشاط المتقطع ناتج عن الارتدادات الفعلية لتلامسات المفتاح . وأيضا تلامسات المفتاح تكون غير تامة النعومة . عندما تتحرك التلامسات تجاه بعضها البعض فإن العيوب والشوائب على الأسطح تسبب إنقطاع الاتصال الكهربائى .النتيجة إرتدادات المفتاح . نتيجة هذه الارتدادات قد تترواح ما بين مجرد الازعاج والكارثة . الحل التقليدى استخدام دائرة ترشيح مثل دائرة المقاومة والمكثف أو من خلال مسجلات إزاحة . هذه الطرق ما زالت فعالة ولكنها تؤدى إلى إضافة فى التكاليف وفى التركيبات . علاج الارتدادات Debouncing بالبرمجيات يتجنب هذه الزيادة .
أحد الطرق البسيطة لعلاج إرتدادات المفتاح هى مراقبة المفتاح بأخد عينة من حالته حتى تستقر الإشارة أو الاستمرار فى أخذ العينة حتى لا يتم كشف أى إرتدادات . ما هى طول فترة إستمرار أخذ العينة ذلك يتطلب بعض البحث . مع ذلك فإن 5mS عادة تكون كافية فى حين ما زال المفتاح يعمل بالسرعة الكافية بحيث لا يستطيع المستخدم ملاحظة ذلك .
على سبيل المثال فى هذا التطبيق يتم جذب الطرف المتصل بالمفتاح الضاغط للحالة المنخفضة باستخدام المقاومة 10 K لتوصيلة بالطرف VSS (الأرضى) . مقاومة الجذب لأسفل لضمان أن حالة الطرف سوف تظل منخفضة طالما أن المفتاح غير مضغوط للقضاء على حالة التحول نتيجة الضوضاء . بمجرد الضغط على المفتاح يتم توصيل (قصر) الطرف بالجهد VDD ليصبح فى الحالة المرتفعة . عندئذ يتم برمجيا تنفيذ تأخير زمنى بالقيمة 5 mS حتى تستقر حالة المفتاح من أى ارتدادات . بعد التأخير يتم برمجيا اختبار حالة الطرف مرة أخرى فأن كانت حالته مازالت مرتفعة يتم تأكيد حالة الضغط برمجيا حيث يتفاعل البرنامج تبعا لذلك . وإلا اعتبر المفتاح غير مضغوط .

الخطوات :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 12-06-2011, 03:30 AM المشاركة 36   
افتراضي


الخطوات :
1- إنشأ مشروع جديد كما سبق واحفظه باسم GPIO_Lab4.fcf فى المسار (على سبيل المثال) :


C:\Flowcode\GPIO_Labs\GPIO_Lab4


2- إنشأ صندوق لوظيفة التهيئة باستخدم رمز الحسابات وإنشأ المتغير LED_Output كما سبق وخصص له القيمة (0b00000000) كحالة ابتدائية . أنشأ متغير آخر باسم direction وخصص له القيمة ‘0’ .
3- بعد صندوق التهيئة مباشرة أضف رمز لحلقة غير منتهية .








4- هذا التطبيق يستخدم الطرف <RA2> بالمنفذ PORTA لربط المفتاح الضاغط . لذلك سوف نستخدم مكون المفتاح switch component . من شريط أدوات المكونات بقائمة المداخل اختار صف المفاتيح بالنقر عليه فيظهر فى نافذة اللوحة .
5- مكون المفتاح متصل تلقائيا فى الوضع الافتراضى بأطراف سجل المنفذ PORTA . مع ذلك هذا التطبيق يستخدم مفتاح مفرد واحد . لذلك فإن مكون المفتاح يحتاج إلى تعديل .افتح نافذة خواصه بالنقر بالزر الأيمن عليه واختيار الخواص الخارجية Ext Properties من القائمة فى السياق ( أو من نافذة الخواص بعد النقر عليه لاختياره أى تحديده) . يتم تحديد استخدام مفتاح ضاغط واحد وإدخال زمن معالجة الارتدادات 5mS وهذا يؤدى إلى تقليل الكود بمخطط المسار







إنقر على Apply للتنفيذ ثم OK لغلق النافذة .
6- يظهر الآن مكون المفتاح كمفتاح واحد فقط . هذا المفتاح متصل بالطرف <RA2> للمنفذ PORTA . لتهيئة المفتاح وتوصيله بالطرف RA2 من نافذة خواص المكون حدد التوصيل بالطرف RA2 .








إنقر على Done لغلق النافذة .

7- الخطوة التالية هى إضافة صندوق الوظيفة Get_Inputs للحصول على الحالة الحالية للمفتاح ( أى هل الحالة مرتفعة فيكون المفتاح مضغوط أو الحالة منخفضة فيكون المفتاح غير مضغوط ) . يمتلك الفلوكود العديد من الماكروهات المعرفة مسبقا والمتاحة للمكونات مثل مكون المفتاح المضاف فى الخطوة السابقة . للوصول إلى تلك الماكروهات نسنخد رمز ماكرو المكون
Component Macro icon . إنقر واسحب واسقط رمز ماكرو المكون من شريط الرموز فى مخطط المسار داخل حلقة While .
8- إنقر نقرا مزدوجا على ماكرو المكون لفتح نافذة خواصه وغير الاسم المعروض إلى Get_Inputs . اختار SWITCHbank(0) لتحديد اختيار المفتاح ثم اختار الماكرو ReadState من نافذة الماكرو .الماكرو ReadState يقرأ حالة مفتاح منفرد ويحدد ببايت بالبارامتر
WhichSwitch " أى مفتاح " . الماكرو يعود بايت تكون قيمته بصفر إذا كان المفتاح مفتوح أو تكون قيمته بواحد إذا كان المفتاح مغلق . فى خانة البارامتر Parmeters: حدد ‘0’ وهو المفتاح الذى يتم قراءته (المفتاح الأول ضمن صف المفاتيح) . وفى خانة العائد
Return ValueBYTE) إنسخ المتغير direction بالنقر على الزر variable واختياره من قائمة المتغيرات .








إنقر على الزر OK لغلق النافذة .


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 12-06-2011, 03:35 AM المشاركة 37   
افتراضي


9- مثل التجربة السابقة سوف يتم بناء صندوق وظيفة القرار Decide باستخدام ماكرو .إنشأ ماكرو جديد كما فعلنا سابقا . ضع له الاسم Shift والوصف “Description of new macro:” الذى تراه مناسبا .






10- يقوم هذا الماكرو أولا باختبار ما إذا كان المتغير direction مرتفعا للدلالة على إنضغاط المفتاح . إذا كان كذلك يتم إزاحة البيانات الموجودة بالمتغير LED_Output جهة اليسار بموقع خانة واحدة .إذا كان المتغير direction منخفضا يتم إزاحة البيانات الموجودة بالمتغير LED_Output جهة اليمين بموقع خانة واحدة . كما فى التجربة السابقة يتم أولا اختبار شرط ملأ الإزاحة (لليمين أو لليسار) للمتغير LED_Output بأصفار . وفى النهاية يتم اختبار حالة جميع خانات المتغير LED_Outputبأصفار (كما كانت فى بداية الحلقة ) وإن كانت كذلك يتم إعادة تهيئة المتغير LED_Output بالقيمة ‘0b00000001’.








الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 12-06-2011, 03:38 AM المشاركة 38   
افتراضي


11- نعود إلى مخطط المسار الرئيسى ونضيف رمز ماكرو تحت صندوق الوظيفة Get_Inputs مباشرة . غير الاسم المعروض إلى Decide واستدعى الماكرو Shift.
12- أضف رمز خرج جديد تحت رمز الماكرو السابق وغير الاسم المعروض إلى Do_Outputs وخصص (إنسخ) محتويات المتغير LED_Output للمنفذ PORTC .
13- أخيرا أضف رمز تأخير Delay icon إلى مخطط المسار تحت Do_Outputs مباشرة وغير الاسم المعروض إلى Timing وحدد زمن التأخير بواحد ثانية .
14- الشكل النهائى لمخطط المسار كما فى الشكل التالى :






  • ترجم المشروع وتأكد من عدم وجود أخطاء .


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


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 12-06-2011, 12:49 PM المشاركة 39   
افتراضي


التجربة الخامسة :
إضافة مقاطعة Interrupt واستيراد ماكروهات Importing Macros المفتاح الضاغط من التجربة السابقة .
ملحوظة :
تقوم برمجبات الفلوكود تلقائيا بتهيئة خانات سجلات التحكم فى المقاطعة والمؤقت نتيجة لتهيئة الرموز الخاصة بها فلا يضطر المستخدم لعمل ذلك .
سوف نستخدم المقاطعة الخارجية عند الطرف RB0 /INT للميكروكونترولر PIC16F877A .

الدائرة الكهربية :





تمهيد :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 12-06-2011, 12:50 PM المشاركة 40   
افتراضي


تمهيد :
هذه التجربة تعتبرإمتداد للتجرة السابقة بلإضافة مفتاح ضاغط للمقاطعة بتعديل متغير الاتجاه direction .
أيضا سوف يتم استيراد الماكرو Shift من التجربة السابقة إلى مشروع الفلوكود الحالى .
فى التجربة السابقة تم استخدام الطرف PORTA<RA2> لاختبار حالة مستوى جهده كدلالة على أنضغاط المفتاح . هذه الطريقة تسمى “Polling” "اقتراع – انتخاب " . هذه الطريقة تستخدم احيانا فى اختبار حالة خانة فى سجل لكنها قد تكون غير كافية للتطبيق ومن ثم ظهرت طريقة المقاطعة .
المقاطعات توفر وسيلة للإشارة للمعالج بأن هناك مهمة يجب تنفيذها على الفور. تخيا أن هناك مفتاح إيقاف إضطرارى على جزء من ماكينة . يجب على الماكينة الاستجابة الفورية للإيقاف وبدون أى تأخير عند تفعيل المفتاح . لتحقيق هذاه المهمة نفترض أن هناك ميكروكونترولر مدمج فى تطبيق وتستخدم المقاطعة . عندما تستقبل وحدة المعالجة المركزية الموجودة بالميكروكونترولر إشارة إعلام بحدوث مقاطعة هلى الفور يوقف ما يقوم بفعله و "يخدم" “services” المقاطعة . خدمة المقاطعة تنطوى على تمفيذ كود معرف عن طريق المستخدم والمصاحب لمقاطعة معينة .
كل ميكروكونترولر يمتلك مقاطعات معينة مرتبطة به والتى تبدأ نتيجة حدث محدد . السؤال : لماذا لا توجد المقاطعات فى جميع الأحوال ؟ الإجابة : لأن المقاطعة تحتاج إلى دوائر خاصة إضافية داخلية مما يسبب أرتفاع التكاليف .
الطرف RB0 / INT بالميكروكونترولر PIC16F877A (على سبيل المثال) هو المختص بالمقاطعة الخارجية . هذه المقاطعة يمكن بدؤها إما بمستوى جهد يتحول من مرتفع إلى منخفض high-to-low أو يتحول من منخفض إلى مرتفع low-to-high على الطرف RB0 .
عند وقوع حدث محدد وتكون المقاطعة قد تم إعدادها عندئذ تقوم وحدة المعالجة المركزية بتنفيذ ماكرو تم إعدادة وإنشاءه مسبقا فى المشروع خصيصا لهذه المقاطعة . ماكرو المقاطعة هذا سوف يحتوى على كود تحويل متغير الاتجاه المستخدم فى التجربة السابقة .

الخطوات :



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