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

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

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

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

مُساهمة من طرف Admin الأحد نوفمبر 22, 2015 7:19 pm

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

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

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

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

البرنامج :

الكود:

[left]
/********************************************************************
Project1-a
FLASHING LED
In this project an LED is connected to bit 0 of PORT B (RB0) of a PIC16F877A 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()
{
CMCON = 0x07;             // To turn off comparators
ADCON1 = 0x06;           // To turn off analog to digital converters
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
}
}
[/left]

فى بداية البرنامج ، يتم إعداد جميع المنافذ كمنافذ دخل/خرج رقمى عام وذلك بتعطيل المقارنات بالعبارة
CMCON = 0x07 والمحول من تناظرى لرقمى بالعبارة ADCON1 = 0x06 (تختلف الإعدادات باختلاف الميكروكونترولر المستخدم) .
بعد ذلك يتم إعداد جميع أطراف المنفذ PORT B كمخارج بمسح السجل TRISB بالعبارة TRISB = 0 .
بعد ذلك يتم إنشاء حلقة غير منتهية ، وفيها يتم عمل وميض لليد بفترة زمنية واحد ثانية باستخدام الدالة Delay_Ms مع الوسيط بقيمة (1000) أى واحد ثانية .

ملحوظة :
• يمكن الوصول إلى بتات المنفذ بشكل منفصل باستخدام الصيغ التالية : PORTB.RB0 ، PORTB.F0 ، RB0_bit .
• لكتابة (تخصيص) قيمة لهذه البت تم استخدام الصيغة PORTB.RB0 = 1.

Admin
Admin

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

https://fathallaabdelaziz.forumarabia.com

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

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

مُساهمة من طرف Admin الأحد نوفمبر 22, 2015 7:34 pm

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

الكود:

[left]
/********************************************************************
Project1-b-FLASHING LED
------------------
In this project an LED is connected to bit 0 of PORT B (RB0) of a PIC16F77A 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()
{
CMCON = 0x07;             // To turn off comparators
ADCON1 = 0x06;           // To turn off analog to digital converters
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
}
}
[/left]

Admin
Admin

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

https://fathallaabdelaziz.forumarabia.com

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

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

مُساهمة من طرف Admin الأحد نوفمبر 22, 2015 8:20 pm

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

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

لاحظ أن فترة الإشارة هى 5 ثوانى . الثلاث ومضات تأخذ 1.7 ثانية ، وتترك 3.3 ثانية قبل أن يبدأ الوميض من جديد . يحتوى البرنامج على "حلقة متداخلة" ، حيث يتم تكرار الحلقة الداخلية 3 مرات ، وتكرار الحلقة الخارجية إلى الأبد .
منطق وصف البرنامج :
• بداية البرنامج .
• تهيئة المنافذ .
• بداية حلقة لا نهائية .
• حلقة تكرار 3 مرات .
• توصيل الليد .
• الانتظار 500 ملى ثانية .
• فصل الليد .
• الانتظار 100 ملى ثانية .
• نهاية حلقة تكرار 3 مرات .
• نهاية الحلقة الانهائية .
• نهاية البرنامج .

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


البرنامج :

الكود:

[left]
/********************************************************************
Project1-c -FLASHING LIGHTHOUSE LED
------------------------------------------
In this project an LED is connected to bit 0 of PORT B (RB0) of a PIC16F877A 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;
CMCON = 0x07;             // To turn off comparators
ADCON1 = 0x06;           // To turn off analog to digital converters
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
}
}[/left]

Admin
Admin

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

https://fathallaabdelaziz.forumarabia.com

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

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

مُساهمة من طرف Admin الأحد نوفمبر 22, 2015 9:58 pm

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

مراجعة برمجة الميكروكونترولر PIC من خلال مشاريع الميكروكونترولر PIC16F877A مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 5-010



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

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

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

البرنامج :

الكود:

[left]
/********************************************************************
Project2-a-BINARY COUNTING UP LEDs
-----------------------------------------
In this project 8 LEDs are connected to PORT B of a PIC16F877A 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
CMCON = 0x07;             // To turn off comparators
ADCON1 = 0x06;           // To turn off analog to digital converters
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
}

}[/left]

• فى بداية البرنامج ، يتم إعلان متغير العداد 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) عند التكرار التالى سوف يتم تصفيره تلقائيا ويبدأ من الصفر مرة أخرى ليحقق الغرض من هذا البرنامج على وجه التحديد . كما يمكننا استخدام الصيغة التالية :

الكود:

[left]
void main()
{
unsigned char Cnt = 0;       // Declare and initialise Cnt
CMCON = 0x07;             // To turn off comparators
ADCON1 = 0x06;           // To turn off analog to digital converters
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
}

}

}
[/left]

Admin
Admin

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

https://fathallaabdelaziz.forumarabia.com

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

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

مُساهمة من طرف Admin الأحد نوفمبر 22, 2015 10:11 pm

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


الكود:

[left]
void main()
{
unsigned char Cnt = 0;       // Declare and initialise Cnt
CMCON = 0x07;             // To turn off comparators
ADCON1 = 0x06;           // To turn off analog to digital converters
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
}

}

}
[/left]

Admin
Admin

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

https://fathallaabdelaziz.forumarabia.com

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

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

مُساهمة من طرف Admin الأحد نوفمبر 22, 2015 10:22 pm

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

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

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

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

وصف منطق البرنامج :
• بداية البرنامج .
• إعلان وتخصيص واحد (1) لمتغيرالعداد كقيمة ابتدائية وهو ما يعنى أضاءة الليد المتصل بالطرف RB0 (bit 0) ، وإعداد المنفذ .
• بداية حلقة غير منتهية .
• إرسال (كتابة) محتويات متغير العداد إلى إلى المنفذ .
• الانتظار (التأخير) واحد ثانية .
• إزاحة (زحزحة) محتويات متغير العداد إلى اليسار بت واحدة فى كل تكرار.
• إختبار : هل محتويات العداد بصفر ؟ ( تم الزحزحة حتى البت الأخيرة bit 7 ) .
• إذا كانت بصفر يتم إعادة تخصيص القيمة الابتدائية (1) لمتغير العداد .

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


البرنامج :

الكود:


[left]
/********************************************************************
Project3-a
ROTATING LEDs
------------------------
In this project 8 LEDs are connected to PORT B of a PIC16F877A 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 rotate left (RB0 through RB1 and so on) with one second delay between each output.
*******************************************************************/
void main()
{
unsigned char Cnt = 1;       // Initialise Cnt
CMCON = 0x07;             // To turn off comparators
ADCON1 = 0x06;           // To turn off analog to digital converters
TRISB = 0;             // Configure PORT B as outputs

for(;;)                // FOREVER loop
{

PORTB = Cnt;          // Send Cnt to PORT B
Delay_Ms(1000);          // Delay 1 second
Cnt = Cnt << 1;          // Shift left 1 digit
if(Cnt == 0)Cnt = 1;          // If the last LED re-start

}

}[/left]

