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

   

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



البرنامج الثامن










البرنامج التاسع







البرنامج العاشر



اعلانات

khamed tabet
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 311
نشاط [ khamed tabet ]
قوة السمعة:
قديم 19-02-2012, 12:00 AM المشاركة 18   
افتراضي


شكرااا لك يا لمهندس عبد العزيز شرحك كان روعة D-;

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 19-02-2012, 01:42 PM المشاركة 19   
افتراضي


شكرااا لك يا لمهندس عبد العزيز شرحك كان روعة D-;
أخى الكريم

شكرا جزيلا لك

بارك الله فيك

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


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 19-02-2012, 01:43 PM المشاركة 20   
افتراضي


التعامل مع المداخل والمخارج الأساسية :
مقدمة :
سوف نتناول "قراءة" المداخل الرقمية من المفاتيح الضاغطة push button switch ( كعينة للحساسات الرقمية).
المدخل الرقمى له قيمتان فقط : القيمة واحد 1 أوالقيمة صفر 0 .
سوف يتم قراءة حالة المفتاح المتصل بالطرف RC0 (كمثال لحساس رقمى ) وعند كل مرة يتم الضغط عليه يتم تحويل الليد المتصل بالطرف RD0 (كمثال لجهاز خرج ) بين حالتى التوصيل والفصل . أى عند الضغطة الأولى يضىء الليد ON وعند تحرير الضغط يظل الليد على حالته (الإضاءة) ON , ثم عند الضغطة الثانية ينطفىء الليد OFF وعند تحرير الضغط يظل الليد على حالته (عدم الإضاءة) OFF ويتكرر هذا العمل بتكرار الضغط .
هذا البرنامج يمثل تشغيل (توصيل) ON وتبطيل (فصل) OFF أى جهاز بمفتاح ضاغط واحد حيث يمكن توصيل ترانزستور و ريلاى مكان الليد وتوصيل الجهاز بتلامسات الريلاى .

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





نظرية العمل :
فى الوضع العادى (الابتدائى) يكون المفتاح مفتوح (منفصل) ومن ثم يكون الطرف RC0 فى الحالة المرتفعة لاتصاله بالجهد الموجب خلال المقاومة 10K .
عندالضغط على المفتاح يتصل الطرف RC0 بالأرضى ويقوم الميكروكونترولر بقراءته كحالة منخفضة Low أى أن المفتاح الضاغط ما هو إلا طريقة تعطى الميكروكونترولر مدخلات رقمية (منطقية) بالقيمة 1 (تمثل أن المفتاح غير مضغوط) أو بالقيمة 0 (تمثل أن المفتاح غير مضغوط) .
ملاحظة :
يمكن عكس الحالة المنطقية بوضع المفتاح مكان المقاومة والمقاومة مكان المفتاح كما فى الشكل التالى (لكننا سوف نستخدم الحالة الأولى) :




البرنامج :
حيث أن المفتاح متصل بالطرف RC0 فيجب إعداده كمدخل فى الخانة المناظرة بسجل التحكم فى اتجاه البيانات TRISC .
المترجم MikroC يمتلك مكتبة دالة لروتين قراءة المداخل الرقمية (كالمفتاح أو أى حساس رقمى ON/OFF ) تسمى Button.

لنتذكر معا هذه الدالة :
مكتبة المفاتيح الضاغطةBUTTON LIBRARY :
توفر مكتبة BUTTON روتينات لكشف الضغط على المفاتيح الضاغطة ومعالجة مشكلة الارتدادات بها نتيجة اهتزازات التلامسات عند الضغط عليها .


