Giải mã tín hiệu hồng ngoại NEC với Vi điều khiển ATTiny13: Hướng dẫn chi tiết
Ở 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 giải mã NEC
Đố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:
- Sử dụng External Interrupt + Timer (Counter hoặc CTC mode)
- Sử dụng Timer Input Capture Mode
- 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 cho giải mã hồng ngoại ATTiny13
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.
➤ Thiết kế chương trình phần mềm giải mã NEC
🔻 External Interrupt trong giải mã NEC
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 trong giải mã hồng ngoại NEC
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 trong ứng dụng giải mã NEC
Phần này không liên quan trực tiếp đến bài viết về giải mã NEC 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 giải mã NEC
Đối với bài toán giải mã NEC 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
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 giải mã NEC với ATTiny13
>>>= Follow ngay để cập nhật thông tin mới nhất về giải mã hồng ngoại =<<<