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

   

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 21-05-2015, 03:38 AM المشاركة 9   
افتراضي تدريب للتعرف على مبدأ تحريك الأحرف : تحريك حرف “A” جهة اليسار أو جهة اليمين :



تدريب للتعرف على مبدأ تحريك الأحرف : تحريك حرف “A” جهة اليسار أو جهة اليمين :



البرنامج :

كود:
#include <16F877A.h>
#use delay(clock=4000000)
 
unsigned int8 i,j,s,
A[8]={0xFF,0x03,0x01,0xEE,0xEE,0x01,0x03,0xFF},
A_copy[8];
 
void main()
{
        
    while(true)
    {
            ///////////1- Initially display the fixed photo data "A"  ////////////////////////
        
       for (i=1;i<25;i++)  //25 =  No. of repeated cycles (loops) to display each character on LED matrix
          {
          s=1; // select row #1
         for(j=0;j<8;j++) // 8 Bytes each character display process cycle (loop) is made up of :
         {
            output_D(s); //select ROW ,and send the value to port D for scanning 
            output_B(A[j]);     //For this ROW:Send character data to columns connected to port B to display information
            delay_ms(5);          // Short delay
         s=s<<1; // select next row 
         }
      }
    
     ////////end of display fixed photo //////////////*/
     
      //2-Shift data ///////////////
      /////a- Copy : Array A contains 8 element : say index  0.,1,2,3,4,5,6,7 to shift array A_copy
              for(j=0;j<=7;j++)  // Repeat 8 times
        {
           A_copy[j]=A[j]; // copy 8 elements from A[] to A_copy[] , the 2 arrays contain same elements 
        }
      //////b-Shift part1 /////////////////////////////////
        for(j=0;j<7;j++)  //Repeat 10 times //
        {
            A[j]=A_copy[j+1];  // A[0]=A_copy[1] ,A[1]=A_copy[2],.....A[6]=A_copy[7] ie now array A[] contains shifted data Except A[7] , so :  
        }
      ////////c-shift part2 /////////////////////////////
        A[7]=A_copy[0];  //copy last element of A_copy[] to frist element of A[] , shift it 
        //at the next loop display shift one position to LEFT  
  
    }
}
شرح أجزاء البرنامج :
1- تعريف مصفوفات الحرف ، المصفوفة A[8] ، نوع الحرف ، لتخزين البايتات الثمانية التى تشكل نقط الحرف ، والمعروفة مسبقا ، والمصفوفة A_copy[8] ، نوع الحرف ، وبنفس عدد عناصر المصفوفة السابقة ، وهى مصفوفة مساعدة ، أو وسيطة لتنفيذ عملية الإزاحة كما سوف يرد لاحقا .

كود:
A[8]={0xFF,0x03,0x01,0xEE,0xEE,0x01,0x03,0xFF},
A_copy[8];
2- المسح و العرض : كما سبق فى الأمثلة السابقة ، بغرض عرض الحرف بشكل ثابت فى البداية :

كود:
///////////1- Initially display the fixed photo data "A"  ////////////////////////
        
       for (i=1;i<25;i++)  //25 =  No. of repeated cycles (loops) to display each character on LED matrix
          {
          s=1; // select row #1
         for(j=0;j<8;j++) // 8 Bytes each character display process cycle (loop) is made up of :
         {
            output_D(s); //select ROW ,and send the value to port D for scanning 
            output_B(A[j]);     //For this ROW:Send character data to columns connected to port B to display information
            delay_ms(5);          // Short delay
         s=s<<1; // select next row 
         }
      }
    
     ////////end of display fixed photo ///////////