• فى بداية المشروع ، يتم إعداد متغير العداد Cnt للوضع الابتدائى Cnt = 1 .
• كما يتم إعداد المنفذ PORT B كمداخل / مخارج رقمية (كما سبق) .
• بعد ذلك يتم إنشاء حلقة غير منتهية ، بداخلها نبدأ بإرسال محتويات متغير العداد Cnt إلى المنفذ PORT B .
• بعد واحد ثانية تأخير ، يتم زحزحة محتويات متغير العداد جه اليسار بت واحدة Cnt = Cnt << 1 .
• يتم اختبار تصفير محتويات متغير العداد بعد عملية الإزاحة ، وإعادة تهيئته للوضع الابتدائى .
• تكرار الحلقة إلى الأبد .
• النتيجة أن متغير العداد Cnt ، وبالتالى PORT B ، يأخذ القيم 1 2 4 8 16 32 64 128 1 2 . . .

Admin
Admin

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

https://fathallaabdelaziz.forumarabia.com

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

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

مُساهمة من طرف Admin الأحد نوفمبر 22, 2015 10:38 pm

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

وصف منطق البرنامج :

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


البرنامج :

الكود:


[left]/********************************************************************
Project3-b
ROTATING LEDs
------------------------
In this project 8 LEDs are connected to PORT B of a PIC16F877A  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 rotate right to left (RB0 through RB1 and so on) and left to right (RB7 through RB6 and so on) with one second delay between each output.

*****************************************************************/
void main()
{

unsigned char Cnt = 1;       // Initialise Cnt
unsigned char Mode = 0;       // Mode=0 right-to-left
CMCON = 0x07;             // To turn off comparators
ADCON1 = 0x06;           // To turn off analog to digital converters
TRISB = 0;             // Configure PORT B as outputs

for(;;)                // FOREVER loop
{

PORTB = Cnt;          // Send Cnt to PORT B
Delay_Ms(1000);          // Delay 1 second

if(Mode == 0)
{
Cnt = Cnt << 1;    // Left shift Cnt
if(Cnt == 0)       // Last LED lit
{
Cnt = 64;
Mode = 1;    // Change direction
}
}

else
{
Cnt = Cnt >> 1;    // Right shift Cnt
if(Cnt == 0)       // Last LED lit
{
Cnt = 2;
Mode = 0;    // Change direction
}
}
}
}
[/left]

