俄罗斯方块 += 遥控器 原创 精华
Hallym6
发布于 2020-12-14 20:43
浏览
6收藏
Hi3861解码红外遥控器
红外遥控器是个很实用的键盘扩展,即能扩展键盘还能远程操作!
首先在我的小游戏上试一下!
先前发布的小游戏:https://harmonyos.51cto.com/posts/1995
视频:https://harmonyos.51cto.com/show/2063
先上图:
一、红外遥控器原理(简述)
红外遥控器是通过940nm-950nm的红外线传输的,载波频率是38K,传输协议也比较简单:
- 首先发送一个9ms的引导码,引起接收方注意,我要发送数据了!
- 停止4.5ms;
- 开始发送数据(发560us停560us代表一个bit 0,发560us停1680us代表发送一个bit 1);
- 每次传输发送4个字节 0-15是用户码(一个控制器这个码是固定的)16-23是命令码,24-31是命令码的反码,以上都是低位在前。
上图左是红外发光二极管
上图右是红外接收器(HS0038B),会自动过滤掉38K的载波留下数据信息
我压上了杜邦头可以直接插在开发板的引脚上。
二、解析原理
接收器有三个管脚(左:输出,中:电源负,右:电源正)
配置该管脚为普通输入、启用内部上拉电阻、并注册中断函数;
有输出(下降沿)的时候触发中断,中断里读取us时钟;
- 然后判断本次中断与上一次中断的时间间隔;
- 如果在13500(9000+4500)左右,说明接收到了一个引导信号,准备接收数据;
- 如果在1120(560+560)左右,说明接收到一个 bit 0,接收数据不变,接收序号++;
- 如果在2240(560+1680)左右,说明接收到一个 bit 1,接收数据与上接收序号所在的位为1;
- 如果接收序号=32说明该次接收结束
- 判断第3个字节与第4个字节是否刚好是互补的,成功可执行命令解析执行相关操作。
要获取每个按键的命令码是什么,可以直接打印到串口
然后对不同的键码进行一个switch操作就OK了!
三、同时也实现了红外编码
编码就是解码的反操作,相关简单
- 函数接收用户码和命令码;
- 发送9000us的引导码,停4500us
- 将用户码与命令码整理成一个32位的数据,方便发送;
- 依次按位进行开关PWM进行发送;38k = (160M/4212), 1/3的占空比(4212/3=1404)
- 32位发送完后,再发送一个结束码
发送间隔本应该用定时器进行操作,但Hi3861的定时器都是ms级的,无法完成us级延时;
开始我用usleep延时操作,发现误差有一两个数量级,根本无法使用,还好我找到了hi_udelay(),位于hi_time.h可以满足需求!
以上只是介绍最常见的红外遥控器的解码及编码!有些厂家自己定义了请多非标编码就不一一介绍了!
最近必须付上代码!!!
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
soure.zip 7.43K 105次下载
已于2020-12-15 15:21:04修改
赞
9
收藏 6
回复
9
4
6
相关推荐
征文大赛正在火热进行中,楼主这么优秀的文章真的不考虑参加吗?
例如这篇在标题开头添加“#2020征文-开发板#“,
再找到相应的专栏位置投稿,
就可以参加比赛啦!
详细步骤可以点击链接https://harmonyos.51cto.com/posts/1940进行了解
用更多的文章来赢取更多的奖励和人气吧!期待楼主后续的活跃表现。
少侠,可以参加征文了。
我是勾选原创来着,总提示我正文要200字以上!无语不?
这篇不错,感谢分享!!!!