3- الإزاحة جهة اليمين أو جهة اليسار : وأخيرا إزاحة العرض ليبدو للعين وكأن الحرف يتحرك . هنا :
أ‌- يتم أولا نسخ بايتات المصفوفة A[] إلى المصفوفة المساعدة A_copy[j]=A[j] كما هى .
ب‌- بعد ذلك يتم إعادة نسخ البايتات من المصفوفة المساعدة إلى المصفوفة A[] ، لكن بترتيب محدد لنحصل على الإزاحة المطلوبة ، بمعنى A[0]=A_copy[1] أى يتم نسخ البايت الثانى إلى البايت الأول و A[1]=A_copy[2] أى نسخ البايت الثالث إلى البايت الثانى ، وهكذا حتى A[6]=A_copy[7] أى نسخ البايت الثامن إلى البايت السابع ، وفى النهاية ولتكملة الدورة يتم نسخ البايت الأول إلى البايت الثامن A[7]=A_copy[0] ، وتكون النتيجة إزاحة العرض جهة اليسار .

كود:
//2-Shift data ///////////////
      /////a- Copy : Array A contains 8 element : say index  0.,1,2,3,4,5,6,7 to shift array A_copy
              for(j=0;j<=7;j++)  // Repeat 8 times
        {
           A_copy[j]=A[j]; // copy 8 elements from A[] to A_copy[] , the 2 arrays contain same elements 
        }
      //////b-Shift part1 /////////////////////////////////
        for(j=0;j<7;j++)  //Repeat 10 times //
        {
            A[j]=A_copy[j+1];  // A[0]=A_copy[1] ,A[1]=A_copy[2],.....A[6]=A_copy[7] ie now array A[] contains shifted data Except A[7] , so :  
        }
      ////////c-shift part2 /////////////////////////////
        A[7]=A_copy[0];  //copy last element of A_copy[] to frist element of A[] , shift it 
        //at the next loop display shift one position to LEFT  
  
    }
}

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 21-05-2015, 10:10 AM المشاركة 10   
افتراضي


دائما متميز استاذنا الكريم

أرجو ان تضع لنا صورة حقيقة عن الشاشة لكي نتعرف على كيفية توصيل الأقطاب في الواقع

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

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

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

الصورة الرمزية Sallam
Sallam
:: مهندس متميز ::
تاريخ التسجيل: Mar 2006
الدولة: Syria
المشاركات: 515
نشاط [ Sallam ]
قوة السمعة:
قديم 21-05-2015, 11:10 AM المشاركة 11   
افتراضي


أشكرك لردك الطيب

أنا واثق مما تقدمه ولكن أسأل عن هذه القطعة لأنني املك واحدة للتجارب ولكن ما زلت لا أعرف طريقة توصيل أقطابها أي تسلسلهم من حيث التغذية ووو

تأكد بأنني متابع معك ولا أستعجل الأمور

خطوة خطوة أنا متابع وأحاول مجاراتك بالتمارين وفهم الفكرة من كل مثال

مع تمنياتي بكل التوفيق


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 22-05-2015, 02:14 AM المشاركة 12   
افتراضي


مبدأ برمجة سجل الإزاحة 74164 ، دخل تسلسلى خرج متوازى بدون ماسك مع الليد ماتريكس والمترجم CCS C :



سوف نتقدم خطوة إلى الأمام ، ونستخدم سجل الإزاحة 74164 فى عملية المسح ، ولتقليل عدد الأطراف المستخدمة من الميكروكونترولر ، فبدلا من استخدام 8 أطراف للمسح سوف نستخدمين طرفين فقط هما طرف البيانات التسلسلية وطرف الساعة .

كل ما تحتاجه عملية برمجة سجل الإزاحة ليقوم بعملية المسح :