صيغة دالة المفتاح الضاغط

  • نبدأ بكتابة اسم الدالة وهو كلمة Button: عائد (نتيجة) هذه الدالة متغيرنوع unsigned short (سعته بايت أى مداه( 0-255 وهو إما يكون 255 ( أى آحاد) أو يكون 0 (أى أصفار) .
  • ثمداخل قوسين (…,…,…,…) نكتب أربع بارامترات أو أدلة بينهما فاصلة .
  • البارامتر الأول :وهو مؤشرا للمنفذ المتصل به المفتاح *port وهو متغيرنوعunsigned short ثم فاصلة .
ثم البارامتر الثانى : وهو الطرف المتصل به المفتاح pin ومتغير نوع unsigned short وفاصلة . المنفذ port ويمكن أنيكون 0….7 . ويجب إعداد الطرف المتصل بالمفتاحكمدخل .
  • ثم البارامتر الثالث : وهو زمن time منع ظهور تأثير الارتدادات فى المفتاح بالملى ثانيةوهو متغير نوع unsigned short وفاصلة .
· ثم البارامتر الرابع : وهو حالة المفتاح وهو فعال active_state وهو متغير نوع unsigned short . ويمكن أن يكون 0 أو 1 ويحدد أن كانالمفتاح فعال فى الحالة المنطقية 0 أو الحالةالمنطقية 1 .

ملحوظة :
المؤشرات Pointers
المؤشرات هي كائنات خاصةلحفظ (أو "الإشارة إلى ") عناوين بالذاكرة.
فيالمترجم mikroC PROيمكن الحصول على عنوان كائن بالذاكرةعن طريقالعامل( & ) ,
ونستخدم العامل (*) كمؤشر للوصول إلىالكائن المشار إليه.



التعليق على االبرنامج :


كود:
/* Toggle an LED with a Push Button Switch PIC16F877A* 4MHz, MCLR Enabled, PWRT Enabled, WDT OFF */
// Define the LED * RD0 and push button switch * RC0 sbit LED at RD0_bit; //RD0_bit == PORTD.B0 sbit Switch at RC0_bit; //RC0_bit == PORTC.B0
// Macros for Button() function #define Switch_Pin 0 // BUTTON at pin 0 of PORTC #define Switch_Port PORTC//BUTTON at PORTC #define Debounce_Time 20 // Switch Debounce time 20ms
void main() { TRISD = 0; // PORTD All Outputs TRISC = 0b11111111; // PORTC All Inputs LED = 0; // Initial condition do { if (Button(&Switch_Port, Switch_Pin, Debounce_Time, 0)) { if (!Switch) // Check the button press again after the debounce time { LED = ~LED; }
while (!Switch); // Wait until the button is released } } while(1); // Infinite Loop }
1- رأس (مقدمة) البرنامج على شكل تعليقات تبدأ بالرمز "/* "وتنتهى بالرمز " " */

2- تعريف الطرف RD0 (المتصل به الليد) باسم يسهل تتبع وفهم البرنامج وهو LED . هذا الطرف هو البت صفر من سجل وظائف خاصة وهو المنفذ PORTD لذلك نستخدم كلمة وتعريف المفتاح المتصل بالطرف RC0 باسم Switch .

ملحوظة : فى الميكروسى برو يمكن التعامل مع البتات المفردة بعدة طرق منها , على سبيل المثال , RD0_bit وهى نفسها PORTD.B0 .

3- تعريفات بارامترات دالة المفتاح باستخدام الموجه #define: فطرف المفتاح يستبدل بالصفر (RC0 هى البت صفر بالمنفذ PORTC ) , ومنفذ المفتاح هو PORTC لأن المفتاح متصل بالطرف RC0 . واستبدال زمن ملاشاة الارتدادات بالقيمة 20 وتعنى 20 ملى ثانية . أما بارامتر الحالة الفعالة فلا يحتاج لتعريف فالحالة الفعالة للمفتاح : عندما يضغط يكون الطرف عليه صفر .
4- بداية الدالة الرئيسية وفيها :
  • إعدادات البداية :
# جميع أطراف المنفذ PORTD كمخارج .
# جميع أطراف المنفذ PORTC كمخارج .
# تصفير خانة الخرج لتهيئتها لبدء العمل والليد فى حالة فصل OFF .
  • الدخول فى حلقة غير منتهية do{….} while(1) وفيها :
# اختبار حالة (وضع) المفتاح بتعبير الشرط if(……) فأن تحقق الشرط الموجود بين القوسين كانت نتيجته الواحد يتم تنفيذ التعليمات التى تليه .هذا الشرط يعنى "قراءة حالة المفتاح المتصل بالمنفذ والطرف المحددة وبعد عمل التأخير الزمنى " هل هو فى الحالة الفعالة 0 أى هل هو مضغوط ؟ فإن كان فى الحالة 0 أى كان مضغوطا تصبح نتيجة (عائد) دالة المفتاح حقيقية أى 1 ومن ثم يتحقق شرط if ويتم تنفيذ التعليمات التابعة له.
# شرط if آخر : "هل حالة المفتاح أى الطرف RC0 بعد عكسها (بمؤثر المعكوس أو النفى ! ) تكون النتيجة حقيقية أى 1 " وحالة الطرف RC0 عندما يكون المفتاح مضغوط (وهو ما تسبب فى تنفيذ هذه التعليمة) هى الحالة المنخفضة وعكسها هى الحالة المرتفعة أى يتحقق أيضا شرط if وذلك للتأكد من حالة المفتاح بعد مضى زمن التأخير اللازم للتغلب على الارتدادات ما زالت فى وضع التوصيل ON ( حتى يستقر وضع المفتاح) , نتيجة لذلك يتم تنفيذ العبارة التابعة .

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

# يلى ذلك حلقة while (!Switch). أثناء الضغط على المفتاح يتحقق الشرط!Switch لذلك يظل البرنامج عند الجزء الخاص بهذا البرنامج بدءا من do طالما أن المفتاح مضغوط . فأذا تم تحرير المفتاح أصبح كل من شروط if ونتيجة!Switch غير متحققة ويخرج البرنامج ليجد while(1) فتتكرر العملية من البداية من do ليختبر المفتاح مرة أخرى ولكن نتيجة المرة التالية تكون عكس الخرج أى تحويله من حالة التوصيل إلى حالة الفصل . ويتكرر العمل .
البرنامج بطريقة أخرى :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 19-02-2012, 02:33 PM المشاركة 21   
افتراضي





كود:
bit oldstate; // Old state flag void main() { TRISC0_bit = 1; // set RC0 pin as input
TRISD0_bit = 0; // Configure as output PORTD = 0; // Initial PORTD value oldstate = 0;
do { if (Button(&PORTC, 0, 10, 1)) // Detect logical one = BUTTON NOT PRESSED ? { oldstate = 1; // YES > Update flag T0 1 } if (oldstate && Button(&PORTC, 0, 1, 0)) // Detect one-to-zero transition { PORTD = ~PORTD; //YES , Invert PORTD oldstate = 0; // Update flag TO 0 AGAIN } } while(1); // Endless loop }


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


يمكن إعادة كتابة البرنامج السابق بطريقة تسهل تتبع وفهم البرنامج بطريقة أسهل , فقط مجرد استخدام الموجه #define لتعريف دالة المفتاح فى حالة فصله باسم SWITCH_OFF وفى حالة الضغط عليه باسم SWITCH_ON كما يلى :





كود:
 
sbit LED at PORTD.B0;
#define SWITCH_OFF Button(&PORTC, 0, 1, 1)
#define SWITCH_ON Button(&PORTC, 0, 1, 0)
bit oldstate;                                    // Old state flag
void main() {
كود:
TRISC.B0 = 1; // set RC0 pin as input TRISD = 0x00; // Configure PORTD as output PORTD = 0x00; // Initial PORTC value oldstate = 0; do { if (SWITCH_OFF) oldstate = 1; // Detect logical one , Update flag if (oldstate && SWITCH_ON) { // Detect one-to-zero transition LED= ~LED; // Invert OUTPUT oldstate = 0; // Update flag } } while(1); // Endless loop }



الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 20-02-2012, 02:28 AM المشاركة 23   
افتراضي


التعامل مع المفاتيح الضاغطة والأصوات :
تناولنا المكتبة BUTTON والآن سوف نتناول مكتبة الصوت .

مكتبة الصوت Sound Library – وتدريب على توليد نغمات وتوزيع ألحان ميلودى
يوفر المترجم mikroC PRO مكتبة للصوت ليمد المستخدم بالدوال أو الروتينات الضرورية لعمل إشارات صوتية فى التطبيقات .
يحتاج توليد الصوت لأجهزة hardware إضافية مثل سماعة البيزو piezo-speaker .

1- الدالة أو الروتين Sound_Init "إعداد أو تهيئة الصوت"

الغرض :
أعداد أو تهيئة طرف الميكروكونترولر لتوليد صوت .

الصيغة :
  • نبدأ بكتابة اسم الدالة وهو Sound_Init (هذه الدالة من النوع الذى ليس له عائد (void . وبين قوسين نكتب بارامترات أو أدلة الدالة ويفصل بينهما بفاصلة وهنا يوجد بارامتران .
  • البارامتر الأول *snd_port: إشارة إلى المنفذ الذى سوف يتم إخراج الصوت منه وهو متغير من نوع char .
  • البارامتر الثانى snd_pin : هو الطرف الذى سوف يتم إخراج الصوت من خلالة وهو متغير من نوع char .
مثال :
تهيئة الطرف RC3 لإخراج صوت كما يلى :




2- الدالة أو الروتين Sound_Play "تشغيل الصوت"


الغرض :
توليد إشارة موجة مربعة على الطرف المطلوب .

الصيغة :
  • نبدأ بكتابة اسم الدالة وهو Sound_Play (هذه الدالة من النوع الذى ليس له عائد void ). وبين قوسين نكتب بارامترات أو أدلة الدالة ويفصل بينهما بفاصلة وهنا يوجد بارامتران .
  • البارامتر الأول : freq_in_hz : تردد الإشارة بالهرتز Hertz (Hz) . وهو متغير من نوع unsigned . فى الميكروسى برو نقصد عدد صحيح بدون إشارة unsigned (int) أى مداه
0 .. 65535
البارامتر الثانى : duration_ms : فترة دوام الإشارة duration بالملى ثانية (ms) .هو متغير من نوع unsigned .

مثال :
إخراج صوت بتردد 1KHz وفترة دوام 100ms كما يلى :





أقصى تردد يمكن إنتاجه :
Freq_max = Fosc/(80*3)
وأدنى تردد :
Freq_min = Fosc/(80*255)
قد يختلف التردد المتولد عن التردد المحدد بالبارامتر freq_in_hz نتيجة للعمليات الحسابية لأنها محدد بالأعداد الصحيحة .

تدريب :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 20-02-2012, 02:31 AM المشاركة 24   
افتراضي


تدريب :
استخدام مكتبة المفتاح الضاغط BUTTON ومكتبة الصوت الصوت فى توليد نغمات مختلفة فى سماعة بيزو .

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


البرنامج :



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