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

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

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



الميكروكونترولر PIC12F675 ومراجعة على البرمجة بلغة السى والمترجم ميكروسى برو :
مقدمة :
الميكروكونترولر PIC12F675 شريحة بغلاف ذات 8 أطراف وعلى الرغم من ذلك يدمج بها نوافذ لطرفيات , كما يوجد فى بنائها محول من تناظرى لرقمى ADC بدقة 10bit ( تماما مثل الموجود فى الميكروكونترولر PIC16F877A و PIC16F88 وغيرها ) .
الميكروكونترولر 12F675 به ذاكرة برنامج بسعة 1024 كلمة , وذاكرة RAM بسعة 64 بايت , وذاكرة EEPROM بسعة 128 بايت , ومذبذب داخلى , ومؤقتات , ومحول ADC ومقارن .
خصائص الميكروكونترولر 12F675 :
الشكل التخطيطى التالى يبين معظم الطرفيات وخواص الميكروكونترولر 12F675 :










برمجة الميكروكونترولر 12F675 :
توصيلات البرمجة بالدائرة ICSP :






مصدر القدرة للميكروكونترولر 12F675 :






كل ما سوف تحتاجه هو وحدة مصدر قدرة بخرج تيار مستمر ( أكبر من 8V ولا يزيد عن 35V ) أو بطارية 9V يتم توصيلها للوصلة CN1 .
ملحوظة :
من الأفضل استخدام دائرة مصدر قدرة 5V حيث أنها لا تنظم الجهد المستمر فقط ولكنها أيضا تحمى شريحة الميكروكونترولر PIC . جهد الدخل يمكن أن يصل حتى 35V بدون أن يتلف المنظم 7805 .

أنظمة المذبذب :
الميكروكونترولر 12F675 له ثمانى أنظمة للمذبذب , والمذبذب الداخلى ثابت على 4MHz . يمكنك استخدام مذبذب خارجى , إما بمقاومة ومكثف أو إشارة ساعة خارجية أو كريستال ( أو دائرة رنين) . يمكنك استخدام كريستال بتردد 20Mhz إذا احتجت لأداء أفضل .

ملحوظة :
يتم استخدام النظام الخارجى عند الضرورة القصوى لأنك سوف تفقد طرفين من الستة أطراف الخاصة بالدخل والخرج .

التدريب الأول : وميض ليد
دائما يكون أول برنامج هو وميض ليد , والسبب أنه يحتاج لأقل الأجهزة وبالتالى تجنب الأخطاء والغرض هو اختبار العمل السليم للنظام .

اعلانات

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


الميكروكونترولر PIC12F675 برنامج وميض ليد والمحاكاة ببرنامج بروتيس :
هذا البرنامج يعتبر أول خطوة لتعلم كيفية استخدام الميكروكونترولر PIC12F675 فى مشاريعك .
الدائرة الكهربية :







أول شىء يجب ملاحظته عدم وجود مذبذب كريستال , وذلك لاستخدام المذبذب الداخلى بتردد 4MHz كمصدر للساعة . وأيضا , الطرف GP3 عادة يستخدم كطرف "إعادة" reset للميكروكونترولر PIC12F675 , لكن لزيادة العدد الكلى للأطراف المتاحة للأغراض الأخرى لا يستخدم الطرف GP3 كطرف إعادة . لذلك , لكى تجعل الميكروكونترولر PIC12F675 يعمل , فقط تحتاج لتوفير القدرة بالطرف "1" والطرف "8" لهذا الميكروكونترولر .
البرنامج :

كود:
//EX1: LED blinking using PIC12F675 //4MHz internal clock //Oscillator : Internal RC No Clock //Master Clear Enable : Disable //Eng:F.Abdelaziz //Date :03-01-2013*/
//define LED pin #define LED GPIO.F0 //main function void main() { ANSEL = 0x00; //set port as digital I/O , not analog input ADCON0 = 0x00; //shut off the A/D converter(default) CMCON = 0x07; //shut off the comparator VRCON = 0x00; //shut off the voltage reference(default) TRISIO = 0x08; //GP3 input , rest all output GPIO = 0x00; //make all pins low "0" while(1) { LED = 0 ; //LED off delay_ms(500); // half sec delay LED = 1 ; //LED on delay_ms(500); // half sec delay } }

  • يتم تعريف طرف الليد LED على أنه GP0 ( يمكنك استخدام أى طرف تريده) .
