经过1个多月的奋斗,白天在老板那里打工,晚上在家里继续打工,终于在上周把无线通信模块给搞定了。也算是给我的SmartEXP计划中添加了一个逗号。为了让通信距离达到足够的远(暂不考虑GSM通信),模块采用SI4463无线通信IC,这样通信距离轻松就达到了500米(空旷地带),若是硬件上面再进一步优化,应该可以达到2K米。为了开发起来简单快速,单片机采用的是STC家的STC12LE5A60S2,虽然贵了点,但以前写过相关的驱动程序,觉得时间上有优势,也就是时间的收益远远大于成本控制效益。整个开发分为3个阶段,第一阶段电路硬件设计:方案选择、原理图设计、元器件选型、PCB绘制、硬件焊接、硬件调试;第二阶段软件底层设计:软件环境搭建、底层驱动代码编写;第三阶段功能软件设计:无线通信协议编写、功能软件编写好了,废话一大堆,现在大体上图简释图一:电路设计原理图,帖子底部可以下载原理图+PCB+源代码
图二PCB截图
图三:PCB3D截图
图四:PCB3D截图
图五:实物图背面
图六:实物图正面
图七:工作的照片
图八:工作的照片
图九:串口监视截图
软件部分的代码截图,模块编程化,代码更易阅读,移植,升级,维护等
代码注释很详细,方便阅读,代码层次分明
下面是软件项目的记事本,包含通信协议的解释(KEIL里面阅读更方便)
- /*******************************************************************************
- * @项目名称: Wireless
- * @作者: XXX
- * [url=u.php?uid=1521734]@版本[/url] :
- * @日期: 2015.11.05
- * @简介: XXXXXXXXXXXXX
- ******************************************************************************
- * @说明:
- *
- *****************************************************************************/
- 更新记录:
- 2015.11.05 V0.1.01 XXX 1.根据bearoomcontorler修改
- 2.根据网上的51驱动si4463源码修改
- 3.成功读取SPI,其他未测试
- 2015.11.08 V0.1.02 XXX 1.添加发送测试代码
- 2.BUG,无法获取发送之后的中断申请
- 2015.11.09 V0.1.03 XXX 1.移植已经调试好的代码
- 2.解决之前发现的BUG
- 3.尝试增加通信协议代码
- 2015.11.30 V0.1.04 XXX 1.完善通信协议代码
- 2015.12.01 V0.1.04 XXX 1.完善通信协议代码
- ` 2.存在rf_addr自动改变的BUG
- 2015.12.02 V0.1.05 XXX 1.解决rf_addr自动改变的BUG
- 通信数据:10字节数据;
- 0:地址(主机FF,中继FE,子机00~0F);
- 1:命令(详见列表)
- 2~8:数据
- 9:CRC,将前面的9字节数据相加,得出的8进制溢出数。
- 通信方式:默认全部都为从机,主机具有查询优先权,中继被呼叫需要被动向子机发出查询命令;子机具有主动向中继提交状态报告,中继收到命令后被动向主机发出报告。
- 群体数量:主机只有一个,中继站可以大量扩展,目前只有一个,子机数量最多6个,实际上可以继续扩展
- 通信协议:
- 。。 主机发出的(主机地址FF) 主机发出的的数据 主机收到的数据 用途
- 0xF0 中继握手命令 无有效数据 无有效数据 主机启动的时候联网获取数据
- 0xF1 查询子机列表 无有效数据 6字节数据,分别对应子机地址 获取网络内子机数量与地址
- 0xF2 查询所有电量 无有效数据 6字节子机电量,第7字节中继电量(1-9) 电量监控,需提前获取网络内列表
- 0xF3 查询所有状态 无有效数据 6字节数据,分别对应子机状态 主动获取状态,需提前获取网络列表
-
- 。。 中继发从机(中继地址FE) 中继发出的的数据 中继收到的数据
- 0xE0 子机握手命令 无有效数据 无有效数据 获取主机的查询列表命令后,开始扫描地址0-F,进行网络更新
- 0xE1 查询子机电量 无有效数据 1字节数据,子机电量(1-9) 获取主机的查询电量命令后,开始扫描地址0-F,进行电量更新
-
- 。。 中继发主机(中继地址FE) 中继发出的的数据 中继收到的数据
- 0xEF 上报状态变化 6字节数据,分别对应子机状态 无有效数据 因为子机有状态变化,需要同步到主机
- 0xEE 网络注册变化 6字节数据,分别对应子机地址 无有效数据 因为子机有网络注册,需要同步到主机
- 0xED 上传电量变化 6字节子机电量,第7字节中继电量(1-9) 无有效数据 因为子机有电量变化,需要同步到主机,0代表关机或无子机
-
- 。。 从机发中继 从机发出的的数据 从机收到的数据
- 0x01 上报状态变化 1字节数据 无有效数据 因为有状态变化,需要及时报告到中继
- 0x02 网络注册 无有效数据 1字节数据(01成功,00地址被占用) 子机开机的时候都需要进行网络注册,确保网络通畅和地址可用
- 0x03 上传电量 1字节数据(1低电警告,0关机) 无有效数据 在电量为1时需要上报低电量报警,电量为0时需要上报关机
-
- RAM分布
- STC12c5a60s2内部一共有1280字节RAM空间,可分为“内部RAM”、“内部扩展RAM”,另外STC12c5a60s2还可以外部扩展64kRAM
- 内部RAM分布(256字节)
- 低128字节RAM(与传统8051兼容),可以直接寻址(data)也可以间接寻址(idata)
- 高128字节RAM(intel)只能间接寻址(idata)
- 内部扩展RAM(1024字节)
- 访问内部扩展RAM的方法和传统8051访问访问外部扩展RAM方法相同,但是不影响外部IO口。
- 全部1024字节RAM(与传统8051外部扩展RAM类似),可以以外部数据访问(xdata)
- 内部扩展RAM是否可以访问受辅助寄存器AUXR中的EXTRAM控制:(系统复位默认EXTRAM=0)
- EXTRAM=0允许
- EXTRAM=1不允许
觉得不错的可以打赏MB [ 此帖被都忘掉了在2015-12-13 00:44重新编辑 ]