MCU裸机:一、315/433MHz/IR射频解码开发

Frist

文章目录

  • MCU裸机:一、315/433MHz/IR射频解码开发
  • MCU裸机开发大多基于其寄存器和一些外设信号处理的简易逻辑
  • 一、315/433MHz信号数据帧解读
  • 二、程序解码功能实现
    • 1.首先构造一个315/433MHz的解码结构体(方便后续的移植)
    • 2.解码逻辑函数编写
    • 3.应用层书写(这一层是看应用场景需求编写)
  • 总结

MCU裸机开发大多基于其寄存器和一些外设信号处理的简易逻辑

对于刚入行的我希望在博客上进行一些微处理器的开发,并将所学知识和技术以及方案进行记录总结,此篇内容将会介绍一些遥控无线模块如IR、RF433、RF315等信号基本处理。


一、315/433MHz信号数据帧解读

此例中使用WL531系列芯片作为315/433MHz的转码方案。

  1. 硬件电路如下:

  2. 逻辑分析仪抓取的波形如下:

    抓取 初始波形,可以看见是有很多乱序的杂波。(所以需要经过一定的处理)

提取完整两帧波形

放大分析得出转码波形的每一个数据bit都由一个周期的方波组成,频率为617.88Hz,定义抓取数据帧的每一个周期方波在占空比为25%(高电平时长为425us左右)时该bit=0;占空比为75%(高电平时长为1.63984ms左右)为bit=1
红外:(NEC、RC-5协议)后续更新。

二、程序解码功能实现

1.首先构造一个315/433MHz的解码结构体(方便后续的移植)

将所需要的形参及硬件接口层进行声明和定义:

#define IR_Pin RC1 //硬件接口
typedef struct IRDecode  //解码逻辑层
{unsigned char LeadCode1;    //引导码(用于记忆和学习部分)unsigned char LeadCode2;unsigned char LeadCode3;unsigned char LeadCode4;unsigned char IRCode1Control;  //控制码(处理后最终编码)unsigned char IRCode2Control;unsigned char IRCode3Control;unsigned char IRCode4Control;unsigned char IRCode1Data;     //传递码(源数据帧流)unsigned char IRCode2Data;unsigned char IRCode3Data;unsigned char IRCode4Data;unsigned char IRCode1;  //采集码(原始数据解码运用)unsigned char IRCode2;unsigned char IRCode3;unsigned char IRCode4;unsigned char IRWaveCount; //连续发波计时unsigned char IRHighLevelCount;unsigned char IRLowLevelCount;  unsigned char IRHighLevelFlag : 1;unsigned char IRLowLevelFlag : 1;unsigned char IRCodeLength  : 6;unsigned char IRLearnableFlag : 1;
}IRDecode;
//应用层
typedef struct IRWorkData{  //数据帧事件处理unsigned char IRKeyState1 :1;unsigned char IRKeyState2 :1;unsigned char IRKeyState3 :1;unsigned char IRKeyState4 :2;
//    unsigned char IRKey1Transfer :1;unsigned char IRKey2Transfer :1;unsigned char IRKey3Transfer :1;unsigned char IRKey4Transfer :1;unsigned char IRKey4LongPressFlag :1;unsigned short int IRLongKey4Count;
}IRWorkData;
IRDecode IRDriver;
IRWorkData IRKeyHandle;

2.解码逻辑函数编写

利用125us定时器对数据入口的高低电平进行计数,计算出高低电平的时间转化为bit缓存起来,后续输出完整数据帧进行下一步工作:

