FPGA|CPLD|ASIC论坛
直播中

1465617980

5年用户 92经验值
擅长:可编程逻辑 测量仪表
私信 关注
[讨论]

红外接收解码2

` 本帖最后由 Nancyfans 于 2019-8-9 16:53 编辑


线上线下培训课程推荐
课程名称:FPGA周六班,快速入门FPGA
课程链接:http://url.elecfans.com/u/97edd21e88

一、   功能描述
在同一个遥控电路中通常要使用实现不同的遥控功能或区分不同的机器类型, 这样就要求信号按一定的编码传送,编码则会由编码芯片或电路完成。对应于编码芯片通常会有相配对的解码芯片或包含解码模块的应用芯片。在实际的产品设计或业余电子制作中,编码芯片并一定能完成我们要求的功能,这时我们就需要了解所使用的编码芯片到底是如何编码的。只有知道编码方式,我们才可以使用单片机或数字电路去定制解码方案。下面介绍本次案例的编码方式:
引导码+地址码+数据码+数据反码
  1.引导码:9ms(低电平)+4.5ms(高电平)
  2.地址码:16位地址码
  3.数据码:8位数据码
  4.数据反码:8位数据反码
数据“0”=0.56ms高+0.56ms低
数据“1”=0.56ms高+1.68ms低
本案例实现了将上述编码格式的红外发送数据进行接收和解码,并将收到的数据显示到七段译码器上。
二、  平台效果图

三、    实现过程
首先根据所需要的功能,列出工程顶层的输入输出信号列表。
信号名
I/O
位宽
说明
clk
I
1
系统工作时钟50M
rst_n
I
1
系统复位信号,低电平有效
ir_din
I
1
红外接收信号
segment
O
8
数码管段选信号
seg_sel
O
8
数码管位选信号
我们可以把工程划分成两个模块,分别是红外接收解码模块和数码管显示模块。
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
红外解码数据有效指示信号

2.数码管模块

本模块实现了将时钟数据或者闹钟数据显示到七段译码器上的功能。
七段译码器引脚图:
02.png

根据七段译码器的型号共阴极或者共阳极,给予信号0或1点亮对应的led灯,一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选(a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即;共阳数码管的字符编码为11000000。
在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
本模块采用6个七段译码器显示闹钟小时分钟秒位,使用一个计数器不停计数0-5,每个数字代表一个七段译码器,在对应的七段译码器给予对应的字符编码,以此达到扫描数码管显示数据的功能。
信号列表如下:
信号名
I/O
位宽
说明
rst_n
I
1
系统复位信号,低电平有效
clk
I
1
系统工作时钟50M
din
I
32
每个数码管的时间数据
seg_sel
O
8
数码管位选
segment
O
8
数码管段选

代码资料链接:http://pan.baidu.com/s/1jH8PpLc

` 01.png

更多回帖

发帖
×
20
完善资料,
赚取积分