Thông báo

Collapse
No announcement yet.

[IR] giải mã remote

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • [IR] giải mã remote

    thành thật thì quá bí rùi mới lên hỏi các bác
    tình hình là tham khảo rất nhiều nguồn trên in tờ nét cả viết code và lụm code về xài nhưng mạch nó cứ đơ ra nên mong các cao nhân chỉ giáo
    em dùng ngắt ngoài RB0 và chuyển led 7 đoạn thành led đơn cho đơn giản
    các bác check giùm em 2 cái code

    #include <16F877.h>
    #fuses HS, NOWDT, NOLVP, NOBROWNOUT, NOPROTECT, NOPUT
    #use delay(clock=20000000)
    #use Fast_IO(B)
    #use Fast_IO(D)
    void xuat (int8 x);
    void xulydulieu ();
    int8 dulieuthu;
    int8 bitdo;

    void main( )
    {
    set_tris_d(0); // tat ca chan d deu la ngo ra gan led
    set_tris_b(1); // rbo la ngo vao con lai la ngo ra
    enable_interrupts(INT_EXT); //cho phep ngat ngoai
    ext_int_edge(H_to_L); // ngat canh xuong
    enable_interrupts(GLOBAL); // ok ngat
    while(1)
    {
    output_d(dulieuthu);
    delay_ms(500);
    }
    }

    #INT_EXT
    void xulydulieu ( )
    {
    int i=1;
    int8 j;
    disable_interrupts(INT_EXT);
    while(!input(pin_b0))
    {
    delay_us(200);
    i++;
    }
    if(i>9 && i <14); // 2000~2600us
    {
    dulieuthu=0x00;
    for(j=1;j<8;j++)
    {
    while(input(PIN_B0));
    delay_us(800); // Sirc
    bitdo=input(PIN_B0);
    if (bitdo==0) // bit 1
    {
    bit_set(dulieuthu,j);
    while(!input(PIN_B0));
    }
    }
    }
    enable_interrupts(INT_EXT);

    #include <16f877a.h>
    #use delay(clock=20000000)
    #fuses HS, NOWDT, NOLVP, NOBROWNOUT, NOPROTECT, NOPUT

    byte const led[11]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0,0xff};
    #define one_min 8500 //1800*10-6*20000000/4=9000 hon kem nhau 500
    #define one_max 9500
    #define zero_min 5500 //1200*10-6*20000000/4=6000
    #define zero_max 6500


    int16 irframes[14]; //7lenh+5address+start+stop
    int8 ircount =0; //
    int1 irdone=false;


    #int_ext //NGAT NGOAI
    void ngat_isr()
    {
    if (irdone) return;
    irframes[ircount++] = get_timer1();
    if (ircount >= 12)
    { irdone = TRUE;
    output_bit(PIN_C2, 1);
    }
    set_timer1(0);
    }


    void start_ir() {
    memset(irframes, 0x00, sizeof(irframes)); //MEMSET(DESTINATION,VALUE,N)(destination is a pointer to memory, value is a 8 bit int, n is a 16 bit int,)
    ircount = 0; //SIZEOF(Determines size in bytes of operand)
    irdone = FALSE;
    set_timer1(0);
    }

    void main() {
    int8 i;
    int8 bits=0;

    set_tris_b(0b11111111); //dua gia tri vao vxl
    set_tris_d(0b00000000); // xuat led 7 doan
    set_tris_c(0b11111011);// den nho chop tat

    output_bit(PIN_C2, 0);
    delay_ms(100);

    setup_timer_1(t1_internal|t1_div_by_1 );
    enable_interrupts(INT_EXT); //CHO PHEP NGAT NGOAI
    ext_int_edge(H_TO_L);
    enable_interrupts(GLOBAL);
    start_ir();
    while(TRUE)
    {
    if (irdone) {
    delay_ms(100);
    irframes[13]=6000;
    // bo frames dau tien vi do la start
    //bat dau
    for (i=2; i<=8; i++)
    {
    if ((ONE_MIN <= irframes[i]) && (irframes[i] <= ONE_MAX))
    shift_right(&bits,1,1);
    else
    if ((ZERO_MIN <= irframes[i]) && (irframes[i] <= ZERO_MAX))
    shift_right(&bits,1,0);
    }
    shift_right(&bits,1,0);
    //ket thuc
    switch (bits)
    {
    case 0:
    {output_high(pin_D0);
    delay_ms(1000); }
    break;
    case 1:
    {output_high(pin_D1);
    delay_ms(1000); }
    break;
    case 2:
    {output_high(pin_D2);
    delay_ms(1000); }
    break;
    case 3:
    {output_high(pin_D3);
    delay_ms(1000);}
    break;
    case 4:
    {output_high(pin_D4);
    delay_ms(1000);}
    break;
    case 5:
    {output_high(pin_D5);
    delay_ms(1000);}
    break;
    default:
    {output_high(pin_D6);
    delay_ms(1000);}
    break;

    }
    start_ir();
    output_bit(PIN_C2, 0);
    }
    }
    }

  • #2
    m cũng đang mắc vấn đề giải mã này, rất mong bạn nào đã làm được thì chia sẻ cho mọi người cùng biết.
    chúc vui!!!

    Comment


    • #3
      bạn bị gì nói mình có thể giúp không mạch mình cũng chạy rồi

      Comment


      • #4
        Thử đoạn code nay xem. có gì thắc mắc cứ hỏi.
        Attached Files

        Comment


        • #5
          Có bạn nào thử viết chương trình để điều khiển thiết bị bẳng sóng vô tuyến chưa (sử dụng module thu phát 315mhz tự mã hóa và giải mã bằng mã manchester ko dùng pt2262 và pt2272, mình thấy mã manchester rất hiệu quả trong truyền dữ liệu bằng rf) ? mình đang thử làm bộ điều khiển cho xe điều khiển từ xa, trước mắt mình làm 2 kênh thôi (điều khiển góc của 2 servo vì con pic mình xài có 2 pwm ah, và có thể thêm một tốc độ nữa) cơ bản mình đã làm xong và thử nghiệm rất tốt dữ liệu truyền nhận chính xác và gần như liên tục (gần với thời gian thực) nhưng công suất không được cao lắm khoảng 50m thôi! có bạn nào biết cách tăng công suất mạch phát chỉ giúp mình với! Nếu bạn nào có hứng thú với vấn đề này va muốn chia sẻ kinh nghiệm với mình thì hãy mail cho mình

          vothanhha120485spkt@gmail.com
          0917970779
          yahoo: ariancdcdt06

          Comment


          • #6
            Click image for larger version

Name:	Image9.jpg
Views:	1
Size:	30.4 KB
ID:	1354062Click image for larger version

Name:	Image10.jpg
Views:	1
Size:	32.2 KB
ID:	1354063

            Comment


            • #7
              thông cảm! chụp bằng wc tối quá

              Comment

              Về tác giả

              Collapse

              davekieu Tìm hiểu thêm về davekieu

              Bài viết mới nhất

              Collapse

              Đang tải...
              X