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

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

الصورة الرمزية ناصراحمد2
ناصراحمد2
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: EGYPT
المشاركات: 1,334
نشاط [ ناصراحمد2 ]
قوة السمعة:98
قديم 12-06-2014, 01:35 AM المشاركة 1   
ha طلب : شرح مبسط عن المقاطعات وخاصة مع UART1 Twitter FaceBook Google+



السلام عليكم ورحمة الله وبركاتة

ارجو المساعدة فى شرح مبسط عن المقاطعات
يوجد بعض الشروحات ولكن اما انها غير مكتملة او غير واضحة او الصور مختفية

ببساطة
هو برنامج ماتركس
ويتم تغيير البيانات باستمرار عن طريق ال rs232
ببرنامج مصمم على الفجول بيسك

ومطلوب شرح مبسط للمقاطعات وخاصة مع UART1

بقالى مدة طويلة اعمل على هذا البرنامج بالفجول بيسك والميكروسى
الحمد لله مافيش اى مشاكل بالنسبة للفجول بيسك
ولكن معلوماتى البسيطة فى الميكروسى اعتقد انها السبب
لان النتيجة دائما تكون البرتوس فى وادى وبرنامج ال VB فى وادى اخر ههههههه

ارجو الرد سريعا
والا انتم عارفين ممكن اعمل اية
على النعمة حطفى عليكم النور واسيبكم تزاكرو على شمع

هههههههههههه

اعلانات

الصورة الرمزية ناصراحمد2
ناصراحمد2
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: EGYPT
المشاركات: 1,334
نشاط [ ناصراحمد2 ]
قوة السمعة:98
قديم 12-06-2014, 01:57 AM المشاركة 2   
yel


وهذا مجرد مثال لبرنامج بسيط للماتركس
هوباستخدام الميكروكونترول فقط
وتم وضعة كمجرد مثال ولتبسيط المهمة


كود:
 

 char uart_rd;
 char n,k,y,x;
 char m[8]={0b00000001,0b00000010,0b00000100,0b00001000,0b00010000,0b00100000,0b01000000,0b10000000};
  void main() { 
    cmcon=0x7;
  portb=0;
  trisb=0;
  portd=0;
  trisd=0;
  UART1_Init(9600);  
  Delay_ms(100); 

   while (1) { 
   if (UART1_Data_Ready()) { ,
    uart_rd = UART1_Read(); ,
     UART1_Write(uart_rd); 
     m[0]= uart_rd;
     }
    for(x=0;x<100;x++){
   PORTb=m[0];
 PORTd=0B11111110; delay_ms(500);
  ///////////

 PORTb=m[1];
 PORTd=0b11111101; delay_us(500);
 /////////////
 PORTb=m[2];
 PORTd=0b11111011; delay_us(500);
 ////////////
 PORTb=m[3];
 PORTd=0b11110111; delay_us(500);
 ///////////
 PORTb=m[4];
 PORTd=0b11101111; delay_us(500);
  /////////////
 PORTb=m[5];
 PORTd=0b11011111; delay_us(500);
 ////////////
 PORTb=m[6];
 PORTd=0b10111111; delay_us(500);
 ///////////
 PORTb=m[7];
 PORTd=0b01111111; delay_us(500);

    }  } }

المطلوب
البرنامج يعمل كما هو وفى نفس الوقت يتم تغيير القيم للمتغير m[8] عن طريق السيريال بورت
والمتغيرات التى سوف يتم تغييرها من الممكن ان تصل الى 255 متغير او اكثر
ولابد ان يتم التغيير بالترتيب والا اصبح البرنامج (لخبطنيشنس ) ههههههه
يالا انا عارف انى (حغلبكم معايا )
انما حنعمل اية من زماااااااان ماكتبتش مواضيع فى المنتدى
منتظر ردودكم وتمنياتى للجميع بالتوفيق والنجاح باذن الله
بس برضة حطفى النور

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

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 12-06-2014, 02:28 AM المشاركة 3   
افتراضي


وهذا مجرد مثال لبرنامج بسيط للماتركس
هوباستخدام الميكروكونترول فقط
وتم وضعة كمجرد مثال ولتبسيط المهمة


