>

自己动手DIY一台24G简易频谱仪

- 编辑:宜春市空间模块有限公司 -

自己动手DIY一台24G简易频谱仪

  作为一名电子爱好者,自己动手制作一些简单的硬件小设备还是非常有趣的。我之前也是发布了《制作HackCube中的坎坎坷坷》。这次带来的是一个简易的频谱仪。

  2. 为了看一下附件2.4G频段的信号,尤其是一些使用2.4G频段的航模爱好者,他们使用的遥控器是2.4G的,4117模块如果在这个频段范围内有太多的信号,可能会造成一些不可预料的影响。

  3. 当然了为了制作这个的最直接的原因是手上有这些模块并且最近在研究频谱仪,频谱仪的价钱还是相当的贵的。制作的过程中,学习一些设备的通信的原理。比如这个里面就有IIC和SPI两种通信协议。

  1. Arduino uno开发板一块(我是用的是uno,当然了你也可以使用Nano等一些其他的开发板)

  2. IIC接口的OLED显示屏一块好像是128*64的。淘宝上面有一堆,价钱也不是很贵。我选的是蓝色的,当然还有上半部分是黄色下半部分是蓝色的,你想要什么样的你自己做决定。当然了,你也可以尝试在一些更大的显示设备上面显示(TFT彩屏)

  3. 射频模块nRF24L01:这个小东西网上也有很多型号的,什么邮票孔的啦,焊好排针的啦。这个也是随你的。

  说完基本的硬件设备接下来就是软件问题了。刚刚开始的时候我是准备使用STM32F103制作这个小东西的。但是我发现有点麻烦,因为是寄存器入手32的,配置寄存器实在麻烦,我就想着能不能找一些已经完善的库来开发。我这个时候脑子一热,Arduino里面的集成库那个叫多啊。我就去网上查找了一些这方面的资料。结果不找不知道一找吓一跳。网上已经有大神做出来了。那我就算啦,直接跟着他们做吧。我看了网上有不少版本。

  不过都是基于Arduino的,估计是Arduino里面有集成好的库文件吧。

  我太难了,我把下载好的项目文件发给别人,他们还有人问我为什么下载失败。我过去一看,真的是各种问题。

  正常情况下你直接打开IDE文件的时候IDE会自动加载需要的库文件,但是不排除少数情况下,她找不到库文件。

  第三,系统缺少库文件,对于我经常使用arduino来说电脑里面很多的库文件都是有的,如果说你在编译的时候出现了编译失败,并且还告诉你缺少了什么库文件,那你就下载相应的库文件吧。我这里还是演示一下吧

  说完了一些错之后我就简单的说一下IIC和SPI的通信协议吧,至于我为什么用IIC的OLED,为什么使用SPI的射频模块。第一点我在网上购买射频模块的时候出来的都是SPI的,所以我也没得选择,不过OLED倒是有很多种,4117模块因为IIC的使用的线少,所以我就选择了使用IIC。最主要的是别人开源的里面就使用了IIC的,我不想改代码啦。

  说一下IIC:相信很多小伙伴第一次使用IIC的时候应该是单片机开发板上面的EEPROM芯片。当时我学习51单片机的时候,STC89C51没有IIC的专用引脚,只能使用引脚模拟IIC啦。不过这样我感觉对IIC的协议的学习还是非常有帮助的。

  以启动信号START来掌管总线,以停止信号STOP来释放总线;当SCL为高时,SDA下跳为起始信号,上跳为停止信号。

  启动信号START后紧接着发送一个地址字节,其中7位为被控器件的地址码,4117模块一位为读/写控制位R/W,R. /W位为0表示由主控向被控器件写数据,R/W为1表示由主控向被控器件读数据;

  当被控器件检测到收到的地址与自己的地址相同时,在第9个时钟期间反馈应答信号;

  1. 主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线. 发送一个地址字节(包括7位地址码和一位R/W);

  3. 当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK);

  5. 被控器收到数据字节后发送一个ACK表示继续传送数据,发送NACK表示传送数据结束;

  6. 主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线;

  3. 当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK);

  5. 主控收到数据后发送ACK表示继续传送数据,发送NACK表示传送数据结束;

  6. 主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线;

  SDA和SCL两条信号线都处于高电平,即总线上所有的器件都释放总线,两条信号线各自的上拉电阻把电平拉高;

  1. 含CPU的智能器件,地址由软件初始化时定义,但不能与其它的器件有冲突;

  为什么要说这个协议呢,目前IIC的通信相对与其他一些高速的通信协议来说还是比较慢的,我看到过有人通过分析IIC最后逆向破解了一个小设备。大家如果对这方面的资料感兴趣的话,可以自己去找资料看看。

  不过在我们这个小项目种就会有一个问题,那就是你买回来的OLED的地址不一样,导致你烧入程序之后不能正常工作。

  很多小伙伴问我他的显示屏为什么不显示,我查来查去最后发现他买的IIC的地址和我的不一样,只要在OLED库文件里面修改IIC的地址就好了。

  IIC的通信我是玩过了,大概也能根据时序图写一个程序出来,但是SPI还是没有尝试过。在些这篇文章的时候我还不是很了解,所以我这里也不说什么了,怕误导大家。

  我自己的小设备借给别人玩了。所以也没什么照片放上来,不过我想抽空画一个PCB。做一个简易版。比较就算使用arduino Nano还是有点臃肿,如果有PCB的话,就可以做的非常的小巧。如果有志同道合的人愿意一起搞这些东西的话,我十分开心。

  声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。

本文由技术中心发布,转载请注明来源:自己动手DIY一台24G简易频谱仪