基于DE2-115红外解码实验
一、 功能描述
在同一个遥控电路中通常要使用实现不同的遥控功能或区分不同的机器类型, 这样就要求信号按一定的编码传送,编码则会由编码芯片或电路完成。对应于编码芯片通常会有相配对的解码芯片或包含解码模块的应用芯片。在实际的产品设计或业余电子制作中,编码芯片并一定能完成我们要求的功能,这时我们就需要了解所使用的编码芯片到底是如何编码的。只有知道编码方式,我们才可以使用单片机或数字电路去定制解码方案。下面介绍本次案例的编码方式(从接收端的角度看):
引导码+地址码+数据码+数据反码
1.引导码:9ms(低电平)+4.5ms(高电平)
2.地址码:16位地址码
3.数据码:8位数据码
4.数据反码:8位数据反码
数据“0”=0.56ms低+0.56ms高
数据“1”=0.56ms低+1.68ms高
本案例实现了将上述编码格式的红外发送数据进行接收和解码,并将收到的数据显示到七段译码器上。
二、 以下是有关红外解码的资料截图:
注意这个图是从红外遥控器的角度看的,但是在实际检测的时候高电平和低电平是反过来的,因为经过接收头后会反过来。所以我们要处理的波形是反的,如下图所示
图2.接收端角度所看到的波形图
注意一下最后一位停止码,这个停止码确保了最后一位数位也有下降沿,从而我们可以利用下降沿来做为复位计数器的判断条件,具体的自己看看源码,仿真的时候一定要把最后一位停止码写上,要不然最后一位检测不到下降沿会导致错误。
红外遥控器键值编码表
图3.键值表
三、实现过程
本实验主要由2个模块构成,一个是负责对接收到的红外波形进行数据解析,另外一个是已经接受到的数据进行数码显示。
3.1 红外接收解码模块
ir_din在没有红外信号时默认为高,之后当有红外信号时,通过设计一个状态机几个状态,分别为初始状态监测9ms的头码,然后是监测4.5ms的引导码状态,然后进入数据读取状态,当数据读取完毕或者没有红外信号输入时回到初始状态。在数据读取状态通过判断,当遇到一个下降沿时,计数之前的高电平时间为0.56ms还是1.68ms来确定数据为“0”还是“1”。当数据读取完毕时,红外解码数据有效指示信号拉高并将红外解码数据传输给数码管模块。
以此本模块实现了将接收到的红外信号进行对应的解码,并将数据传输给数码管模块功能。
本模块信号列表如下:
信号名 |
I/O |
位宽 |
说明 |
clk |
I |
1 |
系统工作时钟50M |
rst_n |
I |
1 |
系统复位信号,低电平有效 |
ir_din |
I |
1 |
红外接收信号 |
ir_dout |
O |
32 |
红外解码数据 |
ir_dout_vld |
O |
1 |
红外解码数据有效指示信号 |
3.2 数码管模块
本模块实现了将时钟数据或者闹钟数据显示到七段译码器上的功能。该模块再数码管已经介绍过,这里就简单的说一下就可以了。
信号列表如下:
信号名 | I/O | 位宽 | 说明 |
clk | I | 1 | 系统工作时钟50M |
rst_n | I | 1 | 系统复位信号,低电平有效 |
ir_data | I | 32 | 红外接收到的数据 |
ir_data_vld | I | 1 | 数据有效标志 |
HEX0 | O | 7 | 输出给数码管0显示的数据 |
HEX1 | O | 7 | 输出给数码管1显示的数据 |
HEX2 | O | 7 | 输出给数码管2显示的数据 |
HEX3 | O | 7 | 输出给数码管3显示的数据 |
HEX4 | O | 7 | 输出给数码管4显示的数据 |
HEX5 | O | 7 | 输出给数码管5显示的数据 |
HEX6 | O | 7 | 输出给数码管6显示的数据 |
HEX7 | O | 7 | 输出给数码管7显示的数据 |
表2.数码管模块
系统的整体框图如下:
图4.系统的整体框图
四、源码
本实验源码下载链接:https://download.csdn.net/download/chengfengwenalan/10349322