• تم إعلان وتخصيص متغير يسمى Cnt .
• وإعداد أطراف المنفذ PORT B كمداخل / مخارج رقمية .
• بالإضافة إلى ذلك تم استخدام متغير يسمى Mode ، والذى يحدد اتجاه الدوران . عندما يكون
Mode = 0 ، تدور الليدات من من اليمين إلى اليسار ، وعندما يكون Mode = 1 / تدور الليدات من اليسار إلى اليمين .
• عندما يضىء آخر ليد فى الصف ، يتم تغيير اتجاه الدورات عن طريق تعيين قيمة جديدة لمتغير العداد Cnt وتغيير قيمة Mode . ولذلك ، فإن متغير العداد Cnt يأخذ القيم :

1 2 4 8 16 32 64 128 64 32 16 8 4 2 1 2 . . .

Admin
Admin

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

https://fathallaabdelaziz.forumarabia.com

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

مراجعة برمجة الميكروكونترولر PIC من خلال مشاريع الميكروكونترولر PIC16F877A مع الدايودات المشعة للضوء والمترجم ميكروسى برو : Empty مشروع إضاءة متحركة (جراى) يمين – يسار ، المسمى Knight Rider :

مُساهمة من طرف Admin الإثنين نوفمبر 23, 2015 9:58 am

مشروع إضاءة متحركة (جراى) يمين – يسار ، المسمى Knight Rider :
الدائرة الكهربية :

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


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


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


البرنامج :

الكود:


[left]void left() {
   while (PORTB.F7 != 1)
{
      PORTB = PORTB * 2;
      Delay_ms(500) ;
   }
}

void right() {
   while (PORTB.F0 != 1)
{
      PORTB = PORTB / 2;
      Delay_ms(500) ;
   }
}

void main( )
{
CMCON = 0x07;             // To turn off comparators
ADCON1 = 0x06;           // To turn off analog to digital converters
TRISB = 0;             // Configure PORT B as outputs
PORTB = 1 ;
Delay_ms(500) ;

while(1){
   if(PORTB.F0 == 1)
      left() ;
   if(PORTB.F7 == 1)
      right() ;
}
}[/left]

