Thông báo

Collapse
No announcement yet.

Điều khiển dùng Remote TV với MSP430

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

  • #31
    Chào các bạn!
    Hôm nay mình xin chia sẻ với mọi người thuật toán giải mã tín hiệu remote (điều khiển từ xa bằng hồng ngoại) dùng cho mọi loại remote, mình đã nghiên cứu rất lâu trên mã code remote của nhiều loại remote khác nhau và rút ra thuật toán chung để giải mã chúng.
    Trước tiên các bạn vào trang này để xem code của tất cả các loại remote : Index of /remotes
    sau đó rút ra kết luận sau: có 2 loại mã hóa khác nhau được tích hợp trên remote
    1, Loại điều chế độ rộng xung Thấp là loại remote có bit 0 và bit 1 khác nhau ở độ rộng xung thấp, điển hình là điều khiển sony: ( us là viết tắt của micro giây)
    Sony CD player : RM-470

    bits 7 (số bit được truyền đi : 7 bít )

    Xung thấp(us) Xung cao (us)
    header 2412 588 ( bít khởi động)
    one 612 588 ( bít 1)
    zero 1210 588 ( bít 0)
    ptrail 1210

    khi ấn 1 nút trên điều khiển thì sẽ có 1 xung khởi động được truyền đi với độ dài xung thấp 2412us và xung cao 588us (để đánh thức mcu), tiếp đó là 7 bít dữ liệu ,,bít 1 có 612us xung thấp và 588us xung cao,bít 0 có 1210us xung thấp và 588us xung cao. Cuối cùng là bít stop có 1210us xung thấp và xung cao rất dài, cái này chả cần quan tâm chỉ cần biết cứ xung cao kéo dài hơn 2000us thì là bít stop. nếu giữ nút trên remote thì quá trình truyền mã lệnh cứ lặp lại như thế mãi cho đến khi nhả nút.
    Bit 0 và bít 1 có phần xung cao bằng nhau (588us) để làm mốc đo phần xung thấp phân biệt giữa bít 0 và 1. Sóng mang ( carrier) của remote có tần số 38Khz hoặc 40Khz, khi sóng mang phát ra tương ứng với xung thấp ta sẽ đo được mức logic 0 trên chân ra của ic nhận quang ( ic này có 3 chân : 1 out, 2 GND, 3 VCC = +5v hoăc +3v ) , khi sóng mang không phát ra thì tương ứng với xung cao, ta sẽ đo được mức logic 1 trên chân ra của ic nhận quang. khi không nhận tín hiệu gì thì chân ra của ic nhận quang có mức logic 1.
    2, Loại điều chế độ rộng xung Cao là loại remote có bit 0 và bit 1 khác nhau ở độ rộng xung Cao, điển hình là điều khiển samsung: ( đây là kiểu mã hóa phổ biến nhất ).

    Samsung_00025G
    bits 16 (16 bit dữ liệu)

    Xung thấp(us) Xung cao (us)
    header 8985 4387 ( khởi động)
    one 599 1626 (bit 1 )
    zero 599 506 (bit 0 )
    ptrail 599 (dừng )

    Qua cách mô tả trên ta rút ra điểm riêng sau của các remote:
    - Số lượng bít dữ liệu được truyền đi khác nhau: có loại 7 bit(sony),loại 8 bít, 12 bít, 16 bít , 18 bít, 32 bít, 42 bít (AIWA). Cùng 1 hãng điện tử ví dụ sony thì số bít cũng khác nhau, điều khiển tivi sony có 7 bit, còn dàn âm thanh sony là 16 bit.
    - Xung khởi động khác nhau
    - Phương thức mã hóa khác nhau : điều chế độ rộng xung thấp hay cao
    Giống nhau, dựa vào cái này mà giải mã tất cả các remote:
    - Mỗi bít khởi động, dừng,0 ,1 đều có phần xung thấp, cao.
    - Bit khởi động có phần xung thấp bao giờ cũng > 2000us
    - bit 1 có tổng độ dài xung thấp và cao < 1500us
    - bit 0 có tổng độ dài xung thấp và cao > 1500us
    - bit dừng có xung cao > 2000 us
    - Điều khiển nào có độ dài dữ liệu > 16 bit thì phần dữ liệu đầu tiên là giống nhau, 16 bit còn lại khác nhau ( đây là các bít có nghĩa) ví dụ :
    Đieu khien tivi samsung bn59-00891a (21 inch CRT)
    thap cao

    start 4604u 4431u

    0 618u 544u
    1 618u 1609u
    bits 32

    các bít phát đi đầu tiên | 16 bít cuối cùng

    00011111 00011111 01110111 10001000 0
    00011111 00011111 11011111 00100000 1
    00011111 00011111 01011111 10100000 2
    00011111 00011111 10011111 01100000 3
    00011111 00011111 11101111 00010000 4
    00011111 00011111 01101111 10010000 5
    00011111 00011111 10101111 01010000 6
    00011111 00011111 11001111 00110000 7
    00011111 00011111 01001111 10110000 8
    00011111 00011111 10001111 01110000 9
    00011111 00011111 11101001 00010110 enter
    00011111 00011111 01001011 10110100 exit
    00011111 00011111 00000111 11111000 info
    00011111 00011111 11110111 00001000 p-
    00011111 00011111 10110111 01001000 p+
    00011111 00011111 10100111 01011000 menu
    00011111 00011111 00001111 11110000 mute
    00011111 00011111 10111111 01000000 power
    00011111 00011111 00110111 11001000 pre CH
    00011111 00011111 01111111 10000000 source
    00011111 00011111 00101101 11010010 tool
    00011111 00011111 00101111 11010000 vol-
    00011111 00011111 00011111 11100000 vol+


    Tôi đưa ra thuật toán giải mã remote tivi samsung như sau:
    - bước 1: R4 = 0 ; Hai biến này mỗi biến có độ dài 2 byte
    R5 = 0
    - bước 2: đợi xung xuống thấp rồi nhảy đến bước 3
    - bước 3: đo độ rộng xung thấp nếu 4400 < độ rộng < 4800us
    thì nhảy đến bước 4, nếu không thì quay về bươc 1
    - bước 4:đo độ rộng xung cao nếu 4400 < độ rộng < 4800us
    thì nhảy đến bước 5, nếu không thì quay về bươc 1
    - bước 5: đo độ rộng xung thấp, nếu độ rộng > 2000 thì quay về bước 1
    nếu < 2000 thì nhảy đến bước 6
    - bước 6: đo độ rộng xung cao, nếu độ rộng > 2000 thì nhảy đến bước 9 (bit stop)
    nếu < 2000 thì cộng độ rộng này với độ rộng đo ở bước 5 ta có tổng.
    nếu tổng > 1500 thì đây là bit 0, nhảy đến bước 7
    nếu tổng < 1500 thì đây là bit 1, nhảy đến bước 8
    - bước 7: xóa cờ nhớ C
    quay trái có nhớ R4
    quay trái có nhớ R5
    nhảy đến bước 5
    - bước 7: set cờ nhớ C
    quay trái có nhớ R4
    quay trái có nhớ R5
    nhảy đến bước 5
    - bước 9: chúng ta có 32 bit dữ liệu giải mã chứa trong R4 và R5, mang so sánh với dữ liệu sẵn có để thực hiện lênh tương ứng
    Tuy nhiên, thuật toán trên là tổng quát nên rất tuyệt vời ở chỗ nó giải mã được cả 2 loại điều chế độ rộng xung cao và thấp, đọc được bít dừng và khởi động, giữ lại 16 bít có nghĩa ở R4, các bít giống nhau giữ ở R5. Nếu độ dài bít > 32 bít thì nó giữ lai 32 bít cuối cùng, còn nếu < 32 bit thì phần trống có giá tri là 0.
    Tôi đã dùng thuật toán trên viết chương trình cho MSP430G2131 đọc mã từ remote rồi lưu vào Seg D, sau đó sẽ thực hiện các lệnh điều khiển tương ứng với mã đọc được : bật tắt đèn, quạt, hẹn giờ tắt

    Comment


    • #32
      giờ cách thức để dùng TimerA để nhận tín hiệu hồng ngoại từ remote là như thế nào thế các bác

      Comment


      • #33
        Nguyên văn bởi ngocsonpt
        Bác cho anh em mở rộng tầm mắt đi ạ.
        Máy tính vừa bị đạo chích hack mất rồi, bây giờ phải làm lại từ đầu.
        Đường đến những ngày vinh quang không còn xa
        Con đường chúng ta... chúng ta đã chọn.

        Comment


        • #34
          Anh Hard ơi, em làm đồ án Giải mã remote hồng ngoại, sử dụng MSP430G2553, đang cần anh hướng dẫn cụ thể hơn ạ...mail em là phiviet3008@gmail.com

          Comment


          • #35
            Anh Hard ơi, em nạp chip thì nó báo lỗi như hình. Click image for larger version

Name:	Capture.PNG
Views:	2
Size:	10.4 KB
ID:	1399659 chỉ em với anh ơi.

            Comment

            Về tác giả

            Collapse

            Hard Nothing to say Tìm hiểu thêm về Hard

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

            Collapse

            Đang tải...
            X