//可更改或优化其中计数的阈值应用在其他协议上
//码值获取(循环调用us级)
void ScanGetIRCode(void){if(IR_Pin){IRDriver.IRHighLevelFlag=1;if(IRDriver.IRHighLevelCount<=250) IRDriver.IRHighLevelCount++;//        //低电平时长超时滤波*16us=2ms,重新读值
//        if(IRDriver.IRHighLevelCount>=16){//            IRDriver.IRCodeLength=0;
//        } if(IRDriver.IRLowLevelFlag){  //上升沿IRDriver.IRLowLevelFlag=0;IRDriver.IRLowLevelCount=0;IRDriver.IRHighLevelCount=0;}}else{IRDriver.IRLowLevelFlag=1;if(IRDriver.IRHighLevelFlag){  //下降沿//高电平采样编码,下降沿处理if((IRDriver.IRHighLevelCount>1)&&(IRDriver.IRHighLevelCount<=11)){//码值1获取if(IRDriver.IRCodeLength<8){IRDriver.IRCode1=IRDriver.IRCode1>>1;if((IRDriver.IRHighLevelCount>=8)&&(IRDriver.IRHighLevelCount<=11)){IRDriver.IRCode1|=0x80;} else{IRDriver.IRCode1&=0x7F;}}//码值2获取else if(IRDriver.IRCodeLength<16){IRDriver.IRCode2=IRDriver.IRCode2>>1;if((IRDriver.IRHighLevelCount>=8)&&(IRDriver.IRHighLevelCount<=11)){IRDriver.IRCode2|=0x80;} else{IRDriver.IRCode2&=0x7F;}}//码值3获取else if(IRDriver.IRCodeLength<24){IRDriver.IRCode3=IRDriver.IRCode3>>1;if((IRDriver.IRHighLevelCount>=8)&&(IRDriver.IRHighLevelCount<=11)){IRDriver.IRCode3|=0x80;} else{IRDriver.IRCode3&=0x7F;}}//码值4获取else{IRDriver.IRCode4=IRDriver.IRCode4>>1;if((IRDriver.IRHighLevelCount>=8)&&(IRDriver.IRHighLevelCount<=11)){IRDriver.IRCode4|=0x80;} else{IRDriver.IRCode4&=0x7F;}}IRDriver.IRCodeLength++;//只处理32位数据if(IRDriver.IRCodeLength>=32){IRDriver.IRCodeLength=0;if((IRDriver.IRCode1==IRDriver.LeadCode1)){  //原始码IRDriver.IRCode1Data=IRDriver.IRCode1;IRDriver.IRCode2Data=IRDriver.IRCode2;IRDriver.IRCode3Data=IRDriver.IRCode3;IRDriver.IRCode4Data=IRDriver.IRCode4;IRDriver.IRWaveCount=0;  //数据帧结束计时}//接收数据帧清零IRDriver.IRCode1=0xFF;  //防止误判IRDriver.IRCode2=0;IRDriver.IRCode3=0;IRDriver.IRCode4=0;}}else{IRDriver.IRCodeLength=0;  //高电平杂波滤除}IRDriver.IRHighLevelFlag=0;IRDriver.IRLowLevelCount=0;IRDriver.IRHighLevelCount=0;            }if(IRDriver.IRLowLevelCount<=250) IRDriver.IRLowLevelCount++;//低电平时长超时滤波*16us=2ms,重新读值if(IRDriver.IRLowLevelCount>=12){IRDriver.IRCodeLength=0;}}
}

3.应用层书写(这一层是看应用场景需求编写)

通过对数据帧间隔信号的获取,可以处理数据帧为波包的一种标志位跟随,即有数据帧发送到MCU时缓存可见有数据,反之缓存中的数据清零。(以追求实际操作信号的同步):

//数据帧及连续发波处理(循环调用ms级)
void IRContinnuousWave(void){if(IRDriver.IRWaveCount<=254) IRDriver.IRWaveCount++;if(IRDriver.IRWaveCount>=36&&IRDriver.IRCode4Data!=0){ //72ms完整数据帧间隔时间//原始码数据帧清零IRDriver.IRCode1Data=0;IRDriver.IRCode2Data=0;IRDriver.IRCode3Data=0;IRDriver.IRCode4Data=0;}
}

总结

上述内容可以拓展到一些内似协议的解码和编码上面去,但是程序暂时并未进行面向对象的封装以及队列的优化,暴露了C/C++的编程功底不行,需要多练多学。

MCU裸机:一、315/433MHz/IR射频解码开发相关推荐

  1. 315 433MHZ无线遥控接收解码源程序 Keil源程序 含AD格式电路图

    315 433MHZ无线遥控接收解码源程序 Keil源程序 含AD格式电路图 YID:1620670090555205

  2. 315Mhz RF射频解码 串口输出方案(支持2262/1527多种编码方式)

    315Mhz RF射频解码 串口输出方案 一.简介 二.使用前准备 三.测试方法 四.测试现象 总结 原文链接:https://www.yourcee.com/newsinfo/2929023.htm ...

  3. 315/433无线模块解码

    315/433无线模块解码 1.超外差315/433无线模块 现在这种接收模块一般用PRO480R/SYN480R,外围再加一些简单的典型电路,性价比高,1块多就可以买到,可实现灯光.门禁.汽车.安防 ...

  4. MM32射频解码(产品检验,可靠稳定)

    MM32射频解码   本人曾负责开发风扇灯产品,故将射频解码的算法和程序进行总结,以便日后学习完善,也与大家分享.射频模块与MM32的通信协议为类似于EV1527的协议,每帧发送32位数据,前20位为 ...

  5. MCU裸机编程的状态机框架--第一部分

    MCU裸机编程的状态机框架--第一部分 1 状态机的概念 1.1 状态机的要素 1.2 状态迁移表 1.3 状态机思路实现一个时钟程序 1.4 状态机应用的注意事项 1.5 更复杂的状态机 2 单片机 ...

  6. 硬件编解码开发 linux,Intel平台硬件加速视频编解码开发

    视频编解码分为硬件加速以及非硬件加速.硬件加速是指通过显卡,FPGA等硬件进行视频编解码,由于硬件有专门优化,所以性能高,能耗低,非硬件加速编解码是指通过CPU进行视频编解码,性能就没那么高(虽然有相 ...

  7. Arduino - 315/433MHz RF无线收发模块

    貌似又是为了找个合适的库文件进行了N多周折. 元件如下图(左边为接收模块,右边为发送模块): 接线图如下: 以下为控制代码: [库文件:RCSwitch]点此下载 [注意点:接收模块数据线要接到Ard ...

  8. GD32官方资料学习体系(主要包括MCU选型、原理图PCB设计、软件开发入门及用户手册等)

    GD32快速上手指南 硬件开发 1.<选型手册> 2.<GD32xxx 系列硬件开发指南> 3.<GD32xxx Datasheet> 软件开发 1.<GD3 ...

  9. 基于 CNT 的射频辐射热计开发研究的 CPX-VF 低温探针台

    有时,我们喜欢强调我们的低温探针台如何用于有趣的研究.我们最新的应用重点是由阿克伦大学领导并发表在上个月的IEEE Transactions on Microwave Theory and Techn ...

  10. AMD 硬解码开发(四)之边摸索边编译samples

    下载资源 下载资源我们直接从官网页面进入链接就行了: 或者直接戳链接:https://github.com/GPUOpen-LibrariesAndSDKs/AMF 界面如图: 但我下了很久都没下载下 ...

最新文章

  1. C# 高性能 TCP 服务的多种实现方式
  2. java实现网站错别字搜索对的结果_Java问题:根据输入的关键词查询出搜索结果,再将搜索结果中的关键词用红色显示?这个怎么实现?...
  3. 喜笑等动作收集起来的扎金花GAME
  4. 跨浏览器兼容的HTML5视频音频播放器
  5. TIDB介绍 新数据库趋势
  6. element table多选和单选
  7. 计算机视觉标准数据集整理—PASCAL VOC数据集
  8. springmvc 基础内容
  9. WINDOWS用VS2010开发NPAPI插件步骤
  10. redis-LinkedList
  11. 江苏计算机专业接本,江苏农牧科技职业学院专接本或专转本的通知
  12. tensorflow出现问题Passing (type, 1) or 1type as a synonym of type is deprecated
  13. 基金购买和赎回线下业务
  14. linux还原防火墙设置,Linux防火墙设置教程
  15. 如何屏蔽迅雷9右侧广告首页
  16. 高速数据采集存储系统分类
  17. OpenFlow协议初探——OpenFLow中的流和流表
  18. mysql自定义变量比较大小_MySQL 自定义变量@ 常用案例
  19. 除了知网、百度,还有什么查阅资料的网站或软件吗?
  20. 手机移动视频监控系统方案

热门文章

  1. Yate架构分析概要
  2. C#生成与识别条形码、二维码示例 zxing、 barcodelib生成条形码 code128B等 无白边 自动宽度
  3. Chrome插件(UserScript)开发教程
  4. 微信内置浏览器提示【可在浏览器打开此网页下载文件】
  5. 大数据处理平台简介和总结
  6. 获取文件夹下所有tif图片,并将16位图转为8位图
  7. Nginx(九):Nginx网页压缩技术
  8. 数字信号处理概览与框图
  9. 利用R语言进行具有周期性的时间序列分析
  10. 胆战心惊形容什么_胆战心惊的近义词