فى الدالة الرئيسية :
  • فى البداية يتم تحديد الإعدادات : هنا يتم فصل عمل كل من المحول من تناظرى لرقمى ADC والمقارن لجعل الطرف GP0 وباقى الأطراف كأطراف دخل أو خرج رقمى (المحول ADC والمقارن فى الحالة الافتراضية يكونا فى حالة تشغيل . لذلك يجب علينا فصلهما لأستخدام جميع الاطراف كمداخل / مخارج رقمية ) .أيضا نستخدم السجل TRISIO لتحديد اتجاه أى طرف كمدخل أو كمخرج . وايضا استخدام السجل GPIO لجعل أى طرف فى الحالة المنطقية المرتفعة high أو فى الحالة المنطقية المنخفضة low .
  • يتم تحويل حالة طرف الليد LED فى حلقة while بعد كل نصف ثانية . بهذه الطريقة يمكنك بسهولة جعل الليد يومض باستخدام الميكروكونترولر PIC12F675 .

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

banna1980
:: مهندس متميز ::
تاريخ التسجيل: Apr 2010
الدولة: مصر - السويس
المشاركات: 409
نشاط [ banna1980 ]
قوة السمعة:0
قديم 03-01-2013, 02:29 AM المشاركة 3   
افتراضي


جزاك الله خيرا


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


خطوة إلى الامام : الأضواء المتحركة البسيطة :
الدائرة الكهربية :









الغرض :
استخدام جميع أطراف الخرج للميكروكونترولر PIC12F675 .
سوف يتم استخدام المذبذب الداخلى ووقف تمكين MCLR .
ملحوظة :
الطرف "4" عند عدم تمكين MCLR يمكن استخدامه كمدخل فقط ولا يمكن استخدامه كمخرج .
تتبع الخطوات التالية :


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


تتبع الخطوات التالية :
1- نبدأ بتعريف المنفذ GPIO بالأسم السهل المستعار OUTPUT . وإعلان متغير عام "i" يستخدم كعداد لحلقات for .

كود:
#define OUTPUT GPIO char i;
2- تحديد إعدادات سجلات ومنافذ الميكروكونترولر . يفضل إنشاء دالة تضم هذه الإعدادات بحيث يسهل تعديلها عند الرغبة , علاوة على تنظيم البرنامج بما يسهل تتبعه .


