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

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 31-10-2011, 10:41 PM المشاركة 1   
افتراضي تفاصيل وأساس عمل مصفوفة الليدات وعرض الرسائل الساكنة والمتحركة Basic led matrix Twitter FaceBook Google+



أساس عمل مصفوفة الليدات Basic led matrix :

بناء على تجارب ربط interfacing الليدات وربط وحدات العرض 7 segment نتقدم لربط شاشة العرض المكونة من نقط على شكل مصفوفات من الليدات LED dot matrix display.

فى هذه التجربة سوف نناقش الهيكل الأساسى لشاشة عرض منفردة وربطها مع الميكروكونترولر بغرض عرض حروف ورموز ساكنة . وسوف نتناول عملية التحريك (الدوران -اللف) Scrolling فى التجربة القادمة. سوف نستخدم الميكروكونترولر PIC16F877A .







نظرية عمل شاشة العرض LED dot matrix :

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 31-10-2011, 10:42 PM المشاركة 2   
افتراضي


نظرية عمل شاشة العرض LED dot matrix :


فى هذه الشاشة يتم توصيل الليدات مع بعضها فى شكل صفوف rows وأعمدة columns بغرض تقليل عدد الأطراف المطلوبة لتشغيلها . فعلى سبيل المثال وحدة عرض 8X8 سوف تحتاج إلى 64 طرف مدخل / مخرج (طرف لكل نقطة ليد ) . بتوصيل جميع الأنودات مع بعضها فى شكل صفوف ( من الصف الأول R1 إلى الصف الثامن R8 ) وتوصيل الكاثودات مع بعضها فى شكل أعمدة (من العامود الأول C1 إلى العامود الثامن C8 ) فإن أطراف المداخل / المخارج المطلوبة للتشغيل تقل إلى 16 طرف . كل ليد يعنون برقم صفه وعاموده . ففى الشكل التالى إذا جعلنا الصف الرابع R4 فى الحالة المرتفعة ( الأنودات) وجعلنا العامود الثالث C3 فى الحالة المنخفضة (الكاثودات – لاحظ حرف C مشترك بين معنى العامود والكاثود ) فأن الليد الموجود فى الصف الرابع والعامود الثالث سوف يضىء . يمكن عرض الحروف بالمسح السريع لأى من الصفوف أو الأعمدة . فى هذه التجربة سوف نناقش طريقة مسح الأعمدة column scanning .







الشكل فى برمجيات Proteus






سوف نعرض الحروف فى الشكل القياسى 8X8 أو 5X7 .
الشكل التالى يبين أى الليدات يكون مضىء لعرض الحرف ‘A’ . يتم التحكم فى السبع صفوف والخمس أعمدة من خلال أطراف الميكروكونترولر .







لنرى كيف تعمل :

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً khamis54 ( شكر العضو على هذه المشاركة )
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 31-10-2011, 10:43 PM المشاركة 3   
افتراضي


لنرى كيف تعمل :
لعرض الحرف A :
1- نختار أولا العامود C1 (هذا يعنى جعله فى الحالة المنخفضة) وفى نفس الوقت عدم اختيار باقى الأعمدة بمنع توصيلها بالأرضى ( أحد الطرق لعمل ذلك هو جعل C2 إلى C5 فى الحالة المرتفعة ).
2- الآن أصبح العامود الأول فعال وتحتاج إلى توصيل ON الليدات بالصفوف من R2 إلى R7 الموجودة فى العامود الأول C1 والتى تمثل الجزء الأول فقط من الحرف , ويتم ذلك بتوصيل الجهد الموجب (الحالة المرتفعة) لهذه الصفوف .
3- الخطوة التالية اختيار العامود الثانى C2 (وعدم اختيار باقى الأعمدة ) , وتوصيل الجهد الموجب إلى الصفوف R1 و R5 , وهكذا . هذه العملية تسمى "عملية مسح الأعمدة وتغذية قيم البيانات إلى الصفوف " .
4- نتيجة لذلك بالمسح السريع خلال الأعمدة (سرعة المسح يجب أن تكون أكبر من 100 مرة بكل ثانية ) وتوصيل الليدات المناظرة فى كل صف لهذا العامود فأن صورة العرض تبدو ساكنة ومستقره للعين (خداع بصرى) .
الجدول التالى يعطى المستويات المنطقية التى يجب تطبيقها على الصفوف من R1 إلى R7 لكل عامود بغرض عرض الحرف A .






