红外代码

////////////////////////////////////////////////////
//功能:红外读码,返回读码的结果
//
//子模块:无
//
//版本:V0.00
//
//日期:20131003
////////////////////////////////////////////////////
module ir_module(
//Clock Input:48M
input clk_1m,
input ir,
//Return Value
output reg [7:0]Code
);

reg [2:0]IR_reg;
initial IR_reg = 3‘b0;
always @ (posedge clk_1m) //1us
begin
IR_reg[0] <= ir;
IR_reg[1] <= IR_reg[0];
IR_reg[2] <= IR_reg[1];
end

wire IR_pos = (IR_reg[0]==1‘b1) & (IR_reg[1]==1‘b0);
wire IR_pos2= (IR_reg[1]==1‘b1) & (IR_reg[2]==1‘b0);
wire IR_neg = (IR_reg[0]==1‘b0) & (IR_reg[1]==1‘b1);
wire IR_neg2= (IR_reg[1]==1‘b0) & (IR_reg[2]==1‘b1);

//状态
parameter ST_START_L = 3‘b000, ST_CODE_P = 3‘b001 , ST_VALUE_P = 3‘b010;
parameter ST_START_H = 3‘b011, ST_CODE_N = 3‘b100 , ST_VALUE_N = 3‘b101;
//宽度
parameter START_H = 16‘d4096; //us
parameter START_L = 16‘d8192; //us
parameter CODE_0 = 16‘d512 + 16‘d512 ; //us
parameter CODE_1 = 16‘d1536 + 16‘d512 ; //us

reg [2:0]state;
initial state = ST_START_L;
reg [15:0]cnt_h;
initial cnt_h = 16‘b0;
reg [15:0]cnt_l;
initial cnt_l = 16‘b0;
reg [31:0]T_Value;
initial T_Value = 32‘b0;

reg [31:0]IR_Value;
initial IR_Value = 32‘b0;

reg [15:0]cnt_val;
initial cnt_val = 16‘b0;

reg Flag_LVL;
initial Flag_LVL = 1‘b0;

reg Flag_HVL;
initial Flag_HVL = 1‘b0;

always @ (posedge clk_1m or posedge ir)
begin
if(ir) //高电平复位
cnt_l <= 16‘b0;
else if(cnt_l[15] & cnt_l[10]) //低计数溢出复位
cnt_l <= 16‘b0;
else
cnt_l <= cnt_l + 1‘b1; //低电平计数
end

always @ (negedge clk_1m)
begin
if(cnt_l == START_L)
Flag_LVL <= 1‘b1;
else if(IR_pos2)
Flag_LVL <= 1‘b0;
end

always @ (posedge clk_1m or negedge ir)
begin
if(!ir) //低电平复位
cnt_h <= 16‘b0;
else if(cnt_h[15] & cnt_h[10]) //高计数溢出复位
cnt_h <= 16‘b0;
else
cnt_h <= cnt_h + 1‘b1; //高电平计数
end

always @ (negedge clk_1m)
begin
if(cnt_h == START_H)
Flag_HVL <=1;
else if(IR_neg2)
Flag_HVL <= 1‘b0;
end

reg [15:0]IR_code;
always @ (posedge clk_1m or posedge IR_neg)
begin
if(IR_neg)
begin
cnt_val <= 16‘b0;
end
else if(state == ST_CODE_P)
begin
if(cnt_val == CODE_0)
begin
IR_code <= CODE_0;
cnt_val <= cnt_val + 1‘b1;
end
else if(cnt_val == CODE_1)
begin
IR_code <= CODE_1;
cnt_val <= cnt_val + 1‘b1;
end
else
cnt_val <= cnt_val + 1‘b1;
end
end

wire fault = cnt_h[15] | cnt_l[15]; //错误
reg [5:0]cnt_num;
initial cnt_num = 6‘b0;

always @ (posedge clk_1m) //1us
begin
case(state)
ST_START_L:
begin
cnt_num <= 6‘b0;
if((IR_pos == 1‘b1) & (Flag_LVL==1‘b1))
begin
state <= ST_START_H;
end
else if(fault)
state <= ST_START_L;
end
ST_START_H :
begin
cnt_num <= 6‘b0;
if((IR_neg == 1‘b1) & (Flag_HVL==1‘b1))
begin
state <= ST_CODE_P;
end
else if(fault)
state <= ST_START_L;
end
ST_CODE_P :
begin
if((IR_neg)&(IR_code == CODE_1))
begin
cnt_num = cnt_num + 1‘b1;
IR_Value <= {IR_Value[30:0],1‘b1};
end
else if((IR_neg)&(IR_code == CODE_0))
begin
cnt_num = cnt_num + 1‘b1;
IR_Value <= {IR_Value[30:0],1‘b0};
end
else if(cnt_num==6‘d32)
begin
cnt_num <= 6‘b0;
T_Value <= IR_Value;
state <= ST_START_L;
Code <= {IR_Value[8],IR_Value[9],IR_Value[10],IR_Value[11],IR_Value[12],IR_Value[13],IR_Value[14],IR_Value[15]};
end
end
default : state <= ST_START_L;
endcase
end

endmodule

时间: 2025-01-14 02:10:51

红外代码的相关文章

16.3 NEC协议红外遥控器