فى هذا البرنامج يتم إعداد المنفذ PORT B كمخارج ، ثم تعيين البت bit 0 بالحالة المرتفعة بالعبارة PORTB = 1 ، ثم الانتظار (التأخير) لمدة نصف ثانية . بعد ذلك يتم إنشاء حلقة غير منتهية وفيها يتم استدعاء دالتى الحركة جهة اليسار والحركة جهة اليمين والتى تم إعلانها مسبقا ، وخلالها يتم اختبار حالة آخر وأول بت .
النموذج الثنائى للحركة جهة اليسار يتم تشكيله باستخدام عملية ضرب القيم فى 2 ، فى حين أن النموذج الثنائى للحركة جهة اليمين يتم تشكيله باستخدام عملية قسمة لقيم على 2 ، النتيجة الحصول على تأثير عملية إزاحة البتات بموقع واحد .

Admin
Admin

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

https://fathallaabdelaziz.forumarabia.com

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

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

مُساهمة من طرف Admin الإثنين نوفمبر 23, 2015 5:40 pm

المشروع الرابع : عجلة يوم الحظ السعيد Wheel of Lucky Day :
وصف المشروع :

• فى هذا المشروع يتم توصيل 7 ليدات إلى أطراف المنفذ PORT B(RB0-RB6) للميكروكونترولر . بالإضافة إلى توصيل مفتاح ضغط START بالطرف RB7 . يتم ترقيم الليدات بأيام الإسبوع كما هو مبين بالشكل التالى :

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

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

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



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

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



بشكل عام ، يمكن توصيل مفتاح الزر الضاغط إلى أطراف الدخل/الخرج للميكروكونترولر باستخدام طريقتين : "فعال فى الحالة المنخفضة" Active Low و "فعال فى الحالة المرتفعة" .

الشكل التالى يبين طريقة "فعال فى الحالة المنخفضة" :


مراجعة برمجة الميكروكونترولر PIC من خلال مشاريع الميكروكونترولر PIC16F877A مع الدايودات المشعة للضوء والمترجم ميكروسى برو : 1711
فى هذه الحالة عندما لا يتم الضغط على المفتاح ، فإن طرف الدخل للميكروكونترولر يكون عند المنطق "المرتفع" HIGH . الضغط على المفتاح يسحب هذا الطرف إلى المنطق "المنخفض" LOW ، وهذا التغير فى الحالة يمكن تحديده (التعرف علية) عن طريق البرنامج .
الشكل التالى يبين طريقة "فعال فى الحالة المرتفعة" :

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



فى هذه الحالة عندما لا يتم الضغط على المفتاح ، فإن طرف الدخل للميكروكونترولر يكون عند المنطق "المنخفض" LOW. الضغط على المفتاح يسحب هذا الطرف إلى المنطق "المرتفع" HIGH ، وهذا التغير فى الحالة يمكن تحديده (التعرف علية) عن طريق البرنامج .

فى مخطط الدائرة الكهربائية للمشروع يتم توصيل 7 ليدات لأطراف المنفذ PORT B من RB0 إلى RB6 . ويتم توصيل مفتاح الزر الضاغط START إلى الطرف RB7 فى وضع "فعال فى الحالة المنخفضة" Active Low . فى هذا الوضع ، يكون طرف دخل الميكروكونترولر فى الوضع العادى عند المنطق "المرتفع" HIGH . عند الضغط على المفتاح الضاغط ، يتحول طرف الدخل إلى حالة المنطق "المنخفض" LOW .
وصف منطق البرنامج :


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

البرنامج :

الكود:


[left]/********************************************************************

Project4-a
WHEEL OF LUCKY DAY
---------------------------------
In this project 7 LEDs are connected to PORT B of a PIC16F877A  type microcontroller (any other PIC microcontroller can also be used in this project). In addition, a push-button switch is connected to bit 7 of PORT B (RB7). The microcontroller is operated from an 8MHz crystal.
In this project the LEDs are constructed in the form of a circle and the days of the week are written next to each LED. When the push-button switch is pressed the LEDs start rotating fast. Pressing the button stops while only one LED is lit. The day name corresponding to this LED is your lucky day!.
******************************************************************/
#define STRT PORTB.RB7
void main()
{
unsigned char Cnt = 1;       // Initialise Cnt
CMCON = 0x07;             // To turn off comparators
ADCON1 = 0x06;           // To turn off analog to digital converters TRISB = 0x80 ;          // RB0 - RB6 output, RB7 input
PORTB = 0;
for(;;)                // DO FOREVER
{
while(STRT == 1);          // Wait until START is pressed
while(STRT == 0);          // Wait until button is released
for(;;)                // FOREVER loop
{
PORTB = Cnt;      // Send Cnt to PORT B
Delay_Ms(50);       // Delay 50ms
Cnt = Cnt << 1;       // Left shift Cnt
if(Cnt == 0)Cnt = 1;

if(STRT == 0)break;    // If button is pressed
}
while(STRT == 0);       // Wait until button is released
Delay_Ms(1000);       // Wait 1 second
}
}
[/left]

• فى بداية البرنامج ، يتم تعريف الطرف RB7 على أنه START ، كما يتم إعلان تهيئة المتغير Cnt بواحد كقيمة ابتدائية ، وإعاداد الأطراف من RB0 إلى RB6 كمخارج رقمية والطرف RB7 كمدخل رقمى .
• بعد ذلك يتم إنشاء حلقة غير منتهية وينتظر البرنامج حتى يتم الضغط على المفتاح الضاغط (START==1) ثم ينتظر حتى يتم تحرير المفتاح ( SART==0).
• بمجرد أن يتم الضغط على المفتاح الضاغط ثم تحريره ، يتم تشكيل "حلقة داخلية" ، حيث يتم إضاءة الليدات وتدور بسرعة كبيرة . ، مع تأخير زمنى 50 ms بين كل خرج .
• داخل حلقة for الداخلية هذه ، يقوم البرنامج باختبار ما إذا كان المفتاح مضغوط أو لا
(START ==0) .
• عند الضغط على المفتاح ، يقفز البرنامج خارج الحلقة الداخلية وينتظر حتى يتم تحرير المفتاح . عند هذه النقطة ، آخر ليد يصل فى حالة توصيل ON .
• بعد تأخير واحد ثانية ، تتكرر العملية السابقة حيث ينتظر البرنامج من أجل الضغط على المفتاح مرة أخرى عند بداية البرنامج .


Admin
Admin

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

https://fathallaabdelaziz.forumarabia.com

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

مراجعة برمجة الميكروكونترولر PIC من خلال مشاريع الميكروكونترولر PIC16F877A مع الدايودات المشعة للضوء والمترجم ميكروسى برو : Empty علاج الارتداد (الوثبات) فى المفاتيح Switch De- Bouncing

مُساهمة من طرف Admin الإثنين نوفمبر 23, 2015 6:43 pm

علاج الارتداد (الوثبات) فى المفاتيح Switch De- Bouncing
جميع المفاتيح الميكانيكية ليست مثالية فهى تظهر نوعا من مشاكل ارتداد التلامس . فكلما تم ضغط اثنين من التلامسات المعدنية لمفتاح معا ، سوف يكون هناك بعض الوقت القصير ( حوالى 10 ملى ثانية) قبل أن يستقر عمل التلامس الكهربائى . خلال هذه الفترة فإن تلامسات المفتاح تولد العديد من توصيل وفصل التلامسات ، كما هو مبين بالشكل التالى :

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