مثال لقيم بيانات صفوف العامود الأول :
0b01111110; = 0x7E; // إستكمال الخانة الثامة بصفر إى فصل الليد








لعلك لاحظت أنه فى كل صف طرف واحد يكون مصدر source التيار لليد واحد فقط ولكن طرف العامود يكون المصب sink للتيارات المارة خلال أكثر من ليد . على سبيل المثال العامود الأول C1 يجب أن يكون قادرا على أن يصب فيه تيار من 6 ليدات عند عرض الحرف A . أطراف المداخل / المخارج للميكروكونترولر لا تستطيع تناول هذا التيار المرتفع , لذلك نحتاج إلى مصفوفة (صف) من الترانزستورات . يمكن استخدام الدائرة المتكاملة ULN2003A والتى تحتوى على صف مكون من 7 ترانزستورات دارلنجتون كما فى الشكل . دخل هذه الدائرة المتكاملة يكون فعال فى الحالة المرتفعة active high . هذا يعنى أن أطراف دخل الدائرة المتكاملة ULN2003يجب أن تغذى بمنطق مرتفع (1) " لكى تجعل طرف الخرج المناظر موصلا بالأرضى " .








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


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 31-10-2011, 10:44 PM المشاركة 4   
افتراضي


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

سوف تحتاج إلى مقاومات 330 على التوالى مع الصفوف من R1 إلى R7 لتحديد التيار المار خلال الليدات . بعد ذلك يتم توصيل الصفوف بأطراف المنفذ PORTB(RB0-RB6) للميكروكونترولر . الأعمدة تتصل بخمسة مخارج من الدائرة المتكاملة ULN2003A. أطراف المداخل الخمسة المناظرة بالدائرة المتكاملة ULN2003 يتم التحكم فيها من خلال أطراف المنفذ PORTD(RD0-RD4) للميكروكونترولر. بهذه الطريقة يقوم الميكروكونترولر بمسح الأعمدة بإرسال الخانات المناظرة للمنفذ PORTD .على سبيل المثال تحديد الخانة RD0 بواحد ومسح (تصفير) الخانات RD1 إلى RD4 يؤدى إلى اختيار العامود الأول . سوف ينتظر الميكروكونترولر حوالى واحد ملى ثانية قبل التحول إلى العامود التالى . عند كل عامود سوف يخرج الميكروكونترولر قيم الصفوف المناظرة على المنفذ PORTB لتوصيل الليدات المناظرة فى العامود لعرض الحرف المحدد . التحويل بين الأعمدة يكون سريعا بما يكفى لخداع البصر وليبدو العرض مستقرا .






البرنامج :


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


البرنامج :
الجزء الأكبر فى هذه التجربة هو روتين مسح الأعمدة وتغذية الصفوف بالقيم المناظرة .
يجب فى البداية إنشاء جدول بقيم الصف لعامود محدد واللازمة لعرض الحروف كما يجب إعلان وتخزين هذه القيم فى ذاكرة RAM أو تخزن فى ذاكرة البرنامج فى حالة ما إذا كانت ذاكرة RAM غير كافية . فى المترجم mikroC "تحفظ المتغيرات فى ذاكرة "RAM و"تحفظ الثوابت فى ذاكرة البرنامج" . لذلك إذا لم يكن الميكروكونترولر يمتلك ذاكرة RAM كافية فيمكنك تعريف مصفوفة ثابت constant array لحفظ قيم الصف بحيث أن الجزء من ذاكرة البرنامج الذى احتلته يؤدى إلى توفير ذاكرة RAM لمهمة أخرى .
ذاكرة RAM للميكروكونترولر PIC16F877A ليست كافية لحفظ قيم الصف لعرض الحروف من A إلى Z لذلك سوف نستعين بذاكرة البرنامج كما يلى :
أولا : الحروف من A إلى Z :


