Mình bên CNNT nhưng đang mê điện tử hồi nhỏ , hôm nay mình viết tut này để chia sẽ các bn newbie kinh nghiệm của mình sau khi giải mã remote hồng ngoại
1. Công cụ:
• PC máy tính cài Windows
• Mcu 8051,...
• Phần mềm VIRTINS Multi (phần mềm hiện sóng trên pc bằng card âm thanh) - Download
Mạch điện:
Chân 3,4 opto nối vào GND vào TX của jack audio 3.5 , jack còn lại cắm vào cổng micro máy tính.
2. Phân tích mã remote
Mở chương trình VIRTINS Multi lên và chọn kênh A.
Ở đây mình dùng remote đầu đĩa TQ.
Bây giờ bạn bấm nút record trên thanh menu và cầm remote lên hướng mắt hồng ngoại và bấm vào 3 nút bất kỳ. Mục đích của hành động này là phân tích xem phần mã remote nào giống nhau để ta loại bỏ ra và tìm quy luật giải mã. Sau khi bấm tôi có 3 sóng mã:
Sau khi phân tích ta thấy:
Kết luận: Phần khác nhau có tất cả 16 gợn sóng => 16 bit, ta quy ước đỉnh nhọn là 0, đỉnh bằng là 1 và T ~= 600 us
3. Giải mã trên 8051
• Tạo timer cho nó tự ngắt sau 100us sau 7 lần ta có 700us
• Do chân data của mắt hồng ngoại ta mắc vào chân P3.2 ngắt ngoài nên khi có tín hiệu âm trên nó sẽ xảy ra ngắt đây là lúc ta giải mã.
Chúc các bạn thành công!
Ngoanrazor
1. Công cụ:
• PC máy tính cài Windows
• Mcu 8051,...
• Phần mềm VIRTINS Multi (phần mềm hiện sóng trên pc bằng card âm thanh) - Download
Mạch điện:
Chân 3,4 opto nối vào GND vào TX của jack audio 3.5 , jack còn lại cắm vào cổng micro máy tính.
2. Phân tích mã remote
Mở chương trình VIRTINS Multi lên và chọn kênh A.
Ở đây mình dùng remote đầu đĩa TQ.
Bây giờ bạn bấm nút record trên thanh menu và cầm remote lên hướng mắt hồng ngoại và bấm vào 3 nút bất kỳ. Mục đích của hành động này là phân tích xem phần mã remote nào giống nhau để ta loại bỏ ra và tìm quy luật giải mã. Sau khi bấm tôi có 3 sóng mã:
Sau khi phân tích ta thấy:
Kết luận: Phần khác nhau có tất cả 16 gợn sóng => 16 bit, ta quy ước đỉnh nhọn là 0, đỉnh bằng là 1 và T ~= 600 us
3. Giải mã trên 8051
• Tạo timer cho nó tự ngắt sau 100us sau 7 lần ta có 700us
Code:
void timer1 (void) interrupt 3 { tick++; }
Code:
void NgatNgoai(void) interrupt 0 { char IR[16]; // biến chứa bit remote int i=0; char x=0; P1_0=1; // xén phần mã remote giống nhau while(P3_2==0) { } while(P3_2==1) { } while(1) { if(P3_2==0) { while(P3_2 ==0) {;} i++; } if(i==17) break; } // đọc phần mã khác nhau 16 bit while(x<16) { if(P3_2==1) { tick=0; while(tick<7) { ; } // chờ 700 us if(P3_2==1) // nếu sau 700us mà tín hiệu còn thì nó là bit 1 (đỉnh bằng) { IR[x]=1; while(P3_2==1) { ; } } else // ngược lại là đỉnh nhọn { IR[x]=0; } x++; } else { while(P3_2==0) { ; } } } Delay(100); // delay 100ms cho kết thúc phần tín hiệu còn lại nếu không khi thoát hàm ngắt nó sẽ xảy ra ngắt tiếp }
Ngoanrazor
Comment