🌱 Giải mã tín hiệu hồng ngoại chuẩn NEC sử dụng Vi điều khiển ATTiny13

🌱 Giải mã tín hiệu hồng ngoại chuẩn NEC sử dụng Vi điều khiển ATTiny13

    Ở các bài viết trước mình đã giới thiệu về chuẩn hồng ngoại trong các remote control của Tivi, điều hòa và cách giải mã raw code tín hiệu remote control sử dụng bộ thư viện của Arduino. Rất mong sau những bài viết đó bạn đã hiểu về chuẩn hồng ngoại và cách giải mã tín hiệu hồng ngoại, vì đã có bộ LED lọc và thu hồng ngoại rồi nên mọi thứ rất là đơn giản.

    Bài viết này giới thiệu về cách sử dụng Vi điều khiển ATTiny13 để giải mã tín hiệu hồng ngoại từ remote control theo chuẩn NEC, các protocol và vi diều khiển khác cũng sẽ triển khai tương tự.

    ➤ Chuẩn bị thiết bị và cách tiến hành

    Đối với các tín hiệu số trả về từ LED thu hồng ngoại, việc vi điều khiển cần là phát hiện ra sự thay đổi tín hiệu từ chân tín hiệu và đo thời gian giữa mỗi hai sườn xung.

    Đối với vi điều khiển có một số cách (với độ chính xác cao) để làm được hai công việc ở trên:

  1. Sử dụng External Interrupt + Timer (Counter hoặc CTC mode)
  2. Sử dụng Timer Input Capture Mode
  3. Sử dụng các bộ ngoại vi thu tín hiệu hồng ngoại (Remote Control Signal Processor)

    Bài viết này thực hành trên vi điều khiển ATTiny13 nên không support ngoại vi 2 và 3, vì vậy mình sẽ chỉ nói đến phương án 1 - Sử dụng External Interrupt + Timer (Counter hoặc CTC mode).

  • External Interrupt dùng để phát hiện sự thay đổi tín hiệu sườn xung trên chân tín hiệu.
  • Timer dùng để đo thời gian giữa 2 sườn xung.

    ➤ Bố trí phần cứng

    Phần này mình kết nối ATTiny13 với Led thu hồng ngoại TSOP4838, cùng với đó mình bố trí một OLED để hiển thị Command giải mã được.

    OLED giao tiếp với ATTiny13 thông qua giao thức I2C.

IR Decode Hardware with ATTiny13
Sơ đồ phần cứng mạch giải mã hồng ngoại

IR Decode NEC Hardware
Sơ đồ kết nối phần cứng mạch giải mã hồng ngoại

    ➤ Thiết kế chương trình phần mềm

    🔻 External Interrupt

    Mỗi lần ngắt theo sườn xung xảy ra (sườn lên hoặc sườn xuống), chương trình sẽ bắt đầu xử lý tín hiệu hồng ngoại bằng việc đo xung. Việc sử dụng Interrupt để tránh việc bị mất mát xung.

    Khi EXTI xảy ra, chương trình cần check xem mức logic của chân signal là HIGH hay LOW để biết đó là sườn lên hay sườn xuống.

    🔻 Timer

    Mục đích của Timer là đếm chính xác khoảng thời gian giữa hai sườn xung. Có thể sử dụng Interrupt hoặc không. Bài toán này mình tạm không sử dụng Interrupt cho đơn giản.

    🔻 I2C - OLED

    Phần này không liên quan bài viết nên mình bỏ qua, mình sẽ giới thiệu về cách giao tiếp OLED với MCU trong bài viết khác.

    🔻 Luồng hoạt động của chương trình

    Đối với bài toán này chúng ta có các phase đọc dữ liệu khác nhau của một frame tín hiệu hồng ngoại: Xung start + Address + Command + Stop.

    Frame truyền theo NEC protocol

IR NEC Protocols
NEC Protocols

    Dưới đây là phần triển khai giải mã tín hiệu hồng ngoại NEC sử dụng vi điều khiển ATTiny13.

    ➤ Demo giải mã hồng ngoại NEC sử dụng ATTiny13

    Link Source Code

>>>= Follow ngay =<<<

Để nhận được những bài học miễn phí mới nhất nhé 😊

Chúc các bạn học tập tốt 😊

               

Nguyễn Văn Nghĩa

Mình là một người thích học hỏi và chia sẻ các kiến thức về Nhúng IOT.

Đăng nhận xét

Mới hơn Cũ hơn