由于功课和事情比较都多,FPGA 的学习脚步有所放缓,先自己反省一下~呵呵!希望能够调整好自己的心态,把精力和时间都放
在学习和项目上去。硬件工程师的成长之路本来就是很枯燥和乏味的,所以特别需要耐心。而相反,我个人觉得我缺乏的偏偏就是耐心!
上来先谈一下自己的学习感受,目的是自勉!
从同学手上借来一个小型红外发射遥控器和一个 HS0038 红外接收头,把接收头直接插在 FPGA 学习板上的扩展槽里就能使用了!
于是开始了为期一个星期的红外学习,呵呵,之前没有搞过,还有就是 Verilog 的编程基础还很差,所以花了不少时间!
从网上下载几篇关于红外发射与接收的文章看了一下,大概知道了红外的一些基础知识!(这是编程之前必备的功课)~现在我简
单介绍一下基本原理:当我们按下遥控器的按键时,遥控器将发出一串二进制代码,我们称它为一帧数据。可将它们分为 5 部分,分别
为引导码、用户码、用户反码、数据码、数据反码。遥控器发射代码时,均是低位在前。高位在后。其中引导码高电平为 9ms,低电平
为 4.5ms,当接收到此码时,表示一帧数据的开始。
解码的关键是如何识别"0"和"1",从位的定义我们可以发现"0"和"1"均以 0.565mS 的低电平开始,不同的是高电平的宽度不同,"0"
为 0.56mS,"1"为 1.68mS,所以必须根据高电平的宽度区别"0"和"1",如果从 0.565mS 低电平过后,开始延时,0.56mS 以后,若读到
的电平为低,说明该位为"0",反之则为"1"。
附件里有两篇关于红外的文章,大家可以参考一下,写的比我的好~呵呵
本程序主要功能是接收红外,并且解码,然后在四个数码管上显示出来(32 位码)!
程序如下:
module IR(clk,rst_n,IR,led_cs,led_db);
input clk;
input rst_n;
input IR;
output [7:0] led_cs;
output [7:0] led_db;
reg [3:0] led_cs;
reg [7:0] led_db;