كود:
const unsigned short Alphabets[130]={ 
0x7e, 0×09, 0×09, 0×09, 0x7e, // A
0x7f, 0×49, 0×49, 0×49, 0×36,  // B
0x3e, 0×41, 0×41, 0×41, 0×22,
0x7f, 0×41, 0×41,0×22, 0x1c,
0x7f, 0×49, 0×49, 0×49, 0×63,
0x7f, 0×09, 0×09, 0×09, 0×01,
0x3e, 0×41, 0×41, 0×49, 0x7a,
0x7f, 0×08, 0×08, 0×08, 0x7f,
0×00, 0×41, 0x7f, 0×41, 0×00,  // I
0×20, 0×40, 0×41, 0x3f, 0×01,
0x7f, 0×08, 0×14, 0×22, 0×41,
0x7f, 0×40, 0×40, 0×40, 0×60,
0x7f, 0×02, 0×04, 0×02, 0x7f,
0x7f, 0×04, 0×08, 0×10, 0x7f,
0x3e, 0×41, 0×41, 0×41, 0x3e,
0x7f, 0×09, 0×09, 0×09, 0×06,
0x3e, 0×41, 0×51, 0×21, 0x5e,
0x7f, 0×09, 0×19, 0×29, 0×46,
0×46, 0×49, 0×49, 0×49, 0×31,  // S
0×01, 0×01, 0x7f, 0×01, 0×01,
0x3f, 0×40, 0×40, 0×40, 0x3f,
0x1f, 0×20, 0×40, 0×20, 0x1f,
0x3f, 0×40, 0×30, 0×40, 0x3f,
0×63, 0×14, 0×08, 0×14, 0×63,
0×07, 0×08, 0×70, 0×08, 0×07,
0×61, 0×51, 0×49, 0×45, 0×43 // Z
};
And this is how mikroC allows you to store arrays in the program memory.
const unsigned short characters[30]={
0×24, 0x2A, 0x7f, 0x2A, 0×12, // $
0×08, 0×14, 0×22, 0×41, 0×00, // <
0×41, 0×22, 0×14, 0×08, 0×00, // >
0×14, 0×14, 0×14, 0×14, 0×14, // =
0×36, 0×49, 0×55, 0×22, 0×50, // &
0×44, 0x3c, 0×04, 0x7c, 0×44, // PI
};
مثال توضيحى لعرض الحرف A :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 31-10-2011, 10:46 PM المشاركة 6   
افتراضي


مثال توضيحى لعرض الحرف A :


كود:
// "A"  عرض الحرف
كود:
 
// PIC16F877A-4MHZ
// PORTB = ROWS = ANODES // PORTD = COLUMNS = CATHODES // USING ULN2003 AS LED DRIVERS - inverse PORTD output
void main() { TRISB = 0b00000000; // Set PORTB direction to be output TRISD = 0x00; // Set PORTA direction to be output PORTB = 0x00; // Turn OFF LEDs on PORTB do{ //0x7E, 0x09, 0x09, 0x09, 0x7E, // بيانات الصفوف لكل عامود بدءا من العامود الأول // العامود الأول PORTD=0B00000001; //Select C1= ULN2033 will inverse it = cathodes اختيار العامود PORTB=0x7E; //Rows = anodes إرسال بيانات صفوف هذا اللعامود Delay_ms(1); //تأخير زمنى للفصل بين العامود والآخر // العامود الثانى PORTD=0B00000010; //Select C2=ULN2033 will inverse it= 0=cathodes PORTB=0x09; //Rows = anodes Delay_ms(1); // العامود الثالث PORTD=0B00000100; //Select C3=ULN2033 will inverse it= =0=cathodes PORTB=0x09; // Rows = anodes Delay_ms(1); // العامود الرابع PORTD=0B00001000; //Select C4=ULN2033 will inverse it==0= cathodes PORTB=0x09; //Rows = anodes Delay_ms(1); // العامود الخامس PORTD=0B00010000; //Select C5=ULN2033 will inverse it= 0=cathodes PORTB=0x7E; //Rows = anodes Delay_ms(1); } while(1);
}


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 31-10-2011, 10:47 PM المشاركة 7   
افتراضي


النتيجة :
محاكاة خاطئة نتيجة لعدم الاستجابة الصحيحة لبرمجيات Proteus للدائرة المتكاملة ULN2003 مع الليد ماتريكس (ومن قبل مع السفن سيجمنت ) لكن عند التنفيذ العملى يعمل البرنامج بطريقة صحيحة :







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

تطوير شكل البرنامج باستخدام ثابت من نوع المصفوفة وحلقة تكرار for :


الصورة الرمزية نور الهدى N
نور الهدى N
:: مهندس جيد ::
تاريخ التسجيل: May 2010
المشاركات: 226
نشاط [ نور الهدى N ]
قوة السمعة:0
قديم 31-10-2011, 10:48 PM المشاركة 8   
sun


سلمت يداك أستاذ " فتح الله "


التعديل الأخير تم بواسطة : نور الهدى N بتاريخ 31-10-2011 الساعة 11:05 PM
إضافة رد

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

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

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


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

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