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

   

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



أ‌- التحكم فى وحدة العرض 7-segment :
يجب معرفة طريقة توصيل بين أطراف الشرائح وأطراف الميكروكونترولر PIC ,وللوصول للتصميم الأمثل , يمكن تخصيص الأطراف على التتابع , على سبيل المثال القطعة "a" يتم توصيلها بالطرف RB0 والقطعة "b" بالطرف RB1 وهكذا حتى نصل إلى توصيل القطعة "g" بالطرف RB6 , وفى النهاية يرجع ذلك للمصمم .
من المهم معرفة أدة ضمن حزمة برمجيات المترجم MikroC PRO , تسمح لك بتحرير أرقام (خانات) العرض , لهذا الغرض من القائمة Tools إختار Seven Segment Editor فتظهر لك نافذة تسمح لك بتحرير وحدة العرض بسهولة . فكلما قمت بتحرير العرض يظهر لك قيمة ثابتة تستخدمها لتخصصها للتحكم فى منفذ الخرج . يسمح لك المحرر بالتعامل مع وحدات العرض ذات الأنود المشترك ووحدات العرض ذات الكاثود المشترك , كما يمكن استخدام الثوابت بالصيغة العشرية أو السداسية عشر . الشكل التالى يوضح مظهر المحرر:





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



