遥控器红外解码的原理及应用
来源:互联网 发布:明星天价片酬看法 知乎 编辑:程序博客网 时间:2024/04/27 17:03
遥控器红外解码的原理及应用
奥运会热播寝室看得是如火如荼,A兄弟在床上看对面B兄弟床下的电脑,B兄弟想关机睡觉,A兄弟想继续看比赛,但又不想上床关电脑,怎么办呢?懒人有懒法,兄弟我不是上次做了红外测障吗,不如就此电路改一个红外遥控接收电路控制电路关机。
初步方案
生活中的电器遥控设备基本上都是红外遥控,发射的都是红外线,初步的方案就是用一个电视遥控板来控制电脑关机,电路就采用上次红外测障所用的红外接收电路(具体电路见红外测障的原理及应用),用电视遥控器发出红外信号,当红外接收头接收到红外信号,就由单片机I\O脚产生一个下降沿中断调用串口函数打印信息到电脑,单片机串口通过USB转串芯片连接到电脑USB口,电脑上由A兄弟编写上位机软件接收信号控制电脑关机。初步方案由于电路现成并且简单,半天就实现了,但问题也很多,由于没有编码不能区分接收到的信号,功能只有一个只能关机,更严重的是凡是遥控器都可以控制,寝室有空调,对空调的的任何控制都会触发电脑关机,改进的方案自然就呼之而出需要对红外信号进行解码。
红外解码
电视遥控器使用的是专用集成发射芯片来实现遥控码的发射,就是将某个按键的地址码和指令码,地址码和指令码都由0和1的序列组成,调制在38KHZ的载波上,然后经过放大,驱动红外发射管发射出去。不同公司的遥控芯片采用的通信协议也是不同的,而最常用的是NEC标准和PHILIPS标准,这里主要介绍NEC标准。
NEC标准:遥控的载波频率为38KHZ,发送典型协议链如图1
图1
首先发送9ms的高电平然后是4.5ms的低电平,接着就是地址码和指令码,发送的地址码和指令码是按照低位在前高位在后的格式,地址码和指令码总共有32位0-7位为地址码,8-15为地址码反码,16-23为指令码,24-32为指令码反码,这样做是为了验证接收信息的正确性。其中以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔为1.685ms、周期为2.25ms的组合表示二进制的“1” ,如图2所示。
图2
以上脉冲的发射时间为108ms,如果按键的时间超过108ms,则发送的是以110ms为周期的重复码,重复码是由9ms的高电平和2.5ms的电平以及一个560us的高电平组成,重复码如图3所示。
图3
在了解完NEC协议以后,就可以编写红外解码的程序了,要注意的是,由于一体化红外接收头平时输出高电平接收到38KHZ的红外信号才会输出低电平,因此接受到的波形与发射波形相反如图4所示。
图4
其中0和1的波形也发生了反向如图5所示
图5
编程实现
首先要确定手中的遥控板是采用的什么通信协议,将红外接收电路上电,一体化红外接收头的输出脚接到示波器上,将示波器的步长调到10ms,然后长按遥控板的任意键,示波器上如果出现以110ms为周期的重复码,并且重复码是由9ms的高电平和2.5ms的电平以及一个560us的高电平组成的,那么就是采用的NEC协议。其他协议在长键是也会有规律的信号也可以采用此类方法区别。
图6
其次要设定好单片机的定时器(只需一个定时器),由于本文中采用的是计算两次下降沿之间的时间来区分编码信息,因此还需设定好I\O脚的下降沿中断,根据红外接收头收到的信息特征如图6,将定时器中断周期设定为0.05ms,每隔0.05ms将变量time加1运算,一旦收到下降沿中断就将time清0,通过统计time的数值就可以获得两次下降沿之间的间隔时间,由此可以计算引导码的time为270,编码0的time为22左右,编码1的time为45。
最后通过判断引导码来区分其他制式遥控板以防误读信息,将获取的32位编码信息依次存放入32位的数组中,将数组中的值与遥控板上的按键值一一对应后调用串口函数在串口中打印出来。到此红外解码程序基本实现,剩下的工作就是A兄弟写上位机啦。
- 遥控器红外解码的原理及应用
- 红外遥控器解码原理
- 51单片机解码红外遥控器原理
- 红外遥控器解码
- 红外遥控器工作原理
- 用单片机解码红外遥控器
- 红外遥控解码原理及代码实现
- 单片机解码万能红外遥控器C51程序
- 51单片机NEC红外遥控器解码
- 红外线遥控器解码原理
- 红外线遥控器解码原理
- 学习型红外遥控器设计(3) 红外遥控解码学习
- 红外测障模块的原理及应用
- 红外遥控系统原理及单片机软件解码程序,我的编写经历(C版本)
- 红外遥控系统原理及单片机软件解码程序,我的编写经历(C版本)
- 红外遥控系统原理及单片机软件解码程序,我的编写经历(C版本)
- 红外遥控系统原理及单片机软件解码程序
- 红外遥控器
- 取得随机字符串 数字和字母
- java访问资源文件
- easyUI 创建一个基础的TreeGrid
- 1.EL入门
- linux内核中用d_path得到绝对路径名
- 遥控器红外解码的原理及应用
- 【转】 保留2位小数
- 自定义连接池示例
- 关于url hash navigation的问题
- 让Apache Shiro保护你的应用
- 使mybatis配置文件支持通配符,包括别名和mapper!
- java日期处理bean
- BNU Watermelon Full of Water-单点更新,区间询问
- 浏览器屏蔽右键及禁止复制代码