Thursday, September 19, 2013

[Hướng dẫn] Giải mã remote hồng ngoại với 8051 – Decode infrared remote control with 8051


  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.
  1. Phân tích mã remote
    Mở chương trình VIRTINS Multi lên và chọn kênh A. Ở đây tôi 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
  2. Giải mã trên 8051

Tạo timer cho nó tự ngắt sau 100us sau 7 lần ta có 700us

void timer1 (void) interrupt 3
{
      tick++;

 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ã.

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
}