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

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 01-02-2012, 12:28 PM المشاركة 1   
افتراضي المدخل للمتحكمات القابلة للبرمجة PLC وتبسيط البرمجة بلغة السى والميكروسى برو و...... Twitter FaceBook Google+



المدخل للمتحكمات القابلة للبرمجة PLC وتبسيط البرمجة بلغة السى والميكروسى برو والعديد من المشاريع
أولا : الأجهزة Hardware :
1- الميكروكونترولر PIC16F877A :
الميكروكونترولر المستخدم هو PIC16F877A , وقد تم اختياره لمرونته ولأنه يناسب متطلبات التصميم من أجل عدد المداخل والمخارج .






التفاصيل على الرابط :



2- دائرة جهاز البرمجة التسلسلية بالدائرة ICSP
دائرة البرمجة تتصل مباشرة بالميكروكونترولر . تشمل دائرة البرمجة على وصلة (سوكيت) 9 طرف DB9 لنقل البرنامج من خلال المنفذ التسلسلى للكومبيوتر . يقوم الميكروكونترولر بإيقاف Stop تنفيذ البرنامج الموجود بذاكرة برنامج الميكروكونترولر عندما يستقبل الطرف رقم 1 MCLR/Vpp أشارة بحوالى 13V وهذا يسمح للميكروكونترولر باستقبال البيانات تسلسليا من خلال الطرفين 39 RB6/PGC( إشارة الساعة clock ) و 40 RB7/PGD (إشارة البيانات data ) .
التفاصيل على الرابط :

3- دائرة الاتصال التسلسلى :
بين الميكروكونترولر والمنفذ التسلسلى للكومبيوتر باستخدام الدائرة المتكاملة MAX232 .
التفاصيل على الرابط :




4- دوائر الدخل Input Circuit:
سوف نستخدم فى البداية أبسط أنواعها وهو المفاتيح كما فى الشكل (فيما بعد سوف نستخدم العوازل الضوئية) مع استخدام أطراف المنفذ Port C كمداخل رقمية أى TRISC=0xFF;.




5- دوائر الخرج Output Circuit :
سوف نستخدم فى البداية أبسط أنواعها وهو الدايودات المشعة للضوء كما فى الشكل(فيما بعد سوف نستخدم الترانزستور والريلاى) . مع استخدام أطراف المنفذ Port D كمخارج رقمية أى TRISD=0x00 .





6- دائرة الإمداد بالقدرة Power Supply :
دائرة الإمداد بالقدرة power supply تشمل دائرة توحيد لجهد الدخل المتردد 12VAC للحصول على جهد مستمر غير منظم 12VDC , والمطلوب لتشغيل دوائر الخرج عند استخدام الريلايات , ويتم الحصول من هذا الجهد على جهد مستمر منظم 5V اللازم لدائرة الميكروكونترولر حيث يتم استخدام منظم الجهد 7805 .





الدائرة الأولية للتدريب :