• تطبيق نبضة تنتقل من الحالة المنخفضة إلى الحالة المرتفعة output_high(data_pin)) على طرف الدخل التسلسلى ، وتنتظر هناك لحين وصول نبضة الساعة .
• إنشاء حلقة for للتكرار 8 مرات : فى المرة الأول نبدأ بتطبيق نبضة ساعة مرتفعة على طرف الساعة output_high(clock_pin) ، هذه النبضة تؤدى إلى دخول نبضة البيانات المرتفعة إلى أول ذاكرة بمسجل الإزاحة فتبقى هناك كما أنها سوف تظهر على الخرج الأول لتشكل نبضة اختيار الصف الأول ، ومن ثم يلى ذلك إرسال أول بايت من بيانات العرض A[0] إلى المنفذ PORTB بكامله ثم تأخير قليل ليستقر العرض ، بعد ذلك يتم إزالة نبضة الساعة بتطبيق الحالة المنخفضة output_low(clock_pin) ثم بعدها إزالة نبضة البيانات بتطبيق الحالة المنخفضة output_low(data_pin) .
• فى التكرار التالى يكون طرف البيانات داخل الحلقة فى الحالة المنخفضة “0” حيث يتم تطبيق نبضة الساعة التالية فيدخل الصفر أول ذاكرة (ويظهر على المخرج الأول ليفصل مسح الصف الأول) ، ويقوم بدفع الواحد الموجود سابقا إلى الذاكرة الثانية ، ليظهر على المخرج الثانى ، وتكون النتيجة هى إزاحة النبضة المرتفعة إلى المخرج الثانى الذى يستخدم فى مسح الصف الثانى فقط . وتستكمل الدورة كما سبق .
• تتكرر الدورات حتى يتم عرض جميع بيانات العرف




البرنامج :

كود:
#include <16F877A.h>
#use delay(clock=4000000)

#define clock_pin pin_d0
#define data_pin pin_d1
 
unsigned int8 i,j,n,
A[11]={0xFF,0xC0,0x80,0x77,0x77,0x80,0xC0,0xFF,0xFF,0xFF,0xFF},// increase 3 spaces at the end of an array
A_copy[11];
 
void main()
{
    
    while(true)
    {
        //1- Initially display the fixed photo data "A"  , frame 
      for(n=0;n<=25;n++) //Repeat 25 times to obtain steady display , speed of display
       {
            output_high(data_pin);// using 74164 for scanning selection , we need only one high pulse and shift it to select rows (or columns) at clock pulses
            
         /////////////////////////////////////////////////////////////
         for(i=0;i<=7;i++) //Repeat 8 times for first 8 elements of array A[11] , as for fixed photo on 8x8 led matrix ,fram 
            {    
                output_high(clock_pin); //1-clock pulse , low to high and data high will give  high to Q0 , Q1 , .....Q7 to select rows
               output_b(A[i]);//2-send one byte of data to columns 
               delay_ms(1); // very short delay 
                output_low(clock_pin); // clock low to be ready for next loop     
                output_low(data_pin); //we need only one high pulse and shift it to select rows so we must reset data after first loop 
            }
         /////////////////////////////////////////////////////////
        }
      //end of display fixed frame 
      
     //2-Shift data 
      //a- Copy : Array A , 11 element 
              for(j=0;j<=10;j++)  // Repeat 11 times
        {
            A_copy[j]=A[j]; // copy 11 elements from A[] to A_copy[] , the 2 arrays have  same elements 
        }
      //b-Shift part1
        for(j=0;j<=9;j++)  //Repeat 10 times //
        {
            A[j]=A_copy[j+1];  // A[0]=A_copy[1] (shift-left) ,A[1]=A_copy[2],.....A[9]=A_copy[10] , now array A[] has shifted data Except A[10] , so :  
        }
      //c-shift part2 
        A[10]=A_copy[0];  //copy first element of A_copy[] to last element of A[] , shift it 
        //at the next loop display shifts one position-left  
  
    }
}


yac100
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2007
الدولة: فلسطين - غزة
المشاركات: 140
نشاط [ yac100 ]
قوة السمعة:
قديم 25-05-2015, 07:36 PM المشاركة 13   
افتراضي


السلام عليكم ورحمة الله وبركاته وبعد
جزاك الله خيرا على طرح الموضوع الرائع لكن هل اكملت الموضوع على أن يكون هناك توصيل اكثر عدد من led matrix
وبارك الله فيك على الموضوع الرائع والشيق


musta
:: مهندس ::
تاريخ التسجيل: Feb 2006
المشاركات: 18
نشاط [ musta ]
قوة السمعة:
قديم 20-03-2016, 07:37 PM المشاركة 14   
x4


svp avec quelle compilateur C



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