概述本章介绍红外遥控通信试验,通过本章的学习掌握红外遥控器的编码原理以及使用。在 ry-51 单片机开发板上,配备了一个红外信号接收头,用于接收红外信号,与开发板配套了一个红外遥控器,用于发送红外数据。
14.1 红外遥控原理简介红外遥控是一种无线、非接触式数据传输技术、具有成本低、抗干扰能力强的短距离通信技术、被广泛的应用于电子设备遥控通信中,包括电视、空调、手机等多种电子设备中,具有广泛的应用前景。
红外通信原理为将信息加载到红外光波中,利用发射装置发射出去,接收设备接收到红外光后将信息解码并做出相应的操作,便完成了一次红外光通信。我们以一个生活中常见的例子为例,当两个在黑暗中的人,一人拿着手电筒通过不停的开关闪烁手电筒将信息传递给对方。而我们这里使用的是红外光,它的优点为红外光不可见,对周围环境影响较小,另外由于红外光波长远小于其它常用无线电波长,因此,对其它无线通信电子设备无影响。怎样将信息加载到红外光上呢?这就是我们常说的红外遥控编码协议了,目前常用的有 philips rc-5protocol、sharp 协议、nec 协议等。我们这例重点讲解 nec 协议。
在数字通信中最小的信息单位为位,即为“0”或“1”,那么在红外通信协议中是怎么表示逻辑“0”和“1”的呢?该协议中以发射红外载波的占空比代表信息“0”和“1”。逻辑“0”的表示法为:560us 的连续载波 +560us 的低电平,总时长为 1.125ms。逻辑“1”的表示法为:560us 的连续载波 +1680us 的低电平,总时长为 2.25ms。其中载波为 38khz 的方波,逻辑“0”和逻辑“1”表示法如下图所示:
图 14-1 nec 协议逻辑“0”和逻辑“1”表示法
传输一帧 nec 格式的数据包括以下内容:
1) 同步码头:9ms 载波 +4.5ms 低电平;
2. 用户码:用户自定义的 8bit 数据;
3. 用户反码:8bit 用户码按位取反;
4. 数据码:8bit 数据,也称为 8 位按键数据码;
5. 数据反码:8bit 数据码按位取反。
由上面内容可知,实际传输的数据内容为用户码和数据码,上面的反码用于数据校验,确保数据传输的可靠性,数据按低位到高位的顺序一次传输。传输一帧 nec 数据格式如下图所示:
上图为 nec 发送模块通过红外光发送的数据,当接收模块接收到 38khz 的载波时输出低电平,其它情况输出高电平,因此,单片机通过测量接收到的电平高低持续时间便可解码数据了。例如当单片机接收到 9ms 低电平 +4.5ms 高电平时,即接收到了引导码,当接收到 560us 低电平 +560us 高电平表示接收到了数据“0”,当接收到 560us 低电平 +1680us 高电平表示接收到了数据“1”,依照上述模式便可完成一帧数据的接收。
14.2 红外接收硬件电路设计ry-51 单片机开发板载了红外信号接收模块 vs1838b,模块外形图下图左边所示,电路连接图如下图右边所示。其中,输出引脚与单片机的 p3.2 引脚相连接,同时该引脚为单片机的外部中断 0 输入引脚。因此,可以利用单片机的外部中断 0 来处理红外数据接收。
14.3 红外解码试验红外解码软件编写步骤如下:首先进行初始化将外部中断 0 设置为下降沿触发,当接收到的红外信号由高电平变为低电平时,表明一帧红外数据的开始。在外部中断 0 子程序中判断引导码的正确性,判读的方法为通过定时器计数来计算高低电平持续的时间,并分别与引导码规定时间进行对比。当超出了规定时间范围,我们认为这不是一帧标准的红外遥控数据,便直接返回跳出中断子程序。当符合要求后,继续往下执行,并判断和接收 4 个字节的数据,将接收到的数据存放到指定存储变量中,并置位红外标志位。在主程序中查询这个标志位来确定是否收到了红外数据,将数据从存储变量中取出,并将数据显示在602液晶模块上。为了方便后续使用,将红外初始化,以及红外中断子程序放入hongwai.h,hongwai.c文件中。
hongwai.h代码如下:
#ifndef __ir_h__#define __ir_h__extern void initir(); //初始化定时器tr0,外部中断0extern bit flag_ir; //按键标志位extern unsigned long data_ir;//4个字节的数据:[31:0]数据反码- >数据码- >用户反码- >用户码#endifhongwai.c代码如下:
#include#define high_ir 1 //高电平#define low_ir 0 //低电平#define min_9ms 8000 //8ms#define max_9ms 10000 //10ms#define min_4_5ms 3500 //3.5ms#define max_4_5ms 5000 //5ms#define min_560us 300 //300us#define max_560us 700 //700us#define min_1680us 1300 //1.3ms#define max_1680us 1800 //1.8ms#define time_16ms 16000 //16mssbit led1 = p1^1;sbit ir_in = p3^2;//红外接收引脚,也是外部中断0输入脚bit flag_ir = 0;//红外接收标志,收到正确帧数据后,由程序置1unsigned long data_ir;//4个字节的数据:[31:0]数据反码- >数据码- >用户反码- >用户码//红外接收初始化void initir(){ ir_in = 1;//释放 tmod &= 0xf0;//清零t0控制位 tmod |= 0x01;//配置t0为模式1 tr0 = 0; //停止t0记数 et0 = 0;//关定时器0中断 it0 = 1;//设置int0为下降沿触发 ex0 = 1;//开int0中断 ea=1; //开总中断}unsigned int t_count(bit flag)//电平计时器{ th0 = 0; //清零t0 tl0 = 0; tr0 = 1;//启动t0 //判断高电平是否超过16ms,若超过定义为异常,直接跳出循环,防止进入死循环 while(ir_in==flag){if(th1 >= (time_16ms >>8)) break;} tr0 = 0; return (th0*256 + tl0);//返回计数值,数值单位为us }//外部中断0,中断子程序,下降沿触发进入中断void int0() interrupt 0 { unsigned int i; unsigned int t_low,t_high; t_low = t_count( low_ir);//接收9ms的引导码低电平 t_high = t_count(high_ir);//接收4.5ms引导码高电平 //判断引导码正确性 if(t_lowmax_9ms || t_highmax_4_5ms){ie0=0; return;} //接收4个字节的数据,共32位 for(i=0;i>=1; //为0时高位补0 if(t_high >min_1680us) data_ir |= 0x80000000;//为1时高位置1 } flag_ir = 1; //接收到按键值后,置位 led1 = 0;//闪烁小灯 //for(i=0;i>16);//数据码 switch(key) { case 69:key_str = ch-;break; case 70:key_str = ch;break; case 71:key_str = ch+;break; case 68:key_str = prev;break; case 64:key_str = next;break; case 67:key_str = play/pause;break; case 7:key_str = -;break; case 21 :key_str = +;break; case 9:key_str = eq;break; case 22:key_str = 0;break; case 25:key_str = 100+;break; case 13:key_str = 200+;break; case 12:key_str = 1;break; case 24:key_str = 2;break; case 94:key_str = 3;break; case 8:key_str = 4;break; case 28:key_str = 5;break; case 90:key_str = 6;break; case 66:key_str = 7;break; case 82:key_str = 8;break; case 74:key_str = 9;break; default:key_str = error!; } disp_1602_str(2,1, ); disp_1602_str(2,1,key_str); } }}14.4 本章小结本章介绍了红外遥控器的发送和接收原理,并编写了单片机接收红外数据的驱动程序,后续可直接调用函数应用到具体的工程中去了。
预付费宿舍电能管理系统在某大学中的设计与应用
国产蓝牙耳机哪款好?超级耐用运动蓝牙耳机推荐!
整理了一份经常忽略的嵌入式基础知识点
Xilinx Ultrascale Kintex FPGA 电源解决方案
Linux互斥锁的作用 互斥锁是什么
基于单片机的红外遥控通信实验 红外遥控器的发送和接收原理
iPhoneX和小米MIX2S哪个性能最好
水位指示器电路图分享
在线烟气分析仪常见故障及其排除方法
加拿大开发铁基燃料电池催化剂
基于温度传感器和AD574转换器实现计算机瞬态记录系统的设计
计算机视觉技术商业化新走向 朝着新零售场景出发和落地
在芯片上集成温度和湿度感应
工控机产业的发展现状以及未来趋势
基于AKM Semiconductor 的音频编码器优化方案
大数据改变的五大行业
超级电容器模组的特点与优势
曝华为囤积了200万个索尼IMX989传感器 P70 Art将搭载,传感器企业灿瑞科技荣获首批上海市创新型企业总部授牌
EVM对系统性能的影响
手机芯片低迷一年,高通CEO薪酬暴涨395%