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

   

A.Fathi
:: مهندس ::
تاريخ التسجيل: May 2013
المشاركات: 10
نشاط [ A.Fathi ]
قوة السمعة:
قديم 06-12-2014, 09:07 PM المشاركة 9   
افتراضي



السلام عليكم
أخي العزيز البرتوكول NEC يعمل كتالي
نبضه بدء 9ms ثم فاصل 4,5ms


ثم يرسل العنوان ثم معكوس العنوان ثم بيانات ثم معكوس البيانات
عند ارسال مثلا العنوان فأنه يتم ارسال بت بت وبتالي يوجد زمن بين ارسال واخر هو 560us
في حاله البت =1 فان زمن = 1680us وفي حاله بت=0 فأن زمن = 560us



هذا هو كود البرتوكول
كود:
/*******************************************************************************
* Function IR_Send(char IR_Address, char IR_COmmand)
* ------------------------------------------------------------------------------
* Overview: Functions sends address and command via IR NEC protocol
* Input:  Address - address of the device
*         Command - command for device
* Output: Nothing
*******************************************************************************/
void IR_Send(char IR_Address, char IR_COmmand)
{
     char ir_byte[4];
     char bitnum;
     char bytenum;

     ir_byte[3] = ~IR_COmmand;
     ir_byte[2] =  IR_COmmand;
     ir_byte[1] = ~IR_Address;
     ir_byte[0] =  IR_Address;

    // Delay_ms(100);                                  // precaution to be certain of some dead time before message start
     PWM1_Start();                                   // mark
     led=1;
     Delay_ms(9);                                 // 9mS mark start bit
     PWM1_Stop();                                    // space
     led=0;
     Delay_us(4500);                                 // 4.5mS space ends start bit
     for(bytenum = 0; bytenum < 4; bytenum++)        // 4 bytes to send
           {
             for(bitnum = 0; bitnum < 8; bitnum++)    // 8 bits LSB first
                  {
                   PWM1_Start();                           // mark
                   led=1;
                   Delay_us(560);                          // 560uS mark for '0' or '1'
                   PWM1_Stop();                            // space
                   led=0;
                   if(ir_byte[bytenum] & (1 << bitnum))     // test bit <bitnum>
                       {
                         Delay_us(1680);                     // 1.68mS space for a '1'
                       }
                  else{
                       Delay_us(560);                      // 560uS space for a '0'
                     }
                  }
           }
     PWM1_Start();                                   // mark
     
     Delay_us(560);                                  // stop bit of '1'
     PWM1_Stop();                                    // space
     
     Delay_us(1680);                                 // stop bit of 1
     Delay_ms(200);                                  // precaution to be certain of some dead time after message ends

}
طبعا زمن Delay_ms(200); في اخر الكود هي خاصه لضغطه سويج يعني لايوجد داعي ان نضع هذا زمن مع كل سويج لهذا سبب وضعتها في كود البرتوكول
اخى العزيز زادك الله علما
مشكور على حرصك لمساعدتى . وساحاول مستخدما هذا البروتوكول للحصول على المطلوب.
تقبل تحياتى

اعلانات


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