Thứ Bảy, 22 tháng 8, 2015

123

Hiển thị mã remote hồng ngoại

Nguồn :http://mcu.banlinhkien.vn/threads/bai-7-doc-ma-remote-hong-ngoai-su-dung-kit-avr-v4.2418/
TLiệu :
1.   http://hoc8051.blogspot.com/2012/08/dientu686comung-dung-vi-xu-li-trong-ieu.html
2.   http://suamayhandientukhanhhoa.blogspot.com/2014/05/hieu-ve-remode-sony-va-code-oc-ma-hong.html
3.   http://www.dientuvietnam.net/forums/forum/vi-%C4%91i%E1%BB%81u-khi%E1%BB%83n-mcu-b%E1%BB%99-%C4%91i%E1%BB%81u-khi%E1%BB%83n-t%C3%ADn-hi%E1%BB%87u-s%E1%BB%91-dsc/vi-%C4%91i%E1%BB%81u-khi%E1%BB%83n-h%E1%BB%8D-8051/192130-h%C6%B0%E1%BB%9Bng-d%E1%BA%ABn-gi%E1%BA%A3i-m%C3%A3-remote-h%E1%BB%93ng-ngo%E1%BA%A1i-v%E1%BB%9Bi-8051   
=======================================================================    
Xin chào các bạn!
Trong bài viết này mình xin hướng dẫn lập trình giao tiếp hiển thị mã các loại remote hồng ngoại: remote sony, remote 3 kênh, 8 kênh, 20 kênh… qua mắt thu hồng ngoại 1838T lên màn hình LCD16x2 sử dụng Atmega16. Project chạy trên KIT AVR V4.
I.MÔ TẢ PHẦN CỨNG
Kit AVR V4 cung cấp cho các bạn khối mắt thu hồng ngoại 1838T có sơ đồ nguyên lý như sau:
[​IMG]
Remote là 1 thiết bị phát sóng hồng ngoại, sử dụng trong các ứng dụng với mục đích điều khiển từ xa. Đặc điểm của remote:
-Một phím chỉ có duy nhất 1 mã lệnh.​
-Các phím khác nhau thì có mã lệnh tương ứng khác nhau.​
Trong tài liệu nói đến 2 loại remote:
Remote hồng ngoại loại 3 phím(8 phím, 20 phím…):
[​IMG]
Khi 1 phím được ấn, khung dữ liệu bên mắt thu hồng ngoại nhận được có dạng:
[​IMG]
[​IMG]
Dựa vào khung dữ liệu, ta quy định:
-Bit 0: là xung ở mức cao trong 500us và xuống mức thấp trong 700us.
-Bit 1: là xung ở mức cao trong 1600us và xuống mức thấp trong 700us.
Dựa vào quy định trên, một khung dữ liệu gồm có:
-1 xung START: xung ở mức thấp trong 9ms và lên mức cao trong 4ms.
-8 bit 0 + 8 bit 1 nối tiếp nhau.
-Xung mã lệnh tương ứng với các phím.
Remote hồng ngoại SONY:
[​IMG]
Khi 1 phím được ấn, khung dữ liệu bên mắt thu hồng ngoại nhận được có dạng:
[​IMG]
[​IMG]
Dựa vào khung dữ liệu, ta quy định:
-BIT 0: xung ở mức thấp trong 1200us và lên mức cao trong 800us.
-BIT 1: xung ở mức thấp trong 600us và lên mức cao trong 600us.
Dựa vào quy định trên, một khung dữ liệu gồm có:
-1 xung START: xung ở mức thấp trong 2.6ms và lên mức cao trong 600us.
-Xung mã lệnh tương ứng với các phím.
II.LẬP TRÌNH PHẦN MỀM
Để lấy mã các phím trên remote, ta làm như sau:
Remote hồng ngoại 3 phím:
[​IMG]
Remote hồng ngoại SONY:
[​IMG]
Code driver nhận mã hồng ngoại:
Thư viện code driver hồng ngoại cung cấp cho các bạn 2 hàm:
-uint8_t INFR_CheckStart(): Sử dụng để kiểm tra xung START.
HTML:
uint8_t INFR_CheckStart()
{
    uint8_t i;
#ifdef USE_REMOTE_MH
    if(INFR_DATA==0)         
    {
        delay_us(500);       
        if(INFR_DATA==0)     
        {   
            for(i=0;i<40;i++)
            {
                delay_us(200);
                if(INFR_DATA==1) return 0; 
            }
            while(INFR_DATA==1);           
            return 1;       
        }
    }
#endif
#ifdef USE_REMOTE_SONY
    if(INFR_DATA==0)                         
    {
        delay_us(10);                       
        if(INFR_DATA==0)                     
        {   
            for(i=0;i<7;i++)               
            {
                delay_us(300);
                if(INFR_DATA==1) return 0; 
            }
            while(INFR_DATA==0);           
            return 1;                     
        } 
    }
#endif
    return 0;
}
-uint16_t INFR_GetCode(): Sử dụng để nhận mã của phím bấm.
HTML:
uint16_t INFR_GetCode(void)
{
#ifdef USE_REMOTE_MH
    uint8_t i;
    uint16_t data_infr=0;
    if(INFR_CheckStart())            // Neu dung xung START
    {
        while(INFR_DATA==0);          // Cho het bit 0 tiep theo
        for(i=0;i<24;i++)            // Lay 24 bit du lieu (bao gom 8 bit 0 va 8 bit 1 dau tien sau xung start)
        { 
            delay_us(750);            // Delay 750us de kiem tra bit
            data_infr=data_infr<<1;
            if(INFR_DATA==0) data_infr|=1;
            while(INFR_DATA==1);      // cho canh len
            while(INFR_DATA==0); 
        }
        delay_ms(600);                // Cho het tin hieu (chong nhieu)
    }
#endif
#ifdef USE_REMOTE_SONY
    uint8_t i;
    uint16_t data_infr=0;
    if(INFR_CheckStart())         
    {
        while(INFR_DATA==1);     
        for(i=0;i<12;i++)         
        { 
            delay_us(1000);         
            data_infr=data_infr<<1;
            if(INFR_DATA==0) data_infr|=1;       
            while(INFR_DATA==0); 
            while(INFR_DATA==1); 
        }
        delay_ms(400);             
    }
#endif
    return data_infr;                  // Gia tri ma kenh tra ve
}
Biên dịch chương trình và nạp chạy demo trên KIT AVR V4:





