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

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

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 13-07-2016, 02:12 AM المشاركة 1   
افتراضي ارجو المساعدة فى nec protocol ir remote Twitter FaceBook Google+



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


لقد تابعت شرح أحد الأخوة الأعضاء عن طريقه صنع ريموت كنترول مرسل+ مستقبل ...

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


ودة كود أخونا الكريم .. " محمد فانكى " كود مرسل و مستقبل .. ل برتكول شركه سونى .. وهو خاص ب ريموت تليفزيون سونى ..

دة كود الريموت .. أو كود المرسل .. لريموت .. تلفزيون سونى .. ومكون من 12 بيت ...

كود:
  char x;

void main() {
adcon1=0x07;TRISA=255;TRISB=0;portb=0;
PWM1_Init(38000);
PWM1_Set_Duty(255);


  while (1) {
  if (porta.f0==0){
      PWM1_Start();delay_us(2400);PWM1_Stop();
      delay_us(600);
      for(x=0;x<7;x++){
      PWM1_Start();delay_us(600);PWM1_Stop();delay_us(600); }

      PWM1_Start();delay_us(1200);PWM1_Stop();
        delay_us(600);
         for(x=0;x<4;x++){
      PWM1_Start();delay_us(600);PWM1_Stop();delay_us(600);  }
      delay_ms(250);
        }

        if (porta.f1==0){
      PWM1_Start();delay_us(2400);PWM1_Stop();
      delay_us(600);
      PWM1_Start();delay_us(1200);PWM1_Stop();      //1
      delay_us(600);
      for(x=0;x<6;x++){
      PWM1_Start();delay_us(600);PWM1_Stop();delay_us(600);  }
        PWM1_Start();delay_us(1200);PWM1_Stop();
        delay_us(600);
         for(x=0;x<4;x++){
      PWM1_Start();delay_us(600);PWM1_Stop();delay_us(600);  }
        delay_ms(250);
        }
        if (porta.f2==0){
      PWM1_Start();delay_us(2400);PWM1_Stop();
      delay_us(600);
      PWM1_Start();delay_us(600);PWM1_Stop();      //1
      delay_us(600);
        PWM1_Start();delay_us(1200);PWM1_Stop();     //2
        delay_us(600);
      for(x=0;x<5;x++){
      PWM1_Start();delay_us(600);PWM1_Stop();delay_us(600);  }
        PWM1_Start();delay_us(1200);PWM1_Stop();
        delay_us(600);
         for(x=0;x<4;x++){
      PWM1_Start();delay_us(600);PWM1_Stop();delay_us(600);  }
      delay_ms(250);
        }
       if (porta.f3==0){
      PWM1_Start();delay_us(2400);PWM1_Stop();
      delay_us(600);
      for(x=0;x<2;x++){
      PWM1_Start();delay_us(1200);PWM1_Stop();delay_us(600);  }
       for(x=0;x<5;x++){
      PWM1_Start();delay_us(600);PWM1_Stop();delay_us(600);  }
       PWM1_Start();delay_us(1200);PWM1_Stop();
        delay_us(600);
         for(x=0;x<4;x++){
      PWM1_Start();delay_us(600);PWM1_Stop();delay_us(600);  }
      delay_ms(250);
        }


      }


  }

والحمد لله فهمتة جيدااا وطريقة التعامل معه ..



ودة كود للمستقبل وهو الأهم بالنسبة لى .. واريد مساعدة فى تعديل عليه ..


كود:
    sbit ir_in at RA0_bit;                      // Infrared receiver input
sbit ir_in_direction at TRISA0_bit;         // Infrared receiver input
unsigned int retint;                        // general purpose integer
unsigned char ir_byte,COUNT,bouton;
unsigned char ir_result[3];
void interrupt()
{
     count++;
     intcon=0b00100000;
     TMR0=0;
}
unsigned int get_mark(){
      TMR0= 0; count=0;
      for(;!ir_in;){}
      retint=2*(TMR0+(count*256));
      return retint;
}