كود:
 

 char uart_rd;
 char n,k,y,x;
 char m[8]={0b00000001,0b00000010,0b00000100,0b00001000,0b00010000,0b00100000,0b01000000,0b10000000};
  void main() { 
    cmcon=0x7;
  portb=0;
  trisb=0;
  portd=0;
  trisd=0;
  UART1_Init(9600);  
  Delay_ms(100); 

   while (1) { 
   if (UART1_Data_Ready()) { ,
    uart_rd = UART1_Read(); ,
     UART1_Write(uart_rd); 
     m[0]= uart_rd;
     }
    for(x=0;x<100;x++){
   PORTb=m[0];
 PORTd=0B11111110; delay_ms(500);
  ///////////

 PORTb=m[1];
 PORTd=0b11111101; delay_us(500);
 /////////////
 PORTb=m[2];
 PORTd=0b11111011; delay_us(500);
 ////////////
 PORTb=m[3];
 PORTd=0b11110111; delay_us(500);
 ///////////
 PORTb=m[4];
 PORTd=0b11101111; delay_us(500);
  /////////////
 PORTb=m[5];
 PORTd=0b11011111; delay_us(500);
 ////////////
 PORTb=m[6];
 PORTd=0b10111111; delay_us(500);
 ///////////
 PORTb=m[7];
 PORTd=0b01111111; delay_us(500);

    }  } }

المطلوب
البرنامج يعمل كما هو وفى نفس الوقت يتم تغيير القيم للمتغير m[8] عن طريق السيريال بورت
والمتغيرات التى سوف يتم تغييرها من الممكن ان تصل الى 255 متغير او اكثر
ولابد ان يتم التغيير بالترتيب والا اصبح البرنامج (لخبطنيشنس ) ههههههه
يالا انا عارف انى (حغلبكم معايا )
انما حنعمل اية من زماااااااان ماكتبتش مواضيع فى المنتدى
منتظر ردودكم وتمنياتى للجميع بالتوفيق والنجاح باذن الله
بس برضة حطفى النور
السلام عليكم
أفضل طريقه لقراءه من uart هو قراءه حرف حرف
اولا لابد من تعريف مقاطعه عبر uart
كود:
GIE_bit=1;
 RCIE_bit = 1;                      // enable interrupt on UART1 receive
 TXIE_bit = 0;                      // disable interrupt on UART1 transmit
 PEIE_bit = 1;                      // enable peripheral interrupts
وهذه طريقه يتم قراءه حرف حرف

كود:
void Interrupt(){
 char tmp ;


if (RCIF_bit == 1)     // Do we have uart rx interrupt request?
   {
    tmp = UART1_Read(); // Get received byte

    switch (servo_state)
    {
      case  0: {
                if (tmp == 'm')                  // We have 'm'
                  servo_state = 1;                 // Expecting 'o'  and // goto case 1
                break;

               }
      case  1: {
                if (tmp == 'o') // We have 'o' ->
                     {
                      servo_state = 2;                // Expecting 't'  and // goto case 2
                    }
                else servo_state = 0;                 // Reset state machine

                break;
               }
    case  2: {
                if (tmp == 't') // We have 't' ->
                     {
                      servo_state = 3;                // Expecting number motor from 01 to 10  and // goto case 3
                      cont_no_motor=0;//reset counter

                    }
                else servo_state = 0;                 // Reset state machine

                break;
               }
    case  3: {
                if ((tmp >= '0' && tmp <='9' )||(tmp == '='))  // We have number
                     {

                      if(cont_no_motor <2 && tmp!='=')
                                          {
                                           servo_number[cont_no_motor]=tmp-'0';// store number in servo_number
                                           cont_no_motor++;// counter for number must be max 2
                                          }
                      if(tmp== '=')
                                    {
                                     if(cont_no_motor==2)servo_number[2]=(10*servo_number[0])+servo_number[1];// store no. for motor in servo_number[2]
                                     else servo_number[2]=servo_number[0];
                                     cont_no_motor=0; // reset counter
                                     servo_state=4;// goto case 4
                                    }
                     }

                else servo_state = 0;                 // Reset state machine

                break;
               }

     case  4: {
                if ((tmp >= '0' && tmp <='9')|| tmp=='#') // We have number ((angle)) ->
                     {
                      if(cont_no_motor <3 && tmp != '#')
                                          {
                                           angle_number[cont_no_motor]=tmp-'0';// store angle
                                           cont_no_motor++;
                                          }
                      if(tmp=='#')
                                    {
                                     if(cont_no_motor==3)angle[servo_number[2]-1]=(100*angle_number[0])+(10*angle_number[1])+angle_number[2];
                                     else if(cont_no_motor==2)angle[servo_number[2]-1]=(10*angle_number[0])+angle_number[1];
                                     else angle[servo_number[2]-1]=angle_number[0];
                                     cont_no_motor=0;
                                     computer=1;// go to calculate time for angle (( change angle to time))
                                     servo_state = 0;
                                    }
                     }

                else servo_state = 0;                 // Reset state machine

                break;
               }
    }
  }
}
ببساطه لو كانت عندي هذه كلمه matrix123456789 فأنه أقرأ حرف الاول اذا كان هو m أذن انتقل الى سطر الثاني ونقراه ايضا فأذا كان حرف ثاني هو a نتقل الى السطر ثالث case 3 واذا لا نقوم بتصفير عمليه ونعيد قراءه من جديد
ارجو متابعه هذا الشرح عن برنامج سابق كنت قد كتبته مهم في الامر هو كيف نقرا البيانات من uart
http://up.top4top.net/downloadf-top4...d45c1-rar.html
تحياتي


