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

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

محمد اليوونس
:: مهندس متواجد ::
تاريخ التسجيل: Aug 2016
المشاركات: 50
نشاط [ محمد اليوونس ]
قوة السمعة:0
قديم 23-11-2016, 07:50 PM المشاركة 1   
افتراضي استعمال uart مع الانالوج Twitter FaceBook Google+



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


التعديل الأخير تم بواسطة : محمد اليوونس بتاريخ 23-11-2016 الساعة 07:55 PM
اعلانات

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 23-11-2016, 10:13 PM المشاركة 2   
افتراضي اللهم انفعنا بما علمتنا وعلمنا ما ينفعنا وزدنا علما


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

لماذا استخدام 2 ميكرو .. واحد يكفى لبناء هذا النظام ..

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

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

محمد اليوونس
:: مهندس متواجد ::
تاريخ التسجيل: Aug 2016
المشاركات: 50
نشاط [ محمد اليوونس ]
قوة السمعة:0
قديم 24-11-2016, 06:40 AM المشاركة 3   
افتراضي


وعليكم السلام ورحمة الله و بركاته . اخي العزيز ليس الموضوع بشكله بالضبط . بل هو مثال لتقريب الفكرة .
والموضوع الاساسي التحكم بسرعة و اتجاه محرك عبر الكمبيوتر من خلال uart او بلوتوث او موديولات اللاسلكي التي تستعمل uart .
او ارسال قيم انالوج لاسلكيا.
وجزيل الشكر لاهتمامك ..
ابحث عن طريقة لارسال الانالوج لاسلكيا مثلا موديولfr.
بوركت اخي


ahmed idris
:: مهندس متميز ::
تاريخ التسجيل: Jul 2015
المشاركات: 453
نشاط [ ahmed idris ]
قوة السمعة:0
قديم 24-11-2016, 09:00 PM المشاركة 4   
افتراضي


السلام عليكم
يمكن التحكم رقميا في سرعة محرك بطريقة تعديل عرض النبضة المعروفة اختصارا ب PWM :
Pulse-width modulation
أغلب المتحكمات تتوفر على module لبرمجة توليد تردد PWM .

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

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 25-11-2016, 01:48 AM المشاركة 5   
افتراضي اللهم انفعنا بما علمتنا وعلمنا ما ينفعنا وزدنا علما


وعليكم السلام ورحمة الله و بركاته . اخي العزيز ليس الموضوع بشكله بالضبط . بل هو مثال لتقريب الفكرة .
والموضوع الاساسي التحكم بسرعة و اتجاه محرك عبر الكمبيوتر من خلال uart او بلوتوث او موديولات اللاسلكي التي تستعمل uart .
او ارسال قيم انالوج لاسلكيا.
وجزيل الشكر لاهتمامك ..
ابحث عن طريقة لارسال الانالوج لاسلكيا مثلا موديولfr.
بوركت اخي
السلام عليكم ورحمه الله وبركاته ..

أخى الكريم لقد كتبت لك برنامج ..أعتقد انه يفيدك فى المشروع ..

وربما هذا البرنامج الذى تبحث عنه .. حاولت على قد ما فهمت من حضرتك طلبك ..

اليك صورة للدائرة ..






اليك الكود..

اولا دة كود المتحكم المربوط مع حساس الحرارة .. وهنسميه " كود المرسل "