unsigned int get_space(){
      TMR0= 0; count=0;
      for(;ir_in;){}
      retint=2*(TMR0+(count*256));
      return retint;
}
unsigned char get_sony_byte(char nbits){
char n;
unsigned char ir_byte;
unsigned int temp_ir;

    ir_byte = 0;                                  // initialise
    for(n=0 ; n<nbits ; n++){
        temp_ir = get_space();                    // expect ~510uS
        temp_ir = get_mark();
          ir_byte >>= 1;                   // 650uS = 0, 1.2uS = 1
        if ((temp_ir > 1000)&&(temp_ir < 1300)) {
            ir_byte += 0x80;
        }
    }
    ir_byte >>= 8-nbits;
    return ir_byte;
}
void sony_read(){
unsigned int temp_ir;

    ir_result[0] = 0;                            // return 0, 0 if glitch
    ir_result[1] = 0;                            // return 0, 0 if glitch
    while(ir_in);                                // wait for IR to go low
    temp_ir = get_mark();
    if((temp_ir>2000)&&(temp_ir<3000)) {     // expect 2.4mS mark
        ir_result[0] = get_sony_byte(7);          // 7 bit command
        ir_result[1] = get_sony_byte(5);         // 5 bit address
        Delay_ms(10);                           // wait for repeat messages to clear

    }
}
void main() {
    TRISA=0x0F;
    TRISB=0;
    PORTB=0;
    PORTA=0;
    adcon1=7;
    option_reg=0b10000000;
    intcon=0b10100000;
    TMR0 = 0;
    while(1){
        sony_read();
        if(ir_result[1]==1){                 // Sony address 01 is TV
            bouton = ir_result[0];
            switch (bouton){
                case 0: Portb.F0 = ~Portb.F0;Delay_ms(150);break;        // button TV '0'
                case 1: Portb.F1 = ~Portb.F1;Delay_ms(150);break;        // button TV '1'
                case 2: Portb.F2 = ~Portb.F2;Delay_ms(150);break;        // button TV '2'
                case 3: Portb.F3 = ~Portb.F3;Delay_ms(150);break;        // button TV '3'
                default:break;
            }
        }
    }
    while(1);              // loop forever
}

كما وضحة أن الكود هو لستقبال تبضات ريموت تليفزيون سونى ..

ولكن انا اريد استعمال ريموت أخر .. يستخدم برتكول NEC .... ودى صوره للريموت المراد استخدامه ...





كود المستقبل يعمل على برتكول سونى .. وانا اريد مساعدة فى تعديل الكود لكى يتناسب مع برتكول NEC لأن سألت كثير عن برتكول ريموت ال MP3 وعرفة انه برتكول NEC ..


انا اعتقد انا الكود هيفضل كما هو ويكون التعديل فى عدد مرات حلقة FOR ... لكى يتناسب مع ال 16 بيت الخاصين .. ب برتكول NEC ...


رابط الموضوع الأصلى ... http://www.qariya.info/vb/showthread...=112123&page=3

ياريت اجد المساعدة فى تعديل .. كود المستقبل لكى يتناسب .. مع برتكول NEC

وشكرااا مقدماااا للجميع .. عام سعيد عليكم ..

اعلانات

ahmed idris
:: مهندس متميز ::
تاريخ التسجيل: Jul 2015
المشاركات: 453
نشاط [ ahmed idris ]
قوة السمعة:0
قديم 13-07-2016, 07:58 AM المشاركة 2   
افتراضي


السلام عليكم
أخي كتابة كود مرسل بالبرتوكول Sony و كود مرسل ببرتوكول Nec تعتمد على نفس الطريقة وهي استخدام PWM، لكن التوقيتات مختلفة بينهما و طبعا الأكواد غير متطابقة :
برتوكول Sony :

http://www.sbprojects.com/knowledge/ir/sirc.php
برتوكول Nec :

http://techdocs.altium.com/display/F...ssion+Protocol
الأفضل دراسة كود المرسل Nec ومعه كود المستقبل ثم القيام بالتعديلات المطلوبة
هذا موضوع لأخينا العزيز حسن هادي محمود فيه شرح للمستقبل ببرتوكول Nec ربما تجد فيه ما تريد:
http://www.qariya.info/vb/showthread.php?t=138161
بالتوفيق إن شاء الله..

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

zoro39
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2009
المشاركات: 69
نشاط [ zoro39 ]
قوة السمعة:0
قديم 13-07-2016, 09:43 AM المشاركة 3   
افتراضي


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

http://ccspicc.blogspot.com/

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

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

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

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


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

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