Thông báo

Collapse
No announcement yet.

Giải mã remote TV bằng AVR ?

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

  • Giải mã remote TV bằng AVR ?

    Hiện tại em đang nghiên cứu cái này, nếu giải mã thành công sẽ rất bổ ích.(E đang giải mã cái remote JVC RM-470.) Tuy nhiên em đang vướng mắc vào thuật toán giải mã. Có ai làm rồi thì cho em xin ít kinh nghiệm nhé.

    em chỉ biết chuỗi xung của remote như thế này, gồm 3 phần: phần star,địa chỉ và lệnh. Địa chỉ ở đây là gi hả các bác.

    Mọi người có thể chỉ em rõ về thuật toán giải mã không.

    Cảm ơn mọi người nhé. Chúc diễn đàn vui vẻ...!

  • #2
    Em mới viết xong 1 đoạn code ...nhưng chưa chạy được...không hiểu lí do từ đâu.Đoạn code còn nhiếu bất hợp lí...nhưng cùng đóng góp ý kiến nhé.
    Trong đó có vài CT con em chưa xài tới.CT đó giúp ích khi mình khai báo khung truyền.

    /************************************************** ***
    This program was produced by the
    CodeWizardAVR V1.25.6 Standard
    Automatic Program Generator
    © Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date : 8/21/2009
    Author : F4CG
    Company : F4CG
    Comments:


    Chip type : ATmega32
    Program type : Application
    Clock frequency : 8.000000 MHz
    Memory model : Small
    External SRAM size : 0
    Data Stack size : 512
    ************************************************** ***/

    #include <mega32.h>
    #include <stdio.h>
    #include <delay.h>
    #include <stdlib.h>
    #define IR PIND.2
    #define led_out PORTC
    #define coi PORTB.0

    unsigned char ADRS=0xff,CMD=0xff;
    int dem_timer0=0;

    //xxxxxxxxx START AND STOP TIMER0 xxxxxxxxxxxxxx
    void start_timer0 (){
    dem_timer0=0;
    TCCR0=0x05; // Khoi tao TIMER0
    TCNT0=0x00;
    }
    void stop_timer0(){
    dem_timer0=0;
    TCNT0=0; // Tat TIMER0
    TCCR0=0;
    }

    // xxxxxxxxxxxxx Ngat tran TIMER 0 xxxxxxxxxxxxxxxx
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    ++dem_timer0;
    }
    //xxxxxxxxxxxxxx CHUONG TRINH TIMER 560us xxxxxxxxxxxxx//
    void TIMER560(){
    start_timer0();
    while(TCNT0<=5){}
    stop_timer0;
    }

    //xxxxxxxxxxxxxxx THOI GIAN KHUNG xxxxxxxxxxxxx//
    void T(int num){
    int i;
    for(i=0;i<=num;i++){
    TIMER560();
    }
    }
    // xxxxxxxx CHUONG TRINH TIMER 800usxxxxxx ///
    void TIMER800us(){
    start_timer0();
    while (TCNT0<=7){}
    stop_timer0();
    }
    //xxxxxxxxxxx CHUONG TRINH SCAN IR //
    void scan_ir(){
    int i,j;
    TIMER800us();
    for (i=0;i<=7;i++){
    if (IR==0){
    TIMER800us;
    ADRS=0;
    ADRS<<1;
    }
    else{
    TIMER800us;
    ADRS<<1;
    }
    }
    TIMER800us();
    for (j=0;j<=7;j++){
    if (IR==0){
    TIMER800us;
    CMD=0;
    ADRS>>1;
    }
    else{
    TIMER800us;
    CMD>>1;
    }
    }
    }

    //*********************************** CT CHINH ************************************************** *

    void main(void)
    {

    PORTA=0x00;
    DDRA=0x00;

    PORTB=0x00;
    DDRB=0x01;

    PORTC=0x00;
    DDRC=0xFF;

    PORTD=0x01;
    DDRD=0x02;


    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;

    TIMSK=0x01;

    UCSRA=0x00;
    UCSRB=0x08;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x33;

    ACSR=0x80;
    SFIOR=0x00;

    // Global enable interrupts
    #asm("sei")

    while (1)
    {


    xx:
    while(IR) continue ;
    delay_ms(1);
    if(IR) goto xx;
    while(!IR) continue;
    while(IR) continue ;
    scan_ir();
    delay_ms(1000);
    led_out=ADRS;
    while(1){


    }


    };
    }

    Comment


    • #3
      đọc code mệt lắm, nguyên lý đơn giản, xung thu bít trước rồi, giản đò, time, mạch thu dùng bóng chuyên dụng trên tivi, ghép sửa sườn, dùng ngắt để bắt sườn, lấy luôn dây đó ghép qua 1 con logic, 74hc00 chẳng hạn cho vào chân khác để đọc data, (nhớ NOT lại vì qua 7400 rồi) cho vào ram >>> so với bảng mã gốc hãng xác lập >>> mời cụ xơi.
      nhớ gắn thêm led để debug cho chắc và so sánh.
      mình làm bằng 8051 chạy chư điên
      chúc vui
      |

      Comment


      • #4
        cai tren co dieu kien la` minh`chua biet duoc ma goc cua nha` san xuat

        Comment


        • #5
          bạn dùng chế độ capture của T1 ấy.
          set cho T1 chạy ở chế độ nomal (1Mhz) và cho phép ngắt ICP, ngắt tràn.
          bạn nối thẳng chân Dout của con mắt IR vào chân ICP(hoặc nối vào con R 100 cho chắc).
          bình thường nếu ko có tín hiệu thì chân này mức 1, bởi vậy bạn set cho ICP tác động ở cạnh xuống, khi ngắt lần đầu tiên thì xem như đó là xung start, bạn reset T1 và cho nó chạy. và đổi ICP tác động cạnh lên--> chờ.
          khi ngắt ICP thì bạn đọc TCNT1 ra, reset nó, và đổi cạnh tác động cho ICP.. cứ như vậy là bạn capture được chính xác thời gian các xung mà bạn nhận về (có thể lệch vài ck).
          và khi nào có tràn T1 thì bạn xem như đó là xung stop,( vì hầu hết tín hiệu IR ko có mã nào phát đến 65ms cả, trừ tín hiệu báo lặp phím). giờ thì chỉ việc đọc data từ bộ đệm và gửi lên máy tính hoặc hiện ra LCD, ghi nhận mấy con số này.. rồi giải mã nó ra code thôi.

          tuy nhiên bạn cần tìm hiểu xem cái remote ấy nó phát data theo chuẩn nào.. để biết mà giải mã code. (còn nếu ko biết thì lên google mà tìm.. vì chuẩn data này có mấy kiểu ah.. lúc đó bạn so sánh và ktra xem nó giông chuẩn nào.. )

          vài dòng gợi ý, bạn làm thử xem, mình cũng có viết rồi và nó nhận được hầu hết các remote, không bỏ sót cái nào...

          Comment


          • #6
            Mình khai báo cái ngắt thăng ICP ở đâu thế nhỉ? Em đang xài codevision..

            Comment


            • #7
              Nguyên văn bởi HiMas88 Xem bài viết
              Mình khai báo cái ngắt thăng ICP ở đâu thế nhỉ? Em đang xài codevision..


              trên hình có 2 chỗ đánh dấu.
              ở trên là bạn chọn chế độ chống nhiễu cạnh tác động.
              ở dưới là chọn 4 cái ngắt..
              bạn coi trong đó rồi đọc datasheet để chọn cho đúng chứ năng mình cần.

              thân!
              Attached Files

              Comment


              • #8
                Cái chế độ input on : Noise cancel là thế nào ấy nhỉ?

                Em đã kiếm được cái protocol của JVC. Mọi người cùng xem và phân tích nhé.
                Attached Files

                Comment


                • #9
                  Nguyên văn bởi HiMas88 Xem bài viết
                  Cái chế độ input on : Noise cancel là thế nào ấy nhỉ?

                  Em đã kiếm được cái protocol của JVC. Mọi người cùng xem và phân tích nhé.

                  đọc kĩ trong này thì rõ. nhớ đọc cho kĩ nhé
                  Attached Files

                  Comment


                  • #10
                    còn cái JVC code thì vào đây mà tham khảo thêm:
                    http://www.sbprojects.com/knowledge/ir/jvc.htm

                    Comment


                    • #11
                      Các bít mà mình thu được khi qua con thu hồng ngoại có phải đảo so với mã phát ra đúng ko các đại ca

                      Comment


                      • #12
                        đúng rồi. do đó dùng trans ở đảo hoặc dùng phần mềm để đảo nó lại.

                        Comment


                        • #13
                          Pác nào co thể cho em một đoạn code để nhận tín hiệu hồng ngoại của một loại remote nào đó không?(VD nhu sony cũng được) em đọc bài các bác mà khó hiểu quá. Mới làm quen nên cũng khó.
                          Cuộc đời như bánh omi, không biết rồi sẽ về đâu?

                          Comment


                          • #14
                            Nguyên văn bởi tnt288 Xem bài viết
                            Pác nào co thể cho em một đoạn code để nhận tín hiệu hồng ngoại của một loại remote nào đó không?(VD nhu sony cũng được) em đọc bài các bác mà khó hiểu quá. Mới làm quen nên cũng khó.
                            Nếu chỉ cần cách nhận tín hiệu IR thì bạn có thể tham khảo ở đây.
                            http://4tech.com.vn/forums/showthread.php?t=1402

                            Comment


                            • #15
                              Tui làm 1 cái dùng mấy năm nay rồi vẫn chạy ngon nè. Sử dụng remote SONY, chỉ lấy 7 bit lệnh, bỏ qua 5 bit địa chỉ nên giá trị đọc về không vượt quá 128 (2^7)

                              đây là đoạn code trong ngắt. Tức là khi có ngắt xảy ra, chương trình sẽ nhảy vào đoạn code này







                              Last edited by dungimi43; 27-02-2010, 16:03.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X