到手一个项目,要求使用hxd019d传输数据,由于这个红外传感器主要用于遥控器,限制颇多,用于自由传输数据较为麻烦,耗时也挺久的,在这里作为博客第一天,做下记录

一、项目简介:
1.1、项目要求
在密码器原有红能上添加红外数据传输红能,要求,a设备按下发送按键,b设备按下接收按键,b能正确无误将数据接收。
1.2、开发环境
硬件:以N78E366A为主控mcu的密码器、hxd019d红外传输模块、usb转串口模块。
软件:Keil.C51.V905、Nuvoton ISP-ICP Utility,v7.15
二、硬件相关:
主控mcu采用新唐N78E366A,红外传输模块采用宏芯达hxd019d,通过I2C数据通信,由于MCU不支持硬件I2C,采用软件模拟实现通信功能。硬件连接P2.7=SDA,P2.6=SCK,P4.6=BUSY,BUSY相关功能后面续说。
             
       
三、软件相关
1、通信原理:主控MCU将需要发送的数据处理后通过I2C写入hxd019d(红外模块),接收方则在进入学习状态后,在busy状态发生变化后通过I2C读取数据,处理后为我们需要的数据。
2、数据组成:

如上图所示,发送时必须为232个字节数据,接收时将接收到230个字节,此为红外模块硬性规定,FF-F0之间数据可更改,且传输过程不会发生变化,FF之前百分之十五误差为正常范围,F0之后为数据保留段,因此,本次项目数据传输过程只能将数据存放于FF之后,F0可以适当后移。根据FF的数量,数据组成不同,当前为类似4进制,即最大不得超过4!!!
3、传输协议:由于数据传输限制,只能传输4进制数据,因此,发送时,两个字节表示一个数据,通过如下表格,数据转换:

(1)按字节发送时,8位字节拆分成高低4位,高四位放一个字节,低四位同样放入一个字节,如:发送一个字节时,假设它的ASCII码值为FE(实际我们发送时不可能有,但FE都能发送,其它更不用说了),则高四位为F,查表,hxddar[F]=0x33为实际发送的值,占一个字节,低八位为E,hxddar[E]=0x32为实际发送的值,占一个字节,由此解决进制限制问题。
(2)接收时,查表进行数据对比,如收到的是0x12,0x01(随意写的,方便理解),轮询数据处理表,查询收到的数据在表中位置,0x12为表中第6位,0x01为第2位,组合61,则说明发送方发送的是a。
(3)注意:在硬件,包括工作电流供给正常,数据收发可以保证一致,但由于贴片电流,工作几乎接近极限状态,加上发送时要保证对方处于学习状态,两者之间也没有同步机制,实际产品发射灯之间距离也并不理想,因此有一定几率发生传输错误,一般错误代码中已进行纠正,建议连续发送100次后,手动按键重新发送。
4、红外工作流程
(1)发送方:将需要发送的数据按上文协议转换后,放入数据缓存段,由于资源问题,红外要求发送230字节分段发送,第一段为红外随机有误差数据,即FF段放于代码段,如下:

第二段为数据缓存段即我们自己的数据,放于xdata中,事先定义固定大小数组即可,还是资源限制,该次项目最大允许发送63字节,因此数组最小为126,实际定义132,如下:

0-3字节总共4字节用于接收方纠错,中间2个字节留空为0,其余数据可用。
第三段数据为F0之后数据,稳定考虑,F0之前4个字节保留,资源充足时,F0包括前4字节可继续后移,多出字节给以第二段数据缓存段,如下:

最后一个字节为校验码,检验码为前229字节和,取低8位放于230位。
发送时,通过I2C写函数,三段数据依次写发送,检验和最后发送,至此,发送数据完成。
注意:连续调用I2C写函数,中间必须间隔1.2S以上,中间有红外模块数据处理时间,也有红外传输时间,接收方接收处理时间以及下次继续接收等待时间,因此,实际写间隔1.8S,经大量数据实测,该延迟时间更为稳定,但测试未加入纠错机制,因此,实际需要可适当减少延迟等待时间,高于1.2S即可
(2)接收方:接收时,理论需准备232字节用于存放接收数据,由于资源限制以及实际产品并不需要,因此在I2C读函数将自己需要的数据读取存放其余读了丢弃即可节省内存空间。该项目数据交换采用对码实现,类似万能遥控器学习原遥控器功能,因此,接收时,调用使红外模块进入学习状态,延迟50MS等待硬件稳定后可读取BUSY口状态(BUSY初始为高电平,调用学习状态函数,将会拉低BUSY口电平,此时红外处于学习(接收)外面数据状态,当BUSY口由低变高,说明学习完成),再次为高电平时调用I2C读函数,读取红外模块数据,将读来的数据进行进制转换即得发送放发送的数据。
5、代码组成
1、代码分为红外发射函数,红外接收函数,软件模拟I2C时序函数,初始化硬件相关,掉电唤醒函数用于接收发送过程延迟等待,串口调试打印函数
2、发送接收函数参数说明:

发送:buf为需要发送的数据,len为长度,长度最大63
接收:buf为接收到并处理后的数据,返回值为1正确接收,为0发生错误
四、操作说明
1、按下电源键开机
2、按一下Enter键进入接收数据状态
3、按键输入需要发送的数据,然后按一下Edit键进入发送数据状态
注意:1、必须先按接收,等待1或2S后才能按发送键,由于数据采用对码传输,两者红外发射等距离不得超过20mm,传输时,贴紧两块板即可
      2、最长发送数据长度为63个字节,多发无效