الصورة الرمزية ناصراحمد2
ناصراحمد2
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: EGYPT
المشاركات: 1,334
نشاط [ ناصراحمد2 ]
قوة السمعة:98
قديم 13-06-2014, 11:56 PM المشاركة 4   
افتراضي


السلام عليكم ورحمة الله وبركاتة
والله انا اشعر انى بالفعل اتعبت واجهدتك معى كثيرا
وتفضلت بتقديم شروحات ودروس قيمة جدا وبالتاكيد سوف استفيد منها باذن الله .
==========
ولكن اعتقد انة حدث خلط فى الامر
فانا اريد فقط استقبال مايتم ارسالة مهما كان ويتم وضعة داخل المصفوفة
وهناك برنامج يقوم باستخدام المصفوفة ويعرضها على ماتركس .
والهدف من هذا الموضوع هو عمل ماتركس (مالتميديا)
وليس المطلوب بها تحكم فى شىء معين
==========
هو بالفعل يتم الامر معى انما بشكل عشوائى لانى لم ادرس المقاطعات
==========
باختصار
المطلوب هو عمل برنامج المقاطعة بابسط شكل لة
ويتم تخزين البيانات بشكل تسلسلى كما يتم ارسالة من برنامج الفجول
دون ان يتاثر البرنامج الاساسى فى عرض الماتركس
وسوف يتاثر فقط بتغيير الداتا بشكل مستمر
كلما تغير الارسال من الفجول بيسك .
==========
وشاكر جدا لمجهوداتك وتعبك معى مهندس /حسن


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 14-06-2014, 12:11 AM المشاركة 5   
افتراضي


اخي وصديقي مهندس ناصر ...
الآن في الكود الذي عرضته ما هو تاثير ارسال البيانات على الكود ؟؟؟
هل يحصل تأخير زمني ام ماذا ؟؟
حاول ان تختصر الكود بحيث تعطينا فكرة تأثير ارسال البيانات عليه ..


الصورة الرمزية ناصراحمد2
ناصراحمد2
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: EGYPT
المشاركات: 1,334
نشاط [ ناصراحمد2 ]
قوة السمعة:98
قديم 14-06-2014, 01:09 AM المشاركة 6   
افتراضي


