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

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 31-07-2015, 02:10 AM المشاركة 1   
افتراضي الليد ماتريكس LED MATRIX  علميا وعمليا والبرمجة بلغة السى والمترجم MIKROC والمترجم CC Twitter FaceBook Google+



الليد ماتريكس LED MATRIX  علميا وعمليا والبرمجة بلغة السى والمترجم MIKROC والمترجم CCS C :


الجزء الأول :
فى هذا الجزء سوف نحتاج إلى :
1- برمجيات المترجم ميكروسى برو ، و/ أو المترجم CCS C .
2- برمجيات بروتيس Proteus لمحاكاة النتائج .  

أولا : مقدمة
ما هو الليد ؟  What is an LED ? :




دعونا نبدأ من الأساسيات ، فنحن سوف نعمل مع الليدات LEDs  ، لذلك من الأفضل أن يكون لدينا معرفة حول هذه الأجهزة (المكونات) الصغيرة . هذه المعرفة ضرورية ، بمعنى أنك قد تحتاج إليها وخاصة إذا كانت الليدات الخاصة بك ذات خواص مختلفة .
الشىء الأول ، أن الليد LED ، فى الأساس ، هو دايود ، كما نعلم جميعا ، يكون له وصلة PN مثل أى وصلة PN ، هذه الوصلة تقوم بالتوصيل conduct فى اتجاه واحد فقط  ( خواصه أقرب إلى دايود الزينر) .
الشىء الثانى ، هو أن هناك مستوى معين من الجهد ( عتبة الجهد) ، والذى يلزم تطبيقه على طرفى الليد لجعله يوصل . قبل هذا الجهد يكون لليد مقاومة مرتفعة جدا ، لذلك لا يمكنك تقييم (تقدير) مقاومته عندما يكون موصلا وبالتالى التيار المسحوب .      
الأهم من ذلك ، هو حقيقة أن التيار الزائد over-current سوف يؤدى إلى تلف الوصلة PN ، خاصة إذا كان المصدر الخاص بك قادرا على توفير تيار أعلى من 100mA ، فعندما يتم تطبيق جهد الانهيار بين طرفى الليد فإن مقاومتة سوف تهبط لقيمة صغيرة جدا تكاد لا تذكر ، ويقوم بتوصيل كل التيار الذى يمكن أن يوفره المصدر ، هذا التيار المرتفع بالتأكيد سوف يؤدى إلى تلف الليد . لذلك فمن المهم أن نعرف (نحدد) التيار المطلوب لليد ، وتبعا لمصدر الجهد الخاص بك يتم حساب قيمة مقاومة يتم توصيلها على التوالى معه للحد من التيار .
معظم الليدات الشائعة الاستخدام تستهلك تيار 25mA ، لكن الليدات الأكبر والأكثر سطوعا قد تستهلك تيار أكثر . لذلك عليك التحقق أما من الشركة المصنعة أو باستخدام القياسات .
ضع فى اعتبارك أن الليدات هى أجهزة يتم تشغيلها بالتيار ، ولا يتم تشغيلها بالجهد . للحفاظ على إضاءة ثابتة تحتاج الليدات لمصدر تيار ثابت ، وهو خارج عن هذا الموضوع .
فى معظم المشاريع نستخدم الميكروكونترولر ، وبالتالى فإن جهد المصدر المتاح هو 5V DC . باستخدام قانون أوم
I = V/R   نحسب قيمة المقاومة R من أجل تيار قيمته  25mA .



ما هى الليد ماتريكس (مصفوفة الليدات) LED Matrix  ؟


اعلانات

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