هذا النوع من السلوك غير مرغوب فيه فى الدوائر المعتمدة على الميكروكونترولر ، لأن حالة دخل المفتاح قد لا تكون معروفة بالضبط بعد الضغط على المفتاح .
يمكن القضاء على مشاكل ارتداد المفتاح إما بالأجهزة (الهاردوير) أو بالبرمجيات (السوفت وير) .
• فى الأجهزة ، عادة ما تستخدم دائرة مقاومة ومكثف RC كمرشح ، أو يستخدم قلاب (فليب فلوب) للقضاء على ارتداد تلامس المفتاح .
• فى البرمجيات ، عادة ما يتم إدراج تأخير صغير ( 10 ملى ثانية مثلا) بعد تغييرات حالة المفتاح ، من أجل القضاء على ارتداد تلامس المفتاح .
المترجم الميكروسى برو يوفر دالة مدمجة تسمى ‘button’ ، والتى تستخدم للقضاء على مشاكل ارتداد التلامسات . فمن المستحسن استخدام هذه الدالة عندما يكون مطلوبا قراءة حالة مفتاح ميكانيكى . هذه الدالة تكون بالصيغة التالية :

الكود:

[left]Button(&port, pin, time, active_state)[/left]

• حيث port و pin تحدد المنفذ والطرف المتصل بالمفتاح . هذا الطرف يجب تحديده كطرف دخل input
• و time هو الفترة الزمنية للقضاء على الارتداد بالملى ثانية .
• و active_state تكون (1) أو (0) وتحدد إذا كان طرف المنفذ فعال على المنطق (0) أو فعال على المنطق (1) .
الاستخدام النموذجى لهذه الدالة مبين بالمثال التالى :

الكود:

[left]Button(&PORTB, 0, 1, 1);[/left]

فى هذا المثال ، يتم توصيل المفتاح إلى الطرف RB0 للمنفذ PORTB يتم تحديد زمن القضاء على الارتداد بواحد ملى ثانية ، وطرف المنفذ يصبح عند المنطق (1) عند الضغط على المفتاح (فعال فى الحالة المرتفعة) .

تعديل برنامج المشروع الرابع باستخدام الدالة Button للقضاء على ارتداد تلامسات المفتاح :

الكود:

[left]
/********************************************************************
Project4-b
WHEEL OF LUCKY DAY
----------------------------------
In this project 7 LEDs are connected to PORT B of a PIC16F877A type microcontroller (any other PIC microcontroller can also be used in this project). In addition, a push-button switch is connected to bit 7 of PORT B (RB7). The microcontroller is operated from an 8MHz crystal.
In this project the LEDs are constructed in the form of a circle and the days of the week are written next to each LED. When the push-button switch is pressed the LEDs start rotating fast. Pressing the button stops while only one LED is lit. The day name corresponding to this LED is your lucky day!.
In this modified program the switch contacts are de-bounced using the mikroC
"Button" function
******************************************************************/
void main()
{
unsigned int Cnt = 1;       // Initialise Cnt
CMCON = 0x07;             // To turn off comparators
ADCON1 = 0x06;           // To turn off analog to digital converters TRISB = 0x80;          // RB0-RB6 output, RB7 input
PORTB = 0;
for(;;)
{
while(Button(&PORTB, 7, 5, 1));       // Wait until button is pressed
while(Button(&PORTB, 7, 5, 0));       // Wait until button is released
for(;;)                   // FOREVER loop
{
PORTB =Cnt;             // Send Cnt to PORT B
Delay_Ms(50);             // Delay 100ms
Cnt = Cnt << 1;             // Left shift Cnt
if(Cnt == 0)Cnt = 1;
if(Button(&PORTB, 7, 5, 0))break;    // If button is pressed
}
while(Button(&PORTB, 7, 5, 0));       // Wait until button is released
}
}
[/left]
• لاحظ أنه قد تم إزالة التأخير واحد ثانية من البرنامج ، حيث لا توجد مشاكل ارتداد التلامسات .
• لاحظ أنه إذا لم يتم تضمين مكتبة Button فى مشروعك ، قد تحصل على خطأ أثناء وقت الترجمة . لتضمين هذه المكتبة ، انقر على View -> Library Manager وقم بتمكين المكتبة Button بالنقر عليها . الوضع الافتراضى عن لإنشاء مشروع جديد هو ضم جميع المكتبات .

Admin
Admin

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

https://fathallaabdelaziz.forumarabia.com

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

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

- مواضيع مماثلة

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