家电遥控器通信距离往往要求不高,而红外的成本比其它无线设备要低的多,所以家电遥控器应用中红外始终占据着一席之地.遥控器的基带通信协议很多,大概有几十种,常用的就有 ITT 协议.NEC 协议.Sharp 协议.Philips RC-5 协议.Sony SIRC 协议等.用的最多的就是 NEC 协议了,因此我们 KST-51 开发板配套的遥控器直接采用 NEC 协议,我们这节课也以 NEC 协议标准来讲解一下. NEC 协议的数据格式包括了引导码.用户码.用户码(或者用户码反码).按键键码和键码反

TVB-Gone 红外编码方法

每次都重新推算一遍,年纪大了还是记录一下吧(硬件版的TV-B-Gone的压缩编码跳过此段往下看) N900上有个TVB-Gone的程序,但是程序的红外编码往往都是对应的国外的电视,好多国产电视都不支持, 有时候需要遥控空调或者投影之类的,只能自己录入了,大概看了一下,编码比较简单(比硬件那个简单多了,毕竟不需要考虑程序空间的问题) (上次录过一次,这次又重搞一遍,还是记录一下,以备后用.) 第一步当然得知道红外编码,做了个简单的红外线分析器,网上有开源的, 没有串口,我用了个转USB的小东西,

中控系统

中控系统招投标特点 中控报价:元包含以下清单:1.全能型中控主机(ipad/安卓/windows/嵌入式,全平台);2.红外发射棒3.触摸屏控制界面设计软件;4.中控主机编程软件;5.红外学习软件(创建红外代码库);5.windows控制软件;6.安卓(android)控制软件:7.ipad控制软件. 1.         同时支持IPAD平板电脑.安卓平板电脑.射频触摸屏.windows电脑控制(笔记本.台式机.一体机等),一个设计器支持所有平台,并且IPAD平板.安卓平板.射频触屏及wind

错误和问题解决的成本

问题描写叙述 错误 数据收集 根本原因 版本号   组件:数据修复           在一个实际成本组织中,(平均,先进先出,后进先出) 一个或更 多的下面情况可能发生: 1.导航到物料成本历史表单上的数量信息,与现有量表单的数量不匹配的记录 2. 一些物料前期已计成本的数量与前面的事务处理历史表单的数量不匹配 3. 全部的库存值报表与事务处理值报表不匹配 4. 存货层次成本更新表单的总数量与现有量数量表单不匹配(只在先进先出/后进先出) 5.这些症状的不论什么一个意味着 MMT-CQL不匹配

IRM3800 红外遥控器解码 linux驱动

这一次还是接在 Cemera 上.用 中断引脚 EINT20 也就是 GPG12. 之前焊的 51 板子上有一个红外接收器. 请注意了,是 标准的 NEC 码规范:首次发送的是9ms的高电平脉冲,其后是4.5ms的低电平,接下来就是8bit的地址码(从低有效位开始发),而后是8bit的地址码的反码(主要是用于校验是否出错).然后是8bit 的命令码(也是从低有效位开始发),而后也是8bit 的命令码的反码.其"0"为载波发射0.56ms,不发射0.565ms,其"1"

树莓派 LED+蜂鸣+声音传感器+红外模块组合打造声控/红外控制LED

昨天搞了控制LED,玩了第一个,剩下的就感觉很简单了,这里记录一下 先来几张照片 玩了蜂蜜模块才发现规律,一般这种模块,都会有三个针脚,VCC(3.3V或5V供电输出针脚).GNC(对应GPIO针脚的GNC).OUT/(I/O)(对应GPIO编号的针脚),如果是需要向树莓派发送信息的,这个模块上标识的是OUT,例如这里用的声音传感器和人体红外传感器,这两个都是需要向树莓派发送侦测的信息,如果不需要向树莓派发送消息的,则标识的是I/O,比如我这个蜂鸣模块,这只是我用这三个传感器发现的,可能不正确

光传感器和距离传感器代码分析【转】

本文转载自:http://blog.csdn.net/luobin1984/article/details/8132889 Light Sensor& Proximity Sensor TMD27713T内部集成一个光传感器,一颗红外发射管和一颗红外接收极管. ALS环境光传感器,距离检测和红外灯在一个模块上,ALS:近似于人眼的反应,可编程积分时间,可编程的中断阀值,很高的灵敏度.距离检测:校准到100mm的精度,消除工厂校准,可编程的数字红外脉冲.可编程的电流源的红外灯,可编程的中断阀值,可

wifi display代码 分析

转自:http://blog.csdn.net/lilian0118/article/details/23168531 这一章中我们来看Wifi Display连接过程的建立,包含P2P的部分和RTSP的部分,首先来大致看一下Wifi Display规范相关的东西. HIDC: Human Interface Device Class  (遵循HID标准的设备类)UIBC: User Input Back Channel  (UIBC分为两种,一种是Generic,包含鼠标.键盘等:另一种是HI

18、红外

一.红外线工作原理 1.红外线系统的组成 红外线遥控器已被广泛使用在各种类型的家电产品上,它的出现给使用电器提供了很多的便利.红外线系统一般由红外发射装置和红外接收设备两大部分组成.红外发射装置又可由键盘电路.红外编码芯片.电源和红外发射电路组成.红外接收设备可由红外接收电路.红外解码芯片.电源和应用电路组成.通常为了使信号更好的被发射端发送出去,经常会将二进制数据信号调制成为脉冲信号,通过红外发射管发射.常用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号