ما هى الليد ماتريكس (مصفوفة الليدات) LED Matrix ؟
تشغيل الليدات بشكل منفرد يحتاج خط تحكم لكل ليد ، وهذا يعنى استخدام الكثير من الأسلاك وبالتالى يكون الهاردوير ضخم . الليد ماتريكس هى ترتيب خاص لليدات فى شكل مصفوفة ، حيث يكون لكل ليد صف row وعامود column ، لذلك إذا كان لدينا 8 صفوف و 8 أعمدة ، أى مصفوفة “8x8” ، فإنه يكون لدينا 64 ليد ، و128 طرف تحكم . يمكننا توصيل جميع الكاثودات معا ، لكن لايزال لدينا 64 أنود يحتاج معالجة .

فى الليد ماتريكس ، نطبق حيلة ذكية أخرى عند توصيلها ، حيث يتم توصيل جميع أنودات الليدات الموجودة فى الصف الواحد مع بعضها لتشكيل طرف أنود مشترك واحد ، وتوصيل جميع كاثودات الليدات الموجودة فى العامود الواحد مع بعضها لتشكيل طرف كاثود مشترك واحد . الآن ، إذا كان لدينا ليد ماتريكس “8x8” فسوف يكون لدينا ثمانية أسلاك من أجل الثمانى صفوف و ثمانية أسلاك من أجل الثمانية أعمدة .
يمكنك اختبار التوصيل الداخلى لليد ماتريكس ، الموجودة ضمن برنامج بروتيس ، عن طريق توصيل الجهد السالب إلى الصف الأول ، على سبيل المثال ، وتوصيل الجهد الموجب إلى العامود الأول ، فيضىء الليد الموجود عند الركن الأيسر العلوى ، كما هو موضح بالشكل التالى أدناه :



بهذه الطريقة يمكننا التحكم فى أى ليد بشكل منفرد ، ولكن هناك بعض القيود ، التى يمكنك إدراكها بسرعة ، وهى أن بعض مجموعات الليدات لا يمكن تشغيلها فى نفس الوقت دون التأثير على الليدات الأخرى . لحسن الحظ يوجد حل لهذه المشكلة ، حيث تأتى الطبيعة لمساعدتنا ، فسوف نقوم بإضاءة صف (أو عامود) واحد فى كل مرة ، صف تلو الصف ، ونفعل ذلك بسرعة بحيث أن أعيننا لا يمكنها تتبع التغيير ، ونرى المصفوفة بكاملها متوهجة . هذه الظاهرة تسمى "استمرارية أو تواصل الرؤية" “persistence of vision” أو اختصارا POV .

بناء ليد ماتريكس :

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

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


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

وحدات (موديولات) الليد ماتريكس الجاهزة :
فى الوقت الراهن يتوفر تجاريا العديد من وحدات الليد ماتريكس بلون واحد أو بلونين أو حتى بثلاثة . هذه الوحدات بها جميع التوصيلات اللازمة داخليا ، فقط يظهر خارجها أطراف الصفوف والأعمدة للربط مع باقى الهاردوير . كما تتوفر هذه الوحدات بأحجام وتكوينات مختلفة مثل 5x7, 8x8, 16x16 وغيرها . بمجرد فهم تقنية الربط الأساسى يمكنك إنشاء شاشات عرض أكبر من خلال تجميع وحدات متعددة جنبا إلى جنب وتوصيلها معا لتشكيل ليد ماريكس واحدة .



تدريب عملى : التعرف على أطراف موديول ليد ماتريكس 8X8 طراز HS-2088BS :


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


تدريب عملى : التعرف على أطراف موديول ليد ماتريكس 8X8 طراز HS-2088BS :





http://fathallaabdelaziz.forumarabia.com/


ثانيا : مسح الشاشة Scanning The Display :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 31-07-2015, 02:38 AM المشاركة 5   
افتراضي ثانيا : مسح الشاشة Scanning The Display :