اخي وصديقي مهندس ناصر ...
الآن في الكود الذي عرضته ما هو تاثير ارسال البيانات على الكود ؟؟؟
هل يحصل تأخير زمني ام ماذا ؟؟
حاول ان تختصر الكود بحيث تعطينا فكرة تأثير ارسال البيانات عليه ..
اهلا ومرحبا بالاخ الغالى واستاذى مهندس حيدر
الموضوع فى غاية الاهمية
لانة سوف يفتح لنا مجال واسع من التحكم ويبعدنا عن مشاكل التقيد بمساحات البك ومشاكل كثيرة
والهدف حاليا هو التقدم فى شرح الماتركس واضافة شىء ذو قيمة فعليا
وهو ماتركس مالتميديا لا يوجد اى قيود او حروف مخزنة او حتى صور
انما كل هذ1ا يتم خارجيا عن طريق برامج الكومبيوتر ويتم الارسال بالترتيب
وماعلى البك الا استقبال هذا الارسال بشكل منتظم ويكون هناك برنامج يقوم بالعرض داتا فارغة او مجرد كلمة ترحيب او كلمة نو سيجنال او اى شىءؤ
ويتم تغير هذة الداتا بشكل مستمر عن طريق مايتم ارسالة من الكومبيوتر
===================
البرنامج كما تشاهدونة فى مشاركتى هنا مجرد ماتركس 8*8
يعرض فقط نقطة متحركة من او خط مائل (اى شىء)
وهذا الشكل تمثلة فى الكود الداتا m[8]
وفى نفس الوقت قمت بتصميم برنامج فجول يقوم بارسال 8احرف اسكى
فى كل مرة عندما اضغط زر معين
هذة الحروف تمثل ال 8 اعمدة ماتركس وتمثل اى شكل تقوم بتصميمة على الماتركس فى الفجول
وبالفعل يتم الارسال بالتتابع
ولكن لم يتم الاستقبال بشكل كامل او منتظم نهائيا
لانة اما ان البك مشغول فى عرض الداتا
او ان يقوم باستقبال الحرف رقم 4 بدلا من 1 او اى 4بدلا من 1
واحيانا لا يستقبل ال 8 احرف ويستقبل فقط حرف او اتنين
وكل هذا تكون نتائجة شكل عشوائى لا صلة لة بالمطلوب اساسا هههههه
=================
عموما ححاولى باذن الله
ترتيب ماتوصلت الية حتى الان
ورفعة كمشروع هنا لكى تشاهدون النتائج بانفسكم
وبالتاكيد سوف يساعدنا هذا كثيرا لتقريب الامور


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 14-06-2014, 01:39 AM المشاركة 7   
افتراضي


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

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


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 14-06-2014, 02:29 AM المشاركة 8   
افتراضي


السلام عليكم ورحمة الله وبركاتة
والله انا اشعر انى بالفعل اتعبت واجهدتك معى كثيرا
وتفضلت بتقديم شروحات ودروس قيمة جدا وبالتاكيد سوف استفيد منها باذن الله .
==========
ولكن اعتقد انة حدث خلط فى الامر
فانا اريد فقط استقبال مايتم ارسالة مهما كان ويتم وضعة داخل المصفوفة
وهناك برنامج يقوم باستخدام المصفوفة ويعرضها على ماتركس .
والهدف من هذا الموضوع هو عمل ماتركس (مالتميديا)
وليس المطلوب بها تحكم فى شىء معين
==========
هو بالفعل يتم الامر معى انما بشكل عشوائى لانى لم ادرس المقاطعات
==========
باختصار
المطلوب هو عمل برنامج المقاطعة بابسط شكل لة
ويتم تخزين البيانات بشكل تسلسلى كما يتم ارسالة من برنامج الفجول
دون ان يتاثر البرنامج الاساسى فى عرض الماتركس
وسوف يتاثر فقط بتغيير الداتا بشكل مستمر
كلما تغير الارسال من الفجول بيسك .
==========
وشاكر جدا لمجهوداتك وتعبك معى مهندس /حسن
السلام عليكم
أخي كريم طريقه القراءه من كمبيوتر عبر uart فأفضل طريقه هي قراءه حرف حرف وعن طريق انتربت وبالطبع لايمكنك او لاتحصل على نتائج صحيحه عند أستخدام طرق أخرى
فقد جربت طريقه ارفقتلك اياها في مشاركه سابقه وهي بسيطه جدا صحيح طويله ولكن بسيطه
وانا سحاول كتابه لك الكود اي تستفاد منه في قراءه النص ولكن كم هو طول النص
مطلوب عرضه لانك بحاجه الى مصفوفه لخزن البيانات مستقبله
تحياتي

إضافة رد

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

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

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


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

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