Link dowload File Code của chương trình:





GIAO TIEP UART


link khác nữa:http://laptrinhvnc.com/lap-trinh/giao-tiep-bat-dong-bo-uart
Chào các bạn!!
Hôm nay mình sẽ hướng dẫn các bạn cách giao tiếp UART sử dụng 8051.
Sau khi đọc xong bài viết này bạn có thể:
Biết cách truyền dữ liệu lên PC.
Nhận dữ liệu từ PC.
1. UART trong 8051.
Trong các chip 8051 có hỗ trợ 1 kênh giao tiếp UART với 4 chế độ. Chế độ hay được sử dụng đó là chế độ 1,ở chế độ này mỗi khung UART gồm 10 bit : 1bit start + 8 bit data + 1 bit stop.
Sơ đồ kết nối UART:
[​IMG]
2. Lập trình UART.
Để có thể giao tiếp UART điều đầu tiên và quan trọng nhất là ta cần cấu hình tốc độ baud rate. Baud rat thông thường sử dụng là 9600. Để cấu hình tốc độ buad rate ta cần cấu hình timer1 hoặc timer 2 cho phù hợp.( xem thêm tại….)
Sau khi đã có nguồn tạo tốc độ baud cho UART ta đi xây dựng những hàm cơ bản để điều khiển UART:
Hàm khởi tạo UART:
HTML:
void UART_Init(void)
 
{
 
          #ifdef UART_USE_TIMER1
 
          TMOD&=0x0f;
 
          TMOD |= 0x20;  //Timer 1 mode 2.
 
          TL1 = 0xFD;                       
 
          TH1 = 0xFD;      // baud rate =9600                 
 
          TR1 = 1;
 
          #endif
 
          #ifdef UART_USE_TIMER2
 
          RCLK=1;
 
          TCLK=1;    //Timer 2: Baud Rate Generator
 
          RCAP2L  = 0xDC;  //Baud Rate 9600
 
          RCAP2H  = 0xFF;        //Baud Rate 9600
 
          TR2=1;
 
          #endif
 
          ES = 1;      // Kich hoat ngat UART.
 
          IP = 0x10;    // Thiet lap muc uu tien cho ngat UART.
 
          SCON = 0x50;  // Chon che do UART mode 1.
 
          PCON=PCON&(~(0x80));//khong nhan doi toc do baud.   
 
}
Hàm truyền một kí tự ra UART:
HTML:
void UART_PutChar(unsigned char c)
 
{
 
          tran_busy = 1;
 
          SBUF = c;
 
          while(tran_busy);
 
}
Hàm nhận một kí tự UART:
HTML:
unsigned char UART_GetChar(void)
 
{   
 
          unsigned char temp=0;
 
          if(RI==1)
 
          {
 
                  RI=0;
 
                  temp=SBUF;
 
          }
 
          return temp;
 
}
Hàm gửi một chuỗi kí tự ra UART:
HTML:
void UART_Puts(unsigned char *s)
 
{
 
          while (*s)
 
  {
 
      UART_PutChar(*s);
 
      s++;
 
  }
 
}
3. Bài toán ví dụ:
Để hiểu hơn về cách sử dụng UART trong 8051 tôi đưa ra một bài toán thực hành sau: - Gửi chuỗi kí tự “DEMO UART” và “BanLinhKien.Vn” lên PC, sau đó nhận kí tự được gửi từ PC rồi hiển thị kí tự nhận được lên PC.
Code bài toán như sau:
HTML:
int main(void)
 
{
 
          unsigned char key;
 
          unsigned char str[25];
 
          UART_Init();
 
          LCD_Init();
 
          delay_ms(10);
 
          LCD_Puts("DEMO UART");
 
          delay_ms(1000);
 
          LCD_Clear();
 
          EA=1;
 
          UART_Puts("DEMO UART");
 
          LCD_Puts("BanLinhKien.Vn");
 
          UART_Puts("BanLinhKien.Vn");
 
  while(1)
 
  {
 
                  key=UART_GetChar();
 
                  if(key)
 
                  {
 
                            sprintf(str,"Ki Tu VDK nhan duoc : %c",key);
 
                            UART_Puts(str);
 
                            LCD_Gotoxy(0,1);
 
                            sprintf(str,"Ki Tu: %c",key);
 
                            LCD_Puts(str);
 
                  }
 
               
 
  }
 
          return 1;
 
}
Để hiểu rõ hơn các bạn có thể download code và mô phỏng bên dưới.
Chúc các bạn thành công!

Các file đính kèm:

  • UART.zip
    Kích thước:
    22.7 KB
    Đọc:
    664