ثانيا : مسح الشاشة Scanning The Display :
كما ذكر سابقا ، تقنية هذا النوع من الشاشات (وحتى التلفزيون) تستخدم ظاهرة دوام الرؤية POV كأداة لإعطاء عرض لصورة وهمية (خداع بصرى) .
الآن ، عندما يكون لدينا ليد ماتريكس يكون لدينا خياران :
• الخيار الأول : تقنية مسح الصفوف ، بمعنى تشغيل صف row واحد فى كل مرة ، مع عرض (تواجد) نموذج الليدات الموصلة on وغير الموصلة off على الأعمدة ، وإعطائها بعض الوقت لترك أثر للصورة على أعيننا ، ثم بعد ذلك يتم إيقاف تشغيل الصف الأول والانتقال إلى تشغيل الصف الثانى ، ويتم تكرار نفس العملية مرة أخرى ومرة أخرى .
• الخيار الثانى : تقنية مسح الأعمدة ، يمكننا استخدام مسح الأعمدة ، بنفس الكيفية ، بدلا من مسح الصفوف .
كلا التقنيتين جيد على حد سواء .
بالنسبة لوحدات العرض الصغيرة ، يكون مسح الأعمدة سهل ، لأنك لن تكون مجبرا على معالجة بتات بيانات كثيرة ، ولكن كلما زاد طول الليد ماتريكس ، كان لزاما عليك مسح المزيد والمزيد من الأعمدة ويصبح العرض مرتعش . لذلك سوف نختار طريقة مسح الصفوف ، بحيث أن المفاهيم المكتسبة بالتطبيق على الشاشات ذات الحجم الصغير يمكن بسهولة تطبيقها على الشاشات ات الحجم الكبير .
كما ترى ، عند عرض صف واحد ، وبفرض أن جميع الليدات الموجودة بهذا الصف تكون فى حالة تشغيل on ، فإنه يمكن أن يكون هناك سحب كبير للتيار . على سبيل المثال ، إذا كان لدينا 16 ليد فى الصف الواحد وكل ليد يحتاج إلى حوالى 25 ملى أمبير للسطوع الكامل ، عندئذ نحن بحاجة إلى ما لا يقل عن “16X25=400mA" من التيار . لذلك يجب أن تكون دائرة مصدر التيار قادرة على توفير هذا التيار ، التقصير فى ذلك يتسبب فى إعتام إضاءة الليدات .
عادة تستخدم ترانزستورات لتوفير التيار اللازم لتشغيل الشاشة ، لأن تشغيلها من خلال أطراف الميكروكونترولر مباشرة يمكن أن يؤدى إلى تلف الميكروكونترولر .

خيارات تصميم الهاردوير :
الآن وبعد أن قررنا أننا سوف نقوم بمسح الصفوف ، فإننا نحتاج لمعرفة أفضل حل من أجل اختيار الصفوف وتمرير البيانات إلى الأعمدة . تذكر أنه ، على سبيل المثال ، فى شاشة 16x8 ، يكون لدينا 8 صفوف و16 عامود ( ممكن أن يكون 8 أعمدة ليدات حمراء و 8 أعمدة ليدات خضراء فى مصفوفة ليدات ذات لونين) . إذا استخدمنا ميكروكونترولر به عدد كبير نسبيا من خطوط الدخل/الخرج (مثل PIC16F877A) يمكننا استخدام منفذين من أجل الأعمدة بكل منفذ 8 بت ، ومنفذ 8 بت لمعالجة مسح الصفوف ، وهذا سوف يحتاج ما مجموعة 24 خط دخل/خرج . البرمجة سوف تكون بسيطة ، لأن تحديد بيانات الأعمدة سوف تأخذ 2 بايت لتمريرها على المنفذين ، ويمكن اختيار الصف بواسطة تحديد البت المناسب من المنفذ بواحد “1” فى حالة الأنود المشترك ، أو بصفر فى حالة الكاثود المشترك ، وبعد ذلك يتم زحزحة بيانات الأعمدة لموقع واحد عند كل تغيير للبيانات . هذا التصميم يتطلب ميكروكونترولر بعدد كبير من خطوط الدخل/الخرج ولا يمكن استخدام الشاشة مع ميكروكونترولر به عدد قليل من خطوط الدخل/الخرج . علاوة على ذلك ، إذا كنا بحاجة إلى توسيع الشاشة ، مثل وجود 4 أو 5 وحدات معا فى صف واحد طويل ، فمن الصعب توفر ميكروكونترولر به مثل هذا العدد الكبير من خطوط الدخل/الخرج . وبالتالى فإن هذه الطريقة خارج نطاق موضوعنا ، ولابد من حل هذه المشكلة ، وكان الحل فى استخدام مسجلات الأزاحة .