كود:
        
    //ENG/ ABDALLA HYGAZY //
    // DATDA/ 2016 / 11 /25 ////
      
    //    COED   //
      
      char receive;
      unsigned int adc_rd=0;

        void show_adc() {
     adc_rd = ADC_Read(0);
   receive = (long)adc_rd * 5000;
   receive = receive / 1023;
 }

      void main() {
      TRISA=255;
      ADC_Init();
      UART1_Init(9600);

     while(1){
    show_adc();
    if(adc_rd==5){ UART1_Write( 'a' );  }
    if(adc_rd==10){ UART1_Write( 'b' );  }
    if(adc_rd==15){ UART1_Write( 'c' );  }
    if(adc_rd==20){ UART1_Write( 'd' );  }
    if(adc_rd==25){ UART1_Write( 'e' );  }
    if(adc_rd==30){ UART1_Write( 'f' );  }
    if(adc_rd==35){ UART1_Write( 'g' );  }
    if(adc_rd==40){ UART1_Write( 'h' );  }
    if(adc_rd==45){ UART1_Write( 'i' );  }
    if(adc_rd==50){ UART1_Write( 'j' );  }
    if(adc_rd==55){ UART1_Write( 'k' );  }
    if(adc_rd==60){ UART1_Write( 'l' );  }
    if(adc_rd==65){ UART1_Write( 'm' );  }
    if(adc_rd==70){ UART1_Write( 'n' );  }
    if(receive==75){ UART1_Write( 'o' );  }
    if(adc_rd==80){ UART1_Write( 'p' );  }
    if(adc_rd==85){ UART1_Write( 'q' );  }
    if(adc_rd==90){ UART1_Write( 'r' );  }
    if(adc_rd==95){ UART1_Write( 's' );  }
    if(adc_rd==100){ UART1_Write( 't' );  }
    if(adc_rd==110){ UART1_Write( 'u' );  }
    if(adc_rd==120){ UART1_Write( 'v' );  }
    if(receive==130){ UART1_Write( 'w' );  }
    if(adc_rd==140){ UART1_Write( 'x' );  }
    if(adc_rd==150){ UART1_Write( 'y' );  }
    if(adc_rd==160){ UART1_Write( 'z' );  }

  }
  }

وايضااا دة كود " المستقبل " اللى بياخد درجة الحرارة وبتحكم فى تشغل محرك


كود:
     // ENG / ABDALLA HYGAZY //

       char receive; // stores the received data  

        char x;
       void main() {
       TRISB=0; PORTB=0;
     // TRISC=0; PORTC=0;
       UART1_Init(9600);
        PWM1_Init(5000);

      // UART1_Write('s');

      // delay_ms(1000);





       while(1){
       PWM1_Start();

    // If data is ready, read it:
   if (UART1_Data_Ready() == 1) {
    receive = UART1_Read();
 }


  switch (receive)// test received Data
  {
  case 'a':
      portb=1;
  PWM1_Set_Duty(20);
  receive=0; // rest received variable

  break;

case 'b':
   PWM1_Set_Duty(30);
  portb=1;
  receive=0; // rest received variable

  break;


   case 'c':
   PWM1_Set_Duty(40);
  portb =2;
  receive=0; // rest received variable

  break;

   case 'd':
   PWM1_Set_Duty(50);
  portb =4;
  receive=0; // rest received variable

  break;

   case 'e':
   PWM1_Set_Duty(60);
  portb =8;
  receive=0; // rest received variable

  break;

   case 'f':
   PWM1_Set_Duty(70);
  portb =16;
  receive=0; // rest received variable

  break;

    case 'g':
   PWM1_Set_Duty(80);
  portb =32;
  receive=0; // rest received variable

  break;

   case 'h':
   PWM1_Set_Duty(90);
  portb =64;
  receive=0; // rest received variable

  break;

   case 'i':
    PWM1_Set_Duty(100);
  portb =128;
  receive=0; // rest received variable

  break;

   case 'j':
    PWM1_Set_Duty(110);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

    case 'k':
    PWM1_Set_Duty(120);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

   case 'l':
   PWM1_Set_Duty(130);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

    case 'm':
   PWM1_Set_Duty(140);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

    case 'n':
   PWM1_Set_Duty(150);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

     case 'p':
    PWM1_Set_Duty(160);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

   case 'q':
   PWM1_Set_Duty(170);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

     case 'r':
   PWM1_Set_Duty(180);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

     case 'r':
    PWM1_Set_Duty(190);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

      case 's':
   PWM1_Set_Duty(200);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

     case 't':
   PWM1_Set_Duty(210);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

     case 'y':
   PWM1_Set_Duty(220);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;



       case 'z':
   PWM1_Set_Duty(250);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

 }
  } }

واليك المشروع للتحميل ..https://drive.google.com/open?id=0Bx...kYyVU1jRVp3aWc


شرح سريع للكود ..

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

والمتحكم الثانى يستقبل الحرف المبعوت له .. وليكن مثلا حرف " A " ويقارن أوامر الشرط وينائااا على أمر الشرط يبدأ فى تعديل عرض النبضه لكى يتحكم فى سرعة محرك ..