كود:
void init_port(void) { ANSEL = 0x00; //set port as digital I/O , not analog input ADCON0 = 0x00; //shut off the A/D converter(default) CMCON = 0x07; //shut off the comparator VRCON = 0x00; //shut off the voltage reference(default) TRISIO = 0x00; //all output GPIO = 0x00; //make all pins low "0" }
3- الأضاء المتحركة يمكن أن تاخذ نماذج متعددة مثل:
أ‌- الحركة جهة اليسار , أى إضاءة الليد بأقصى اليمين ثم الذى يليه جهة اليسار وهكذا . بالطبع يفضل وضع النموذج بدالة مستقلة كما يلى :

كود:
void move_left(void) { OUTPUT=1; delay_ms(250);// GP0 ON OUTPUT=(1<<1); delay_ms(250);// GP1 ON OUTPUT=(1<<2); delay_ms(250);// GP2 ON //Note : GP3 : Input only OUTPUT=(1<<4); delay_ms(250);// GP4 ON OUTPUT=(1<<5); delay_ms(250);// GP5 ON OUTPUT=0; delay_ms(250);// All OFF }
العبارات الرئيسية المستخدمة مثل ((1<<4 , هذه العبارة هى مجرد أخد قيمة الواحد "1" وإزاحة البتات جهة اليسار أربع مرات بحيث يكون الرقم "4" هو نفسه موقع البت الرابعة . يتم ترقيم البتات فى البايت من "7" إلى "0" من جهة اليسار إلى جهة اليمين وحيث أن (1<<0)=1, (1<<1)=2, (1<<2)=4, (1<<3)=8 وهكذا , لذلك فإن ذلك يعطى طريقة سهلة لتحديد البت بشكل "منفرد" فى البايت كما أن ذلك سهل القراءة أيضا . إذا أردت تحديد البت الخامسة "5" يمكنك كتابة GPIO = 32; ( أو 0x20 بالسداسى عشر) , ولكن GPIO = (1<<5) أسهل بكثير فى القراءة . GPIO = (1<<5) .
4- نكرر الخطوة السابقة لنموذج آخر , وليكن الحركة جهة اليمين كما يلى :
كود:
void move_right(void) { OUTPUT=(1<<5); delay_ms(250);// GP5 ON OUTPUT=(1<<4); delay_ms(250);// GP4 ON //Note : GP3 : Input only OUTPUT=(1<<2); delay_ms(250);// GP2 ON OUTPUT=(1<<1); delay_ms(250);// GP1 ON OUTPUT=1; delay_ms(250);// GP0 ON OUTPUT=0; delay_ms(250);// All OFF }
وكذلك لنموذج وميض جميع الليدات :

كود:
void blink_all() { OUTPUT=0x37; delay_ms(250);//ALL ON OUTPUT=0x00; delay_ms(250);//ALL OFF }
5- الآن انتهت جميع المكونات الرئيسية للبرنامج وجاء وقت الدخول إلى الدالة الرئيسية وتحديد الشكل المطلوب وعدد مرات تكرارة عن طريق اختيار الدوال المناسبة , وهنا مثال لذلك ولكن يمكنك إجراء التعديلات المناسبة :


كود:
void main() { init_port();
while(1) { for(i=0;i<5;i++) {
move_left(); move_right(); } for(i=0;i<5;i++) { blink_all(); }
} }
البرنامج :


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



كود:
//EX2:Moving light using PIC12F675
//4MHz internal clock
//Oscillator : Internal RC No Clock
//Master Clear Enable : Disable
//Eng:F.Abdelaziz
//Date :03-01-2013*/

//define Output port
#define   OUTPUT GPIO
char i;

void init_port(void) 
{
ANSEL = 0x00;         //set port as digital I/O , not analog input
ADCON0 = 0x00;      //shut off the A/D converter(default)
CMCON = 0x07;       //shut off the comparator
VRCON = 0x00;        //shut off the voltage reference(default)
TRISIO = 0x00;         //all output
GPIO = 0x00;            //make all pins low "0"
}

void move_left(void)
{
                        OUTPUT=1;      delay_ms(250);//    GP0 ON
                        OUTPUT=(1<<1); delay_ms(250);// GP1 ON
                        OUTPUT=(1<<2); delay_ms(250);// GP2 ON
                        //Note : GP3 : Input only
                        OUTPUT=(1<<4); delay_ms(250);// GP4 ON
                        OUTPUT=(1<<5); delay_ms(250);// GP5 ON
                        OUTPUT=0;      delay_ms(250);// All OFF
} 

void move_right(void)
{
                        OUTPUT=(1<<5); delay_ms(250);// GP5 ON
                        OUTPUT=(1<<4); delay_ms(250);// GP4 ON
                        //Note : GP3 : Input only
                        OUTPUT=(1<<2); delay_ms(250);// GP2 ON
                        OUTPUT=(1<<1); delay_ms(250);// GP1 ON
                        OUTPUT=1;      delay_ms(250);//    GP0 ON
                        OUTPUT=0;      delay_ms(250);// All OFF
}

void blink_all()
{
                        OUTPUT=0x37;        delay_ms(250);//ALL ON
                        OUTPUT=0x00;        delay_ms(250);//ALL OFF
}

//main function
void main()
{
init_port();

            while(1)
            {
            for(i=0;i<5;i++)
            {

            move_left();
            move_right();
            }
            for(i=0;i<5;i++)
            {
            blink_all();
            }

            }
}


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


التدريب الثالث : المفتاح عديم الارتداد :

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

حل مشكلة ارتداد المفتاح يتم وفقا لمترجم الميكروسى كما يلى :
  • كشف أول ضغطة على المفتاح ( أو الأولى من عدة ارتدادات) باستخدام الدالة ) Buttonعلى سبيل المثال , الانتقال من الحالة المنخفضة إلى الحالة المرتفعة) .
  • مع الانتظار لفترة محددة بالدالة ( .
  • اختبار المفتاح مرة أخرى لرؤية ما إذا كان مازال منضغطا أو تم تحريره ( الانتقال من الحالة المرتفعة إلى الحالة المنخفضة ).
أى أن الحل هو الانتظار حتى يتوقف الارتداد . إما أن تستخدم دائرة لمنع الارتداد أو تستخدم برنامج للانتظار لفترة بعد توقف الارتداد . الدائرة الشائعة لمنع الارتداد مكونة من مجموعة مقاومة ومكثف والتى تبطىء إشارة الدخل التى يتم تغذيتها للبوابة المنطقية ( يتم شحن المكثف عند غلق المفتاح ) .
عند استخدام الميكروكزنترولر , الطريقة الأفضل هى استخدام البرنامج لمنع ظهور تاثير ارتداد المفتاح لأن الميكروكونترولر يمكنه بسهولة الانتظار لفترة محددة قبل الحكم على أن قيمة المفتاح متاحة . يمكنك أيضا تغيير الفترة الزمنية ولا تحتاج لمكونات إضافية .
عن طريق هذا المثال الصغير يتم تغيير حالة الليدات عند كل ضغطة على المفتاح المتصل بالطرف GPIO3 . لا تنسى تحديد عدم تمكين MCLR و استخدام المذبذب الداخلى بحيث يمكنك الحصول على ثلاثة أطراف إضافية . الطرف GPIO3 هو طرف "دخل فقط" لذلك يتم استخدامه لتوصيل المفتاح .
الدائرة الكهربية :


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


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




البرنامج :

إضافة رد

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

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

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


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

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