ثالثا :مسجلات الإزاحة والليد ماتريكس Shift Registers and LED Matrix (معالجة البيانات)

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً mous_31 ( شكر العضو على هذه المشاركة )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 31-07-2015, 03:10 AM المشاركة 6   
افتراضي تدريب رقم 1 : توضيح فكرة المسح ، بعرض حرف ثابت على ليد ماتريكس 8X8 بتوصيل الصفوف والأ


تدريب رقم 1 : توضيح فكرة المسح ، بعرض حرف ثابت على ليد ماتريكس 8X8 بتوصيل الصفوف والأعمدة مباشرة إلى أطراف منافذ الميكروكونترولر (16 طرف) أى بدون استخدام دوائر متكاملة مساعدة :
البرنامج مع المترجم ميكروسى :


كود:
/******************************************************
LED Matrix Display  , MIKROC , Basic Program 
Display one fixed character : A
Rows scanning = PORTB connected to anodes ,
Data connected to PORTC , cathodes
*******************************************************/

//Character Bits Information as 8 byte array
//{0x3E,0x7E,0xC8,0xC8,0x7E,0x3E,0x00,0x00}, // A
 void main ()
{
TRISB=0;
TRISC=0;
PORTB=0;
PORTC=0;

   while(1)
   {
   PORTB=1; 			//select row 1 , 0b00000001
   PORTC=~0x3E;     	//Send inverse character data byte
   delay_ms(5);
   //============
   PORTB=2; 			//select row 2 , 0b00000010
   PORTC=~0x7E;     	//Send inverse character data byte
   delay_ms(5);
   //==================
   PORTB=4; 			//select row 3 , 0b00000100
   PORTC=~0xC8;     	//Send inverse character data byte
   delay_ms(5);
   //=====================
   PORTB=8; 			//select row 4 , ......
   PORTC=~0xC8;     	//Send character data byte
   delay_ms(5);
   //=====
   PORTB=16; 			//select row 5 , .......
   PORTC=~0x7E;     	//Send inverse character data byte
   delay_ms(5);
   //============
   PORTB=32; 			//select row 6 , ......
   PORTC=~0x3E;     	//Send inverse character data byte
   delay_ms(5);
   //==================
   PORTB=64; 			//select row 7 , ......
   PORTC=(~0x00);     	//Send inverse character data byte
   delay_ms(5);
   //=====================
   PORTB=128; 			//select row 8 , 0b10000000
   PORTC=~0x00;     	//Send inverse character data byte
   delay_ms(5);

   }
}
نتيجة المحاكاة :






الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 31-07-2015, 03:20 AM المشاركة 7   
افتراضي تدريب رقم 2 : استخدام المصفوفات arrays فى تبسيط و تحسين شكل البرنامج السابق :


تدريب رقم 2 : استخدام المصفوفات arrays فى تبسيط و تحسين شكل البرنامج السابق :
البرنامج :



كود:
ED Matrix Display , MIKROC ,Using arrays
Display one fixed character : A
Rows scanning = PORTB connected to anodes ,
Data connected to PORTC , cathodes