تحياتى لك .. وأرجو أن اكون توصلت لما تريدة " أو على الأقل قدمة المساعدة لك ..

بالتوفيق


التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 25-11-2016 الساعة 01:53 AM
احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً ahmed idris ( شكر العضو على هذه المشاركة )
اعجاب ahmed idris ( أعجبته المشاركة )

محمد اليوونس
:: مهندس متواجد ::
تاريخ التسجيل: Aug 2016
المشاركات: 50
نشاط [ محمد اليوونس ]
قوة السمعة:0
قديم 25-11-2016, 03:04 PM المشاركة 6   
افتراضي


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

أخى الكريم لقد كتبت لك برنامج ..أعتقد انه يفيدك فى المشروع ..

وربما هذا البرنامج الذى تبحث عنه .. حاولت على قد ما فهمت من حضرتك طلبك ..

اليك صورة للدائرة ..






اليك الكود..

اولا دة كود المتحكم المربوط مع حساس الحرارة .. وهنسميه " كود المرسل "

كود:
        
    //ENG/ ABDALLA HYGAZY //
    // DATDA/ 2016 / 11 /25 ////
      
    //    COED   //
      
      char receive;
      unsigned int adc_rd=0;

        void show_adc() {
     adc_rd = ADC_Read(0);
   receive = (long)adc_rd * 5000;
   receive = receive / 1023;
 }

      void main() {
      TRISA=255;
      ADC_Init();
      UART1_Init(9600);

     while(1){
    show_adc();
    if(adc_rd==5){ UART1_Write( 'a' );  }
    if(adc_rd==10){ UART1_Write( 'b' );  }
    if(adc_rd==15){ UART1_Write( 'c' );  }
    if(adc_rd==20){ UART1_Write( 'd' );  }
    if(adc_rd==25){ UART1_Write( 'e' );  }
    if(adc_rd==30){ UART1_Write( 'f' );  }
    if(adc_rd==35){ UART1_Write( 'g' );  }
    if(adc_rd==40){ UART1_Write( 'h' );  }
    if(adc_rd==45){ UART1_Write( 'i' );  }
    if(adc_rd==50){ UART1_Write( 'j' );  }
    if(adc_rd==55){ UART1_Write( 'k' );  }
    if(adc_rd==60){ UART1_Write( 'l' );  }
    if(adc_rd==65){ UART1_Write( 'm' );  }
    if(adc_rd==70){ UART1_Write( 'n' );  }
    if(receive==75){ UART1_Write( 'o' );  }
    if(adc_rd==80){ UART1_Write( 'p' );  }
    if(adc_rd==85){ UART1_Write( 'q' );  }
    if(adc_rd==90){ UART1_Write( 'r' );  }
    if(adc_rd==95){ UART1_Write( 's' );  }
    if(adc_rd==100){ UART1_Write( 't' );  }
    if(adc_rd==110){ UART1_Write( 'u' );  }
    if(adc_rd==120){ UART1_Write( 'v' );  }
    if(receive==130){ UART1_Write( 'w' );  }
    if(adc_rd==140){ UART1_Write( 'x' );  }
    if(adc_rd==150){ UART1_Write( 'y' );  }
    if(adc_rd==160){ UART1_Write( 'z' );  }

  }
  }

وايضااا دة كود " المستقبل " اللى بياخد درجة الحرارة وبتحكم فى تشغل محرك


