Thông báo

Collapse
No announcement yet.

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

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

  • [Hướng dẫn] Giải mã remote hồng ngoại với 8051

    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

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

    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
    }
    Chúc các bạn thành công!
    Ngoanrazor
    Attached Files



  • #2
    Mình chưa có cơ hội thử cái này nhưng chắc là ok, thank chủ thớt nhé. Mà mình cũng là dân ngoại đạo như chủ đây, có điều mình đi sau nhiều quá. Muốn làm quen với chủ để tiện trao đổi, học hỏi

    Comment


    • #3
      Skype với cả yahoo của mình ở đây có cả đó. bạn add vào nhé. Tại vì mình ko thấy những thứ đó ở thông tin của bạn . Rất vui được làm quen

      Comment


      • #4
        Thanksssss.
        Last edited by minhtinh; 20-12-2013, 02:02.
        |

        Comment


        • #5
          làm sao thuốc đc phần mềm này nhỉ! chủ thớt giúp e với! thanks

          Comment


          • #6
            mình cũng là dân ngoại đạo CNTT, cũng quan tâm về chủ đề này, thanks chủ thớt nhiều!

            Comment


            • #7
              Quá cao siêu, mình đọc mãi mà vẫn còn lơ mơ, chưa hiểu đựơc các khái niệm xung cao, xưng thấp, đỉnh cao, đỉnh bằng, và không hiểu phần giải thuật. Haizz quá khó, đánh dấu cái để ngâm cứu.
              Email:
              Đau đầu vì điện tử

              Comment

              Về tác giả

              Collapse

              ngoanrazor Tìm hiểu thêm về ngoanrazor

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

              Collapse

              Đang tải...
              X