كود:
const unsigned short Digits [] = { 0x3F, // code of digit 0 0x06, // code of digit 1 0x5B, // code of digit 2 0x4F, // code of digit 3 0x66, // code of digit 4 0x6D, // code of digit 5 0x7D, // code of digit 6 0x07, // code of digit 7 0x7F, // code of digit 8 0x6F, // code of digit 9 };








مثال لعرض الأرقام على وحدة العرض 7-segment display :

اعلانات

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


مثال لعرض الأرقام على وحدة العرض 7-segment display :
هذا المثال يستخدم المنفذ port B للميكروكونترولر PIC16F84A, يتم التحكم فى زمن العرض عن طريق الدالة delay_ms والمعرفة مسبقا عن طريق مكتبات المترجم . هذه الدالة تأخذ كدخل(بارامتر) عدد صحيح والذى يمثل زمن التأخير بالملى ثانية كما توجد الدالة delay_us للتأخير بالميكروثانية .
فيما يلى كود المصدر (البرنامج) للميكروكونترولر PIC لهذا المثال :


كود:
const unsigned short Digit[] = { 0x3F, // code of digit 0 0x06, // code of digit 1 0x5B, // code of digit 2 0x4F, // code of digit 3 0x66, // code of digit 4 0x6D, // code of digit 5 0x7D, // code of digit 6 0x07, // code of digit 7 0x7F, // code of digit 8 0x6F, // code of digit 9 }; void main (void) { unsigned short Counter = 0; TRISB = 0; // Sets port B as output while (1) // Loop forever { PORTB = Digit[Counter]; // digit is displayed for the // number stored in the variable Counter. Counter ++ ; // Increase the count value. delay_ms (1000); // It is a delay of 1 second. } }





الخطوة التالية هى إجراء المحاكاة ببرنامج ISIS , لذلك يتم جلب الأجهزة التالية :
16F84A, RES, 7SEG-COM-CATHODE ويجب توصيل مقاومات 330 بين الميكروكونترولر ووحدة العرض كما فى الدائرو التالية :


عند تشغيل المحاكاة ينبغى أن تشاهد عرض العد من 0 إلى 9 بمعدل واحد ثانية بين كل رقم والذى يليه .

أ‌- التحكم فى وحدات العرض 7-segment المتعددة بالانتخاب (العرض الديناميكى) :

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

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


أ‌- التحكم فى وحدات العرض 7-segment المتعددة بالانتخاب (العرض الديناميكى) :
تناول وحدات العرض المتعددة يتم باستخدام نفس نظرية وحدة العرض المفردة , ففى وحدات العرض المتعددة يتم إظهار رقم واحد فى نفس الوقت . على سبيل المثال , إذا كان لديك وحدة عرض لأربعة أرقام عندئذ يتم تفعيل وحدة عرض رقم الآحاد مع عدم تفعيل باقى الوحدات , ثم تفعيل وحدة عرض رقم العشرات مع عدم تفعيل باقى الوحدات ثم تفعيل وحدة عرض رقم المئات مع عدم تفعيل باقى وحدات العرض وأخيرا تفعيل وحدة عرض رقم الألاف مع عدم تفعيل باقى الوحدات . ينبغى أن تتم هذه العملية بسرعة وذلك لخداع العين البشرية لكى تبدو كما لو كانت كافة الأرقام مفعلة . هذا الترتيب يقلل من التوصيلات الكهربائية ومن استهلاك الطاقة لأنه فى واقع الأمر رقم واحد يكون فعال فى أى وقت . العين البشرية لا تلاحظ أى تغيرات تحدث بتردد أكبر من 25Hz ( ويكون الزمن الدورى 40m-seconds ) .
فى المثال التالى سوف نستخدم 4 وحدات عرض لذلك فإن زمن إظهار كل رقم يجب أن يساوى ربع زمن الدورة أى يكون 10m-seconds.
الطريقة الأكثر كفاءة لعرض الأرقام تتم عن طريق استخدام الدالة . بأربعة أرقام (خانات) يمكن عرض الأعداد من 0 إلى 9999 , لذلك يتم إدخال العدد فى متغير من نوع العدد الصحيح . لكل رقم (خانة) يكون من الضرورى إجراء حسابات منفصلة خاصة بها , فعلى سبيل المثال لاشتقاق وحدات خانة الألاف يتم قسمة العدد على 1000 بعد ذلك يتم طرح وحدات الألاف من العدد الكلى , ويتم تكرار هذه العملية حتى نصل إلى وحدات رقم الآحاد .
يجب تفعيل وحدات العرض من خلال منفذ آخر , فى هذا المثال سوف نستخدم المنفذ port A .
لفهم هذه العملية عليك مراقبة وتحليل الدالة التالية :


كود:
// Declaration of the constants for the display. const unsigned short DIGIT [] = { 0x3F, // code of digit 0 0x06, // code of digit 1 0x5B, // code of digit 2 0x4F, // code of digit 3 0x66, // code of digit 4 0x6D, // code of digit 5 0x7D, // code of digit 6 0x07, // code of digit 7 0x7F, // code of digit 8 0x6F, // code of digit 9 }; // Function to display the dynamic display. void VerDisplay (int Number) { unsigned short Uints; // Variable to store the units. unsigned short Tens; // variable to store tens. unsigned short Hundreds; // Variable to store the hundreds. unsigned short Thousands; // Variable to save thousands. Thousands = Number/1000; // Calculate the thousands. Hundreds = (Number - Thousands * 1000) / 100; // Calculate the hundreds. Tens = (Number - Thousands * 1000 - Hundreds * 100) / 10; // Calculate the tens. Uints = (Number - Thousands * 1000 - Hundreds * 100 - Tens * 10); // Calculate the units. PORTB = DIGIT [Uints] ; // Display units. PORTA.F0 = 1, // Active high the first display delay_ms (10) ; // Challenged 10m seconds PORTA = 0; // disable all displays. PORTB = DIGIT [Tens] ; // Displays the dozens. PORTA.F1 = 1 ; // Turns up the second display delay_ms (10); // Challenged 10m seconds PORTA = 0; // disable all displays. PORTB = DIGIT [Hundreds] ; // Displays the hundreds. PORTA.F2 = 1, // Active high the third display delay_ms (10); // Challenged 10m seconds PORTA = 0; // disable all displays. PORTB = DIGIT [Thousands] ; // Displays thousand units. PORTA.F3 = 1; // Turns up the fourth display delay_ms (10) ; // Challenged 10m seconds PORTA = 0; // disable all displays. }















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


وأخيرا يتم تكملة كود المصدر للبرنامج بالدالة الرئيسية كما يلى :
كود:
void main (void) { unsigned short N = 0; // Variable to count. int number = 0; TRISB = 0; // Sets port B as output TRISA = 0; // Set port as output PORTA = 0; // Turns off all displays while (1) // Loop forever { // Displays the Number. VerDisplay (Number) // This function takes about 40m seconds. // We have 12 in N increments to increase // in number approximately every 500m seconds. N ++; if (N == 12) { N = 0; // ​​count restarts N. Number ++ // Increase the Number. if (number == 10000) // if number is evaluated 10,000 Number = 0; // and reset to 0 if 10000. } } }








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


بعد تكملة البرنامج وترجمته يتم إجراء المحاكاة ببرنامج ISIS , وذلك بعد أن يتم جلب الأجهزة التالية :
16F84A, RES, 7SEG-MPX4-CC, 7404 وبناء الدائرة التالية :

عمليا يمكن استبدال العاكس 7404 بمصفوفة من الترانزستورات كما فى الشكل التالى :




عند تشغيل المحاكاة يجب أن تعرض الدائرة الأرقام كعداد من 0 إلى 9999 بمعدل 500m-seconds بين كل تزايد فى العد .

5-2 وحدة عرض الحروف LCD :


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


5-2 وحدة عرض الحروف LCD :
وحدة عرض الحروف LCD مكونة من وحدات (موديولات) جاهزة . ميزة هذه الوحدات أنها تحتوى على ناقل للبيانات data bus وناقل للتحكم control bus . للتعامل مع هذه الأجهزة يوجد بمترجم الميكروسى برو مكتبات معرفة مسبقا (جاهزة) للتحكم فى وحدات LCD . الشكل التالى يبين المظهر الطبيعى ومنظر هذه الوحدات فى برنامج إيزيس ISIS :
تقوم وحدات العرض LCD بعرض الحروف التى تغذى بها فى شكل كود أسكى ASCII code . بالإضافة إلى كود أسكى , يمكنها أن تعرض الحروف المصصمة بمعرفة المبرمج , ميزة أخرى لوحدة العرض LCD , وهى أن ناقل توصيل البيانات الطبيعى عبارة عن 8 خطوط , لكن يمكن إعدادها لكى تعمل بأربعة خطوط فقط للبيانات . هذه الميزة توفر من عدد الأطراف المستخدمة ولكن على حساب تقليل سرعة نقل البيانات . المكتبة الجاهزة بالميكروسى معدة لتعمل بأربعة بتات 4-bit .
لعرض المكتبة الجاهزة لهذا الجهاز وللأجهزة الأخرى والمتواجدة بالميكروسى , يجب عليك النقر على لوحة الأدوات الموجودة على الجانب الأيمن لنافذة تحرير البرنامج , يتم التعرف على هذه اللوحة بعلامة التبويب التى تحتوى على العنوان Library Manager . عندما تنقر هذا التبويب تظهر لك نافذة بها قائمة بالمكتبات المختلفة والتى من الممكن العمل بها مع الميكروكونترولر المستخدم . فى هذه النافذة سوف تجد مكتبة باسم Lcd , حيث يمكنك النقر على إى دالة واردة بالمكتبة لرؤية تعليمات الاستخدام المناظرة . الشكل التالى يوضح مظهر هذه النافذة :







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


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

كود:
// Lcd pinout settings sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D7 at RB3_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D4 at RB0_bit; // Pin direction sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D7_Direction at TRISB3_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D4_Direction at TRISB0_bit;








لاستخدام أى أطراف أخرى كل ما عليك هو تغيير اسم الطرف فى المثال السابق . كما تلاحظ , للتحكم فى LCD تحتاج فقط إلى ستة أطراف , أربعة لبتات البيانات واثنان لبتات التحكم , وحدة العرض بها طرف تحكم ثالث هو WR يستخدم فى القراءة عندما تكون LCD غير مشغولة بإجراء عمليات أو يستخدم فى كتابة الأوامر والحروف , عادة لا نحتاج لهذا الطرف وببساطة يتم توصيله بالأرضى .
وفى النهاية يجب بدء تشغيل وحدة العرض LCD داخل الدالة الرئيسية بعد إعداد المنافذ . صيغة الدالة الرئيسية تكون كما يلى :
كود:
void main (void) { Lcd_init (); // Start the LCD. while (1) // infinite loop. { } }




ويصبح كود البرنامج كما يلى :







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


بعد تنفيذ الكود السابق تكون وحدة العرض LCD جاهزة لعرض الحروف , بدءا من الموقع الموجود بالسطر(الصف) الأول والعامود الأول والذى يدل علية مؤشر يومض .
تصنع وحدات عرض الحروف فى أشكال وألوان متعددة حيث تتوفر بشاشة خضراء أو زرقاء أو صفراء . ويتم عرض الحروف فى شكل مصفوفة حروف مثل 2 صف مع 16 عامود وتعرف 2x16 وبنفس الطريقة يوجد 1x16, 2x16, 2x8, 2x20, 4x20وغيرها . لأمثلة هذا الفصل سوف نستخدم وحدة عرض 4x20. لبدء محاكاة LCD ببرنامج إيزيس يتم جلب الأجهزة LM044L و PIC 16F84A . الاسم المرجعى LM044L فى إيزيس هو لوحدة عرض 4x20 LCD. وأخيرا يكون التوصيل كما فى الدائرة التالية:
وحدة العرض LCD بها طرف يسمى VEE , , هذا الطرف وظيفته التحكم فى تباين contrast الشاشة , ولكن فى أغراض المحاكاة ليس له تأثير , هذا الطرف يمكن توصيله بالأرضى للحصول على أعلى تباين , بعض الشاشات تحتاج لجهد سالب خارجى للتحكم فى التباين وكلما زاد الجهد السالب كلما قل التباين . وللأغراض العملية يمكن ضبط التباين عن طريق مقاومة متغيرة كما هو موضح بالدائرة التالية :





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