كود:
     // ENG / ABDALLA HYGAZY //

       char receive; // stores the received data  

        char x;
       void main() {
       TRISB=0; PORTB=0;
     // TRISC=0; PORTC=0;
       UART1_Init(9600);
        PWM1_Init(5000);

      // UART1_Write('s');

      // delay_ms(1000);





       while(1){
       PWM1_Start();

    // If data is ready, read it:
   if (UART1_Data_Ready() == 1) {
    receive = UART1_Read();
 }


  switch (receive)// test received Data
  {
  case 'a':
      portb=1;
  PWM1_Set_Duty(20);
  receive=0; // rest received variable

  break;

case 'b':
   PWM1_Set_Duty(30);
  portb=1;
  receive=0; // rest received variable

  break;


   case 'c':
   PWM1_Set_Duty(40);
  portb =2;
  receive=0; // rest received variable

  break;

   case 'd':
   PWM1_Set_Duty(50);
  portb =4;
  receive=0; // rest received variable

  break;

   case 'e':
   PWM1_Set_Duty(60);
  portb =8;
  receive=0; // rest received variable

  break;

   case 'f':
   PWM1_Set_Duty(70);
  portb =16;
  receive=0; // rest received variable

  break;

    case 'g':
   PWM1_Set_Duty(80);
  portb =32;
  receive=0; // rest received variable

  break;

   case 'h':
   PWM1_Set_Duty(90);
  portb =64;
  receive=0; // rest received variable

  break;

   case 'i':
    PWM1_Set_Duty(100);
  portb =128;
  receive=0; // rest received variable

  break;

   case 'j':
    PWM1_Set_Duty(110);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

    case 'k':
    PWM1_Set_Duty(120);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

   case 'l':
   PWM1_Set_Duty(130);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

    case 'm':
   PWM1_Set_Duty(140);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

    case 'n':
   PWM1_Set_Duty(150);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

     case 'p':
    PWM1_Set_Duty(160);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

   case 'q':
   PWM1_Set_Duty(170);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

     case 'r':
   PWM1_Set_Duty(180);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

     case 'r':
    PWM1_Set_Duty(190);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

      case 's':
   PWM1_Set_Duty(200);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

     case 't':
   PWM1_Set_Duty(210);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

     case 'y':
   PWM1_Set_Duty(220);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;



       case 'z':
   PWM1_Set_Duty(250);
  portb.b7 =~portb.b7;
  receive=0; // rest received variable

  break;

 }
  } }

واليك المشروع للتحميل ..https://drive.google.com/open?id=0Bx...kYyVU1jRVp3aWc


شرح سريع للكود ..

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

والمتحكم الثانى يستقبل الحرف المبعوت له .. وليكن مثلا حرف " A " ويقارن أوامر الشرط وينائااا على أمر الشرط يبدأ فى تعديل عرض النبضه لكى يتحكم فى سرعة محرك ..


تحياتى لك .. وأرجو أن اكون توصلت لما تريدة " أو على الأقل قدمة المساعدة لك ..

بالتوفيق


بوركت اخي و استاذي الغالي :
و بارك الله بعلمك و عطاءك .و جعلها بميزان حسناتك .
فقد لبيت و شرحت و افهمت و اكفيت .
كل الامتنان و التقدير و الشكر من القلب لجهدك الكريم

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

محمد اليوونس
:: مهندس متواجد ::
تاريخ التسجيل: Aug 2016
المشاركات: 50
نشاط [ محمد اليوونس ]
قوة السمعة:0
قديم 25-11-2016, 03:10 PM المشاركة 7   
افتراضي


[QUOTE=عبدالله حجازى;1069861]السلام عليكم ورحمه الله وبركاته ..

أخى الكريم لقد كتبت لك برنامج ..أعتقد انه يفيدك فى المشروع ..

وربما هذا البرنامج الذى تبحث عنه .. حاولت على قد ما فهمت من حضرتك طلبك ..

اليك صورة للدائرة ..
]


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

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

محمد اليوونس
:: مهندس متواجد ::
تاريخ التسجيل: Aug 2016
المشاركات: 50
نشاط [ محمد اليوونس ]
قوة السمعة:0
قديم 25-11-2016, 03:14 PM المشاركة 8   
افتراضي


السلام عليكم
يمكن التحكم رقميا في سرعة محرك بطريقة تعديل عرض النبضة المعروفة اختصارا ب PWM :
Pulse-width modulation
أغلب المتحكمات تتوفر على module لبرمجة توليد تردد PWM .
نعم اخي الكريم لكن لايمكن عن طريق uart و هذا هو المطلوب
الاخ و الاستاذ عبد الله حجازي اكرمه الله اوجد حلا لذلك و يمكننا الاستفادة منه بعون الله .
اشكر اهتمامك و مشاركتك الكريمة اخي العزيز

إضافة رد

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

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

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


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

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