*******************************************************/
//Define Matrix Character Information as 8 byte array
unsigned char font[8]={0x3E,0x7e,0xC8,0xC8,0x7E,0x3E,0x00,0x00}; // A
unsigned char row_select[8]={1,2,4,8,16,32,64,128};
unsigned char i ;
 void main ()
{
TRISB=0;
TRISC=0;
PORTB=0;
PORTC=0;

   while(1)
   {
	for(i=0 ; i<8 ; I++)
	{
	PORTB=row_select[i]; //select row as array element
	PORTC=~font[i];//send data to port C as array element
	delay_ms(5); // short delay
   }
      }
}

نتائج المحاكاة :






الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 31-07-2015, 03:34 AM المشاركة 8   
افتراضي عرض النصوص Displaying Text :


عرض النصوص Displaying Text :
النص Text له وجهين (شكلين) :
• الوجه الأول هو النص نفسه ، والذى يتكون من أحرف كود أسكى ، ويمكن تخزينه فى شكل سلسلة نصية string
• الوجه الثانى هو التمثيل الرسومى graphic أو خريطة النقط bitmap .
التمثيل النقطى (خريطة النقط) لمجموعة معينة من الأحرف يسمى الخط أو الفونت font . يمكنك تحديد الفونت الخاص بك لتمثيل مجموعة من الأحرف .
تتكون مجموعة أحرف النص القياسية text من الأحرف الأبجدية والرقمية : 0-9, A-Z , a-z جنبا إلى جنب مع بعض الأحرف الخاصة مثل الفاصلة ، والفاصلة المنقوطة , والمسافة الفارغة ، إلخ .
فى البداية يمكننا تحديد عدد محدود وقليل من الأحرف ، مثل الحروف الكابيتال A-Z وتجاهل الأحرف الخاصة ، أو اختيار مجموعة أحرف أسكى الكاملة . لكن ، تذكر أنه كلما كانت مجموعة الأحرف أكبر كلما زاد التمثيل النقطى وبالطبع زادت مساحة التخزين المطلوبة لها .

التمثيل النقطى للحرف Bitmap of a character :
معظم أنظمة الشاشات ، مثل شاشات LCD أو الوحدات الطرفية تستخدم ماتريكس بتات نوع 5X7 لتمثيل وعرض الحرف . وهذا الحجم من المصفوفات يعتبر جيد إلى حد ما لعرض وتمثيل معظم الأحرف المستخدمة بشكل شائع . لكن يوجد الماتريكس 8X8 ، وهى بالتأكيد يمكن أن تستوعب التمثيل النقطى للماتريكس 5X7 بسهولة ، كما أنها تتيح لنا الحرية فى استخدام الماتريكس 8X8 بكاملها لعمل تمثيل نقطى أكثر تفصيلا (تجسيدا).
البداية تكون برسم ماتريكس من المربعات الفارغة على ورقة وملء المربعات المناسبة بنقط الرسم " تسمى بكسلات" pixels التى تريد تشغيلها (عرضها) ، كما فى الشكل التالى :



http://fathallaabdelaziz.forumarabia.com/

الآن لديك 8 بايت من البيانات ، كل بايت يمثل بتات بيانات الأعمدة لصف واحد . لذلك فإن " كل حرف من خط نوع 8X8 سوف يتطلب 8 بايت من البيانات" . مجموعة الحروف النقطية سوف تحتاج أن يتم تخزينها فى مكان ما ، يمكنك تخزينها كجزء من ذاكرة البرنامج كثوابت ، أو تخزينها فى الذاكرة EEPROM للميكروكونترولر . إذا سمح الهاروير الخاص بك ، فإن أفضل مكان يستخدم للتخزين هو ذاكرة خارجية EEPROM والتى تعتمد على الناقل I2C ، أو استخدام كارت تخزين بيانات SD . وهنا ، سنحاول تقليل الاعتماد على أجهزة الهاردوير الخارجية وسيتم تخزين الأحرف النقطية فى ذاكرة البرنامج كثوابت .

موضوع مغلق

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

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

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


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

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