[url=http://eeecb.com/up2//uploads/images/domain-68fc247c45.jpg][/url



ثانيا : البرمجيات Software :

اعلانات

الصورة الرمزية أبو عاصم
أبو عاصم
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2010
الدولة: سوريا_فلسطين
المشاركات: 75
نشاط [ أبو عاصم ]
قوة السمعة:0
قديم 01-02-2012, 01:56 PM المشاركة 2   
افتراضي السلام عليكم أخواني


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

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

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


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

أخى الكريم

شكرا جزيلا لك

بارك الله فيك

تقدير أعتز به

إن شاء الله يتم تحضير الموضوع المطلوب

اللهم علمنا ما ينفعنا وانفعنا بما علمتنا وزدنا علما

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


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


ثانيا : البرمجيات Software :
· فى البداية نقوم بتعريف أطراف المداخل PORTC وأطراف المخارج PORTD بأسماء سهلة ومختصرة ومتعارف عليها مثل IN للمدخل و OUT للمخرج .
· المنافذ هى سجلات أغراض خاصة SFR ويخصص لها الميكروسى برو الكلمة sbit لتعريف البتات الخاصة بها , على سبيل المثال تعريف البت الأول للمنفذ PORTC هو PORTC.B0 يخصص له الاسم IN1 (باعتباره المدخل الأول) كما يلى : sbit IN1 at PORTC.B0 ومنذ هذه اللحظة يمكن استخدام IN1 بدلا من PORTC.B0 , وهكذا بالنسبة لجميع الثمانى مداخل والثمانى مخارج ويصبح لدينا :


كود:
sbit OUT0 at PORTD.B0; // this is where OUTPUT OUT0 is fully defined
sbit OUT1 at PORTD.B1; // this is where OUTPUT OUT1 is fully defined
sbit OUT2 at PORTD.B2; // this is where OUTPUT OUT2 is fully defined
sbit OUT3 at PORTD.B3; // this is where OUTPUT OUT3 is fully defined
sbit OUT4 at PORTD.B4; // this is where OUTPUT OUT4 is fully defined
sbit OUT5 at PORTD.B5; // this is where OUTPUT OUT5 is fully defined
sbit OUT6 at PORTD.B6; // this is where OUTPUT OUT6 is fully defined
sbit OUT7 at PORTD.B7; // this is where OUTPUT OUT7 is fully defined

sbit IN0 at PORTC.B0; // this is where INPUT IN0 is fully defined
sbit IN1 at PORTC.B1; // this is where INPUT IN1 is fully defined
sbit IN2 at PORTC.B2; // this is where INPUT IN2 is fully defined
sbit IN3 at PORTC.B3; // this is where INPUT IN3 is fully defined
sbit IN4 at PORTC.B4; // this is where INPUT IN4 is fully defined
sbit IN5 at PORTC.B5; // this is where INPUT IN5 is fully defined
sbit IN6 at PORTC.B6; // this is where INPUT IN6 is fully defined
sbit IN7 at PORTC.B7; // this is where INPUT IN7 is fully defined


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


يعتمد البرنامج فى الأساس على عبارة الشرط if…else لذلك من المفضل مراجعتها على الرابط :


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


البرنامج الأول :

كود:
/*
 * Project name:
     Control (ON-OFF) Outputs (LEDS) by Inputs (Switches)
 
 *  MCU:             PIC16f877A
     Oscillator:      4 MHz
*/
sbit OUT0 at PORTD.B0; // this is where OUTPUT OUT0 is fully defined
sbit OUT1 at PORTD.B1; // this is where OUTPUT OUT1 is fully defined
sbit OUT2 at PORTD.B2; // this is where OUTPUT OUT2 is fully defined
sbit OUT3 at PORTD.B3; // this is where OUTPUT OUT3 is fully defined
sbit OUT4 at PORTD.B4; // this is where OUTPUT OUT4 is fully defined
sbit OUT5 at PORTD.B5; // this is where OUTPUT OUT5 is fully defined
sbit OUT6 at PORTD.B6; // this is where OUTPUT OUT6 is fully defined
sbit OUT7 at PORTD.B7; // this is where OUTPUT OUT7 is fully defined
sbit IN0 at PORTC.B0; // this is where INPUT IN0 is fully defined
sbit IN1 at PORTC.B1; // this is where INPUT IN1 is fully defined
sbit IN2 at PORTC.B2; // this is where INPUT IN2 is fully defined
sbit IN3 at PORTC.B3; // this is where INPUT IN3 is fully defined
sbit IN4 at PORTC.B4; // this is where INPUT IN4 is fully defined
sbit IN5 at PORTC.B5; // this is where INPUT IN5 is fully defined
sbit IN6 at PORTC.B6; // this is where INPUT IN6 is fully defined
sbit IN7 at PORTC.B7; // this is where INPUT IN7 is fully defined
void main(){
  
  TRISD = 0;        // set PORTD as Output
  TRISC = 0XFF;  // PORTC as Inputs
  PORTD = 0 ;  //Clear Outputs
  while (1) {           // endless Loop 
    if(IN0) OUT0=1; else OUT0=0;// if input Is ON , output will be ON else OFF
    if(IN1) OUT1=1; else OUT1=0;
    if(IN2) OUT2=1; else OUT2=0;
    if(IN3) OUT3=1; else OUT3=0;
    if(IN4) OUT4=1; else OUT4=0;
    if(IN5) OUT5=1; else OUT5=0;
    if(IN6) OUT6=1; else OUT6=0;
    if(IN7) OUT7=1; else OUT7=0;
  }
}


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


ملاحظات :
1- الوضع العادى للمفتاح هو الوضع المفصول off أو "المفتوح" open نتيجة لذلك يكون الوضع العادى لحالة طرف الدخل للميكروكونترولر (يتصل بالأرضى خلال مقاومة 10 كيلو أوم مثلا ) هى الحالة المنطقية المنخفضة low أو 0 وتسمى "غير صواب" false (يقصد بها عدم تحقق شرط غلق المفتاح) .
2- عند توصيل المفتاح يصل الجهد الموجب من خلاله إلى طرف الدخل للميكروكونترولر وتصبح حالته المنطقية هى الحالة المرتفعة high أو 1 وتسمى "صواب" true (يقصد بها تحقق شرط غلق المفتاح) .


الخلاصة :
يقوم البرنامج بالتحكم فى المخارج (توصيل ON وفصل OFF ) بمعنى " إذا تم توصيل مفتاح الدخل , يتم تفعيل الخرج المناظر " وعند فصل المفتاح (أو عدم توصيله) يتم فصل الخرج المناظر ويتم التعبير عن ذلك برمجيا باستخدام عبارة الشرط if(condition) statement1 ; else statement2 ; كما يلى كمثال لتحكم المفتاح (المدخل ) الأول IN0 بالمخرج (الليد) الأول OUT0 :
[CODE

if(IN0) OUT0=1; else OUT0=0;// if input Is ON , output will be ON else OFF

][/CODE]

ملحوظة :
عندما يتم توصيل المفتاح بحيث تكون الحالة الابتدائية لمدخل الميكروكونترولر والمفتاح "مفتوح" هى الحالة المنطقية المرتفعة لاتصاله مباشرة بالجهد الموجب من خلال مقاومة 10 كيلو أوم مثلا , ويوصل المفتاح بين طرف الدخل والأرضى مباشرة , فعند توصيل المفتاح يتحول طرف الدخل إلى الحالة المنطقية المنخفضة .

عندئذ لكى نحصل على خرج يجب أن يصبح الشرط كما يلى : if(!IN0) حيث الرمز "!" يمثل المعكوس ويصبح البرنامج كما يلى :
كود:
if(!IN0) OUT0=1; else OUT0=0;// if !IN0 Is True (switch closed) , output will be ON else OFF


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


البرنامج الثانى : "مخارج فقط"


يمكن التحكم فى المخارج دون الحاجة إلى المفاتيح ومن أمثلة ذلك :
1- الحصول على أشكال أو نماذج إضاءة مختلفة .
2- التحكم فى أجهزة متعددة مع الأخذ فى الاعتبار أزمنة تشغيل وتبطيل كل جهاز .
البرنامج :

كود:
/*
 * Project name:
     prog2
 * Copyright:
     (c) MikroElektronika, 2010.
 
 * Description:
     This code turns on LEDS with one second pause.
 * 
     MCU:             PIC16F877A                      http://ww1.microchip.com/downloads/en/DeviceDoc/39631E.pdf
     
     Oscillator:      4.0000 MHz
         -
     SW:              mikroC PRO for PIC
                     
 
     
*/

sbit OUT0 at PORTD.B0; // this is where OUTPUT OUT0 is fully defined
sbit OUT1 at PORTD.B1; // this is where OUTPUT OUT1 is fully defined
sbit OUT2 at PORTD.B2; // this is where OUTPUT OUT2 is fully defined
sbit OUT3 at PORTD.B3; // this is where OUTPUT OUT3 is fully defined
sbit OUT4 at PORTD.B4; // this is where OUTPUT OUT4 is fully defined
sbit OUT5 at PORTD.B5; // this is where OUTPUT OUT5 is fully defined
sbit OUT6 at PORTD.B6; // this is where OUTPUT OUT6 is fully defined
sbit OUT7 at PORTD.B7; // this is where OUTPUT OUT7 is fully defined
void pause_turn_off() {
  Delay_ms(1000);                      // one second pause
  PORTD = 0;
}
void main(){
  
  TRISD = 0;                           // set PORTD as output
  PORTD=0;
  while (1) {                          // endless loop
    OUT0 = 1; pause_turn_off();
    OUT1 = 1; pause_turn_off();
    OUT2 = 1; pause_turn_off();
    OUT3 = 1; pause_turn_off();
    OUT4 = 1; pause_turn_off();
    OUT5 = 1; pause_turn_off();
    OUT6 = 1; pause_turn_off();
    OUT7 = 1; pause_turn_off();
    
  }
}


يقوم البرنامج بعمل الآتى :
1- توصيل أحد المخارج : OUT0=1; للمخرج الأول على سبيل المثال .
2- الانتظار لمدة 1000ملى ثانية أى دقيقة ثم يتم فصل هذا المخرج :pause_turn_off();
3- يتكرر ما سبق لباقى المخارج .
ملحوظة :
· لتسهيل البرمجة وفهم البرنامج بلغة السى يفضل استخدام الدوال functions ( مجموعة من التعليمات تمثل جزء لبرنامج ) وخاصة إذا كانت تلك الدوال متكررة الاستخدام .
· هنا تم تشكيل دالة باسم pause_turn_off " إنتظار – فصل" للقيام بالتأخير الزمنى (باستخدام الدالة Delay_ms(1000 الموجودة ضمن الميكروسى ) علاوة على فصل المخارج بعد الانتظار ( باستخدام التعليمة PORTD=0; ) .
· يمكن التحكم فى أى مخرج بنفس الطريقة وتغيير زمن التأخير مثل ما يحدث فى بعض العمليات الصناعية أو فى بعض عمليات التحكم فى الأجهزة المنزلية المبرمجة .
· مزيد من التفاصيل حول الدالة على الرابط :
والرابط :




إضافة رد

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

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

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


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

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