附上代码链接:http://download.csdn.net/download/qq_38150742/10184638

采用hxd019d传输数据相关相关推荐

  1. STM32系统时钟设置,采用外部有源晶振相关配置问题

    今天在调试STM32系统时钟设置时遇到一个问题:TIM2定时1Ms,TIM2中断服务函数time++,time=100时LED状态改变.程序运行后发现LED不是按照0.1S的时间闪烁,闪烁的很慢. 查 ...

  2. css3背景、边框、和补丁相关属性

    border :基本语法 border: border-width || border-style || border-color 默认值为: medium none . border-color 的 ...

  3. 传感器上传数据到阿里云Iot,然后从阿里云Iot传输数据到我的服务器和数据库

    整个系统架构如下: MQTT 和RocketMQ的区别: 1.传感器采用GPRS传输数据,采用微消息队列MQTT,微消息队列 MQTT 主要承担移动端连接接入.连接管理.数据转发等工作,相当于一个无限 ...

  4. ACL2022 | 文本生成的相关前沿进展

    每天给你送来NLP技术干货! 来自:复旦DISC 引言 文本生成作为人工智能领域研究热点之一,其研究进展与成果也引发了众多关注.本篇主要介绍了三篇ACL2022的三篇文章.主要包含了增强预训练语言模型 ...

  5. 基于Matlab的Vander Lugt相关算法车牌汉字识别系统

    一.引言 光学图像识别技术是一种有较高鉴别率的技术,具有高度并行性.容量大.速度快的特点,特別适用于信息的快速和实时处理.光学相关是光学模式识别中的一种主要方法.无论是空间匹配滤波相关或是联合变换相关 ...

  6. 使用SDL2播放yuv文件,采用C++实现SDL2视频播放器

    在雷神的SDL2播放器基础上用C++将播放器封装成类,里面部分元素采用C++的相关语法,如使用shared_ptr分配内存.async代替SDL的SDL_CreateThread创建线程方法等. 使用 ...

  7. Int 转 byte 数组以及相关原理

    零.前言 本文由int转byte数组这样的题目代码引发的思考,其中涉及到多个让我混淆的地方. 直接上代码 public byte[] toBytes(int number){byte[] bytes ...

  8. 距离-多普勒谱(RD谱)之二:距离相关(匹配滤波)

    一.前言 前文链接:https://blog.csdn.net/mddh_123/article/details/107891099 上一篇文章中,简单介绍了距离-多普勒谱的绘制方法,我们采用了&qu ...

  9. Android安全开发之安全使用HTTPS

    此文章转载于点击打开链接 Android安全开发之安全使用HTTPS 1.HTTPS简介 阿里聚安全的应用漏洞扫描器中有证书弱校验.主机名弱校验.webview未校验证书的检测项,这些检测项是针对AP ...

最新文章

  1. 路由守卫 AJAX,vue路由导航守卫 和 请求拦截以及基于node的token认证
  2. html多重边框,中间空白,CSS实现多重边框
  3. python面向编程:类继承、继承案例、单继承下属性查找、super方法
  4. 均方误差越大越好_超详细 | 如何写好计量经济学实证分析论文?
  5. ax的范数最大_矩阵方程ax=b的范数约束最小二乘解.pdf
  6. 【FICO 汇率】汇率
  7. 升级 python 2.6.6 到 2.7.14 版本(pip工具安装)
  8. linux unlink 与 rm区别_从 lsof 开始,深入理解 Linux 虚拟文件系统
  9. [backbone] Getting Started with Backbone.js
  10. 老骥伏羲,某讯遗产K3路由器2021年刷机指南。
  11. uniapp手机号码正则验证
  12. 小写金额转换为大写金额
  13. 《腾讯传》六、“红衣大炮”轰杀“狗日的腾讯”—3Q大战
  14. 达人评测 酷睿i5 12450h和锐龙r7 5700u选哪个好 i512450h和r75700u对比
  15. Sophus库(Linux下)的安装(模板类.hpp,非模板类.h)
  16. 《狂飙》壁纸大嫂如此惊艳,做成日历壁纸天天看
  17. [ 数通面试 ] 奇安信技术支持工程师 面试分享
  18. Byte的数值范围为何是-128到127
  19. 使用nid工具修改db_name和DBID
  20. Elliptical Grid Mapping(椭圆映射法)

热门文章

  1. 麒麟处理器和鸿蒙是什么,失去了麒麟处理器,鸿蒙将成为华为手机最大的王牌...
  2. 机器人以及皮肤移植的非侵入性替代品提供了更多的可能。惊天突破!电子皮肤问世!道翰天琼认知智能机器人平台API接口大脑为您揭秘
  3. python学习笔记——numpy的squeeze方法
  4. 使用Yahoo天气接口实现全球天气预报 JavaScript+Ajax
  5. 小米wifiapp4.5.8_如何看待小米2020年双11全平台销售额超过143亿?
  6. MongoDB按条件查找并求和
  7. Navicat Premium for Mac 破解教程
  8. CyberTeam宣称已攻破视频聊天软件Skype,下一个是游戏平台Steam
  9. blender翻转面法线
  10. Wps 2013 拼音标注两种方式分析