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

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 03-03-2014, 09:20 PM المشاركة 1   
افتراضي مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو : Twitter FaceBook Google+



مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو :

المشروع الأول : وميض ليد Flashing LED :

وصف المشروع :
لعل هذا المشروع هو أبسط مشروع يمكن إنشاؤه . فى هذا المشروع ، يتم توصيل ليد إلى البت bit 0 للمنفذ PORT B (RB0) للميكروكونترولر PIC18F2550 (يمكن استخدام أى ميكروكونترولر آخر) . تردد الكريستال المستخدم 8MHz . الليد تومض بفترة زمنية واحد ثانية .

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





منطق وصف البرنامج :
· بداية البرنامج .
· تهيئة المنفذ .
· بداية حلقة لا نهائية .
· توصيل الليد .
· الانتظار واحد ثانية .
· فصل الليد . الانتظار واحد ثانية .
· نهاية الحلقة النهائية والعودة إلى بدايتها.
· نهاية البرنامج .





البرنامج :

كود:
/******************************************************************** Project1-a FLASHING LED In this project an LED is connected to bit 0 of PORT B (RB0) of a PIC18F2550 type microcontroller (any other PIC microcontroller can also be used in this project). The microcontroller is operated from an 8MHz crystal. The LED is flashed continuously with 1 second intervals. *******************************************************************/ void main() { ADCON1 = 0x0F ; // Configure RB0 (AN12) as digital TRISB = 0; // Configure PORT B as outputs for(;;) // FOREVER loop { PORTB.RB0 = 1; // Turn ON LED Delay_Ms(1000); // Wait 1 second PORTB.RB0 = 0; // Turn OFF LED Delay_Ms(1000); // Delay 1 second } }
ملحوظة :
· تم الوصول إلى بتات المنفذ بشكل منفصل باستخدام الصيغة PORTB.RB0 ، كما يمكن الوصول إليها باستخدام الصيغة PORTB.F0 ، أو الصيغة RB0_bit .
· لكتابة (تخصيص) قيمة لهذه البت تم استخدام الصيغة PORTB.RB0 = 1 ، يمكن أيضا استخدام الصيغة LATB.B0 = 1 .

اعلانات

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


تحسين البرنامج :

يمكن جعل البرنامج السابق أكثر سهولة فى القراءة والتتبع والفهم إذا تم استخدام عبارات توجيه المعالج ‘#define’ كما يلى :



كود:
/********************************************************************
Project1-b
FLASHING LED
------------------
In this project an LED is connected to bit 0 of PORT B (RB0) of a PIC18F2550 type microcontroller (any other PIC microcontroller can also be used in this project).
The microcontroller is operated from an 8MHz crystal. The LED is flashed continuously with 1 second intervals.
In this version of the program "define" pre-processor statements are used to make the program more readable.
************************************************************/
#define LED PORTB.F0                   // LED is bit 0 of PORT C
#define ON 1
#define OFF 0
#define Delay_1_second Delay_Ms(1000)

void main()
{
ADCON1 = 0x0F ;                             // Configure RB0 (AN12) as digital
TRISB = 0;                                         // Configure PORT B as outputs
for(;;)                                                 // FOREVER loop
{
LED = ON;                            // Turn ON LED
Delay_1_second;                   // Wait 1 second
LED = OFF;                           // Turn OFF LED
Delay_1_second;                   // Delay 1 second
}
}

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

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


تعديل البرنامج السابق لمحاكاة إضاءة المنار (الفنار) Lighthouse:
فى البرنامج السابق ، تم عمل وميض بسيط لليد بفترة زمنية واحد ثانية . يمكن تعديل هذا البرنامج ، على سبيل المثال لمحاكاة وامض أضواء المنار (الفنار) البحرى بغرض التعليم . أضوار المنار متعددة ولها خصائص مختلفة ، مثل الأضواء المتناوبة ، والثابتة ، والوامضة ، وسريعة الوميض وغيرها .
كمثال على ذلك سوف نقوم بتعديل البرنامج لمحاكاة إشارة أضواء المنارة المعروفة باسم VQ(3) 5s . تتكون هذه الإشارة من 3 ومضات قصيرة ، كل منها توصيل 500 ملى ثانية وفصل 100ملى ثانية ، وتتكرر كل 5 ثوانى كما فى الشكل التالى :
لاحظ أن فترة الإشارة هى 5 ثوانى . الثلاث ومضات تأخذ 1.7 ثانية ، وتترك 3.3 ثانية قبل أن يبدأ الوميض من جديد . يحتوى البرنامج على "حلقة متداخلة" ، حيث يتم تكرار الحلقة الداخلية 3 مرات ، وتكرار الحلقة الخارجية إلى الأبد .
منطق وصف البرنامج :
· بداية البرنامج .
· تهيئة المنافذ .
· بداية حلقة لا نهائية .
· حلقة تكرار 3 مرات .
· توصيل الليد .
· الانتظار 500 ملى ثانية .
· فصل الليد .
· الانتظار 100 ملى ثانية .
· نهاية حلقة تكرار 3 مرات .
· نهاية الحلقة الانهائية .
· نهاية البرنامج .

البرنامج :
كود:
/******************************************************************** Project1-c FLASHING LIGHTHOUSE LED ------------------------------------------ In this project an LED is connected to bit 0 of PORT B (RB0) of a PIC18F2550 type microcontroller (any other PIC microcontroller can also be used in this project). The microcontroller is operated from an 8MHz crystal. In this project the LED simulates the flashing of a lighthouse light having the characteristics: VQ(3) 5s where the light flashes 3 times with 500ms ON time and 100ms OFF time with a period of 5 seconds. *****************************************************************/ void main() { unsigned char i; ADCON1 = 0x0F ; // Configure RB0 (AN12) as digital TRISB = 0; // Configure PORT B as outputs for(;;) // FOREVER loop { for(i= 0; i < 3; i++) // Do 3 times { PORTB.RB0 = 1; // Turn ON LED Delay_Ms(500); // Wait 500 milliseconds PORTB.RB0 = 0; // Turn OFF LED Delay_Ms(100); // Wait 100 milliseconds } Delay_Ms(3300); // Wait 3.3 seconds } }


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 04-03-2014, 11:04 AM المشاركة 4   
افتراضي


المشروع الثانى : عداد ثنائى تصاعدى باستخدام الليدات :
وصف المشروع :

هذا المشروع أيضا بسيط ، حيث يتم توصيل 8 ليدات بالمنفذ PORT B للميكروكونترولر . إضاءة الليدات تشكل عداد ثنائى تصاعدى بفاصل واحد ثانية بين كل عدة . الشكل التالى يبين النموذج (النمط) الذى سيتم عرضه بواسطة الليدات :




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



منطق وصف البرنامج :
· بداية البرنامج .
· إعلان عن متغير العداد ، و تهيئة المنفذ .
· تصفير العداد .
· بداية حلقة غير منتهية .
· إرسال قيمة العداد إلى المنفذ .
· الانتظار واحد ثانية .
· تزايد العداد .
· نهاية الحلقة الغير منتهية .
· نهاية البرنامج .


البرنامج :

كود:
/******************************************************************** Project2-a BINARY COUNTING UP LEDs ----------------------------------------- In this project 8 LEDs are connected to PORT B of a PIC18F2550 type microcontroller (any other PIC microcontroller can also be used in this project). The microcontroller is operated from an 8MHz crystal. In this project the LEDs count up in binary from 0 to 255 and then back to 0 with one second delay between each count. ****************************************************************/ void main() { unsigned char Cnt = 0; // Declare and initialise Cnt ADCON1 = 0x0F ; // Configure PORT B as digital TRISB = 0; // Configure PORT B as outputs for(;;) // FOREVER loop { PORTB = Cnt; // SendCnt to PORT B Delay_Ms(1000); // Delay 1 second Cnt++; // Increment Cnt } }

· فى بداية البرنامج ، يتم إعلان متغير العداد Cnt وتعينه بصفر (0) . لاحظ أن جميع المتغيرات المستخدمة فى برامج لغة السى يجب أن يتم إعلانها فى بداية البرنامج .
· بعد ذلك يتم تهيئة أطراف المنفذ PORT B لتكون جميعها مداخل /مخارج رقمية .
· يتم إنشاء حلقة غير منتهية ، بداخل هذه الحلقة يتم إرسال محتويات العداد (المتغير Cnt ) إلى المنفذ PORT B .
· ثم الانتظار (التأخير) واحد ثانية .
· وتزايد محتويات العداد ، المتغير Cnt ، بواحد .
· ثم تكرار الحلقة الغير منتهية إلى الأبد .

ملاحظات على المتغير unsigned char Cnt:
1- لماذا نحتاج إلى المتغير ؟
نحتاج إلى كتابة (إرسال) قيمة إلى المنفذ PORT B ليتم عرضها على أطرافه كمخارج ، وأثناء عرضها نحتاج إلى تعديل هذه القيمة ، هذا التعديل يجب أن يتم فى مكان آخر بالذاكرة ، هذا المكان هو المتغير Cnt . ومن ثم نكتب صفر إلى هذا المتغير Cnt = 0 ثم ننسخه إلى المنفذ PORTB = Cnt ليعرضه كمخارج ، وأثناء العرض يتم التعديل فى المتغير ، تزايد بواحد ، Cnt++ ليكون Cnt = 1 ، وتتكر العملية بتكرار الحلقة الغير منتهية .

2- نوع وحجم المتغير unsigned char Cnt :
هذا المتغير نوع حرف char أى سعته (حجمه) واحد بايت أى 8 بت ، لذلك فإن محتوياته تكون من 0 إلى 255 ، وبالتالى سوف يتزايد فى كل تكرار للحلقة بواحد حتى يمتلء ( 0,1,2,3,……255) عند التكرار التالى سوف يتم تصفيره تلقائيا ويبدأ من الصفر مرة أخرى ليحقق الغرض من هذا البرنامج على وجه التحديد . كما يمكننا استخدام الصيغة التالية :

كود:
void main()
{
unsigned char Cnt = 0;                      // Declare and initialise Cnt
ADCON1 = 0x0F ;                             // Configure PORT B as digital
TRISB = 0;                                         // Configure PORT B as outputs

for(;;)                                                 // FOREVER loop
{

for(Cnt=0;Cnt<=255;Cnt++)
{
PORTB = Cnt;                                   // SendCnt to PORT B
Delay_Ms(1000);                               // Delay 1 second
}

}

}


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


تدريب :
تعديل البرنامج ليعد تنازليا بعد أن يصل إلى 255 .


كود:
void main() { unsigned char Cnt = 0; // Declare and initialise Cnt ADCON1 = 0x0F ; // Configure PORT B as digital TRISB = 0; // Configure PORT B as outputs
for(;;) // FOREVER loop {
for(Cnt=0;Cnt<255;Cnt++) { PORTB = Cnt; // SendCnt to PORT B Delay_Ms(1000); // Delay 1 second }
for(Cnt=255;Cnt>0;Cnt--) { PORTB = Cnt; // SendCnt to PORT B Delay_Ms(1000); // Delay 1 second }
}
}


أشرف عبدالشافى
:: عضو .. ::
تاريخ التسجيل: Dec 2010
الدولة: مصر
المشاركات: 39
نشاط [ أشرف عبدالشافى ]
قوة السمعة:0
قديم 05-03-2014, 07:44 PM المشاركة 6   
افتراضي


بارك اللة فيك مهندسنا


الصورة الرمزية م. أحمد الفيفي
م. أحمد الفيفي
:: مهندس ::
تاريخ التسجيل: Mar 2010
المشاركات: 19
نشاط [ م. أحمد الفيفي ]
قوة السمعة:0
قديم 05-03-2014, 08:56 PM المشاركة 7   
افتراضي



موضوع مفيد أخي م. فهد عبدالعزيز , بوركت




الصورة الرمزية عمرو محمدمحمد
عمرو محمدمحمد
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2006
الدولة: مصر
المشاركات: 88
نشاط [ عمرو محمدمحمد ]
قوة السمعة:0
قديم 07-03-2014, 10:13 AM المشاركة 8   
افتراضي


بارك الله فيك وجعلة فى ميزان حسناتك

إضافة رد

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

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

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


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

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