超小型的无线收发模块LT8920配置思路+单片机发射接收程序

发布者:pengbinyyy最新更新时间:2020-02-15 来源: 51hei关键字:超小型  无线收发模块  LT8920  单片机  发射接收 手机看文章 扫描二维码
随时随地手机看文章

近来一直在研究无线项目,其中的重点就是无线收发芯片,可以正常的发送接收数据了,无线项目的大难题也就解决了。于是开始收集各种无线收发芯片的资料,例如NRF24L01,CC1101,一些LoRa模块还有一些超外差无线模块等等,但是他们有着相同的问题,一是例如NRF24L01和CC1101之类的使用QFN封装的模块在自制上存在焊接困难度的问题,再就是这些模块普遍都有着过于繁杂的外围电路(一些电感电容),无法将其做到很小的体积。于是在查阅了很多资料后,有一款小巧的无线模块进入我的眼帘,就是LT8920。


先不谈他的各项参数指标相对其他模块有什么优劣,光是这个采用了SSOP16的引脚封装就使得其焊接容易了许多。并且其简洁的外围电路着实易于制作,只需要一个晶振一个电容即可,这确实在焊接难度和外围电路成本上秒杀其他芯片。于是我开始对这个芯片进行了学习,希望可以使用它做出一些项目。调试起来还是废了一番周折,因为厂家给出的数据手册并不清楚,所以很多东西都是摸着石头过河,在前前后后调试了大概3天左右,终于可以正常的收发数据,下面我就分享一些学习的过程。
                  
拿到一个新的芯片,想要了解他就一定要去下载数据手册,一般在网上都可以找到,有中文的有英文的,遇到英文的数据手册就需要具备一定的英语阅读能力才可以理解清楚意思。这个芯片的数据手册我也会放到文章的最后,大家可以下载来学习。


1.基本介绍
这款芯片使用的是2.4G频段进行通信,可以设置通信频率,发射速率以及发射功率,电源使用2.2V到3.6V的电压都可以,发射时电流在20毫安左右,接受电流在18毫安左右,可以说比较省电的一款芯片。芯片内置倍频电路,但是没有内置晶振,所以需要外接一颗12Mhz的晶振,晶振的补偿电容芯片已经内置了,所以无需外接。对于芯片与MCU的通信方面,使用的是SPI总线协议,最高支持10Mhz的速度。为了更好的兼容一些低速的MCU,这款芯片内置FIFO缓存器。
如下图给出了典型应用电路:
 



2.通信代码编写
看完了这些参数,我对这款芯片也有了一些了解,下面要做的就是编写程序进行通信了。我使用的是STC8单片机来对这个芯片进行控制,由于模块采用的是4线的SPI总线通信,尽管一些STC的单片机上带有硬件的SPI总线接口,但是为了程序的可移植性,整个程序使用软件模拟SPI总线协议来进行与LT8920的通信。
既然是使用SPI通信,那么肯定数据手册里面就有一些关于通信时序的说明,我在数据手册里面找到如下:
 



可以看到芯片是在时钟的下降沿读取MOSI线上的数据和在MISO线上发送数据,并且先发送高位,再发送低位。并且可以看出一次需要读取2字节(16位)的数据,看完这个时序图,我就很容易的写出了SPI接口的写入函数。
 



对于从LT8920上读取寄存器数据,需要注意的一点是每次SPI通信的地址最高位是读写标志位,写入的时候是0,读取的时候是1,所以在SPI读取函数中,所有的地址都需要加0x80,如图:
 



写完这两个函数之后,寄存器的配置就可以使用这两个函数了,但是我注意到手册中说到,对于FIFO寄存器(就是存储发射和接受数据的寄存器),可以采用单字节读取或者写入,那么我就又写了两个函数,一次读取和写入分别都是单字节的,如图:
 



写完这两个函数,基本的SPI通信就没问题了,下面我就开始对LT8920的寄存器进行逐一的了解与设置,这耗费了较多的时间。


3.寄存器设置与初始化
对于在LT8920中的寄存器,其地址和其寄存器的编号相同,这就给了编写代码时的便利性,需要操作那个寄存器只需要知道其的编号即可,在LT8920中,一共有近50多个寄存器,对这些寄存器的逐个配置,就可以使用LT8920来收发数据了。但是遗憾的是,手册中并没有逐个逐个说明寄存器的作用,而是只说明了几个重要的寄存器的作用以及配置,但是在手册最后给出了所有寄存器的推荐配置值,于是我参考了手册最后的推荐值以及一些网络上的调试经验,给出了每个寄存器的初值,如图:
 



可以看出,上电之后先给LT8920进行复位,然后延时5ms,等待晶振输出频率稳定之后就可以开始初始化端口了,我默认使用的都是准双向口,所以将端口设置为1的时候也是作为输入模式。下面是LT8920的初始化时序:
 



4.接受数据程序
初始化完毕之后就可以开始发送接收数据了,这个芯片有一个外置引脚PKT来指示芯片的FIFO缓存中是否有数据,当有数据的时候,整个外置引脚会被置1,没有的时候则会被置0。所以在编写接受数据的程序时,我只需要不停地判断这个引脚是不是高电平,如果是,那么就进入处理函数,不是就不进入。
对于从LT8920的FIFO中读取接受到的数据,其第一字节表示的是整个数据的长度,单位是字节,所以我在从LT8920的FIFO中读取数据时,先读取一个字节,那么这个字节表示的就是整个数据的长度。具体实现的程序如下:
 



5.发射数据程序
Lt8920的发射其实也比较简单,向FIFO中写入数据,然后打开发射器等待发射完成(PKT置1),之后读取自动应答寄存器,如果收到应答的话,就代表一次通信成功,实现的代码如下:
 

                          
发射程序和接受程序都介绍完毕,如果您是使用的其他单片机,如stm32或者arduino,应该整体的配置思路我都讲解的比较清晰,也比较容易就调试好这款模块。

关键字:超小型  无线收发模块  LT8920  单片机  发射接收 引用地址:超小型的无线收发模块LT8920配置思路+单片机发射接收程序

上一篇:51单片机GPS+sim800c GSM定位短信LCD1602液晶显示程序
下一篇:51单片机18b20温度及按键可调上下限报警源程序

推荐阅读最新更新时间:2024-11-12 15:31

STM8单片机学习总结初步02
之前做的PCB板回来前,需构建“驱动代码”的“架构”问题,相对简单,按流程图整理出的文件截图共2页,具体如下: 第1页: 第2页: --------------------------华丽分割线 1------------------------- 编程使用的“版本”为“IAR for STM8 1401”,使用还不错,比较顺手,由于已经完成过部分驱动,并将所有头文件封装进 includes.h 中,包含的头文件如下: #ifndef __INCLUDES_H_FOR_STM8 #define __INCLUDES_H_FOR_STM8 #include ultra_maps.h #include ultra_edi
[单片机]
STM8<font color='red'>单片机</font>学习总结初步02
51单片机IO口模拟串口通讯5
/*************************************************************** *在单片机上模拟了一个串口,使用P2.1作为发送端 *把单片机中存放的数据通过P2.1作为串口TXD发送出去 *本程序来源于《单片机IO口模拟串口程序(发送+接收)》 *硬件环境:11.0592MHz, TXD P2.1 ***************************************************************/ #include reg51.h #include stdio.h #include string.h typedef unsigned char
[单片机]
单片机晶振电路原理
  晶振一般采用三端式(考毕兹) 交流等效振荡电路;实际的晶振交流等效电路中,其中Cv是用来调节振荡频率,一般用变容二极管加上不同的反偏电压来实现,这也是压控作用的机理;把晶体的等效电路代替晶体后。其中Co,C1,L1,RR是晶体的等效电路。   分析整个振荡槽路可知,利用Cv来改变频率是有限的:决定振荡频率的整个槽路C=Cbe,Cce,Cv三个串联后和Co并联再和C1串联。可以看出:C1越小,Co越大,Cv变化时对整个槽路的作用就越小。因而能 压控 的频率范围也越小。实际上,由于C1很小(1E-15量级),Co不能忽略(1E-12量级,几PF)。所以,Cv变大时,降低槽路频率的作用越来越小,Cv变小时,升高槽路频率的作用却越来越
[单片机]
单片机串口通讯程序
使用串行中断,接收数据并显示 ;===========预定义=================== LED0 EQU 40H ;预定义数码管 LED1 EQU 41H ;预定义数码管 LED2 EQU 42H ;预定义数码管 LED3 EQU 43H ;预定义数码管 LED4 EQU 44H ;预定义数码管 LED5 EQU 45H ;预定义数码管 LED6 EQU 46H ;预定义数码管 LED7 EQU 47H ;预定义数码管 SDA BIT P0.1 ; 定义数据线引脚定义 SCL BIT P0.0 ; 定义时钟线引脚定义 ;--------------------------- ORG 0000H ;主程序入口 AJMP
[单片机]
MCU是怎样输出PWM波形的
在电力电子控制中,PWM几乎是无处不在的,不论是AC/DC,DC/AC,还是DC/DC,都涉及到PWM,PWM具体是什么可以自行百度,网上资料非常多,这里就不再赘述。在电力电子变换里面,PWM波形生成有两种方式,模拟和数字,专用的模拟IC不在此文探讨范围之内,本文主要介绍怎样用MCU来生成PWM。 在所有的MCU里,都会有Timer定时器,PWM就是通过这个外设生成的,基本的原理可以通过下图(以STM32F407的寄存器为例)来解释。 计数器TIM_CNT对输入时钟进行计数,比如输入时钟是1MHz(50%占空比方波),对时钟的每一个上升沿(或者下降沿)从数字0开始计数,计数到TIM_ARR=999,一共计数1000个,经历的时
[单片机]
<font color='red'>MCU</font>是怎样输出PWM波形的
LCD2004AVR单片机驱动源程序
/*======================================================= 20x4字符液晶主程序,编译软件(I CC AVR_6.31) CPU内部 晶振 8M 数据线B0~B7接PORTB, E=D7 RW=D6 RS=D5 ========================================================= 接线图如下: _______________ ______________ | --1|GND | | --2|+5V | | --3|V0 |
[单片机]
51单片机(AT89C52)外部中断程序
#include reg52.h #define uchar unsigned char #define uint unsigned int #define DELAY 1000 void delay(uint z) //1ms { uint x,y; for(x=z;x 0;x--) for(y=111;y 0;y--); } void main() { uchar i,dt; EA=1; //开总中断 EX1=1; //开外部中断1 // IT1=0; //设置外部中断1为低电平触发 IT1=1; //设置外部中断1为下降沿触发 while(1)
[单片机]
51<font color='red'>单片机</font>(AT89C52)外部中断程序
超低功耗单片机MSP430F413实现的智能遥控器
目前市场上常见的无线遥控器多数为四键和十二键,主要用于汽车防盗系统、家庭防盗系统及遥控玩具等方面,这些应用简单、实用、成本低。但对于一些工程中需要距离在100米以上,控制或设定一些数据时,并要求一个遥控器对多于12个甚至上百个设备时,上述遥控器对操作人员就不方便,而且系统性能不够稳定。鉴于上述情况我们便提出在此基础上,采用单片机编写地址,通过操作键设置,液晶显示遥控器的输出。同时对耗电量、多个控制的设定、便于携带、操作方便及性能稳定等的严格要求,于是便设计开发出一种新型智能遥控器。该型遥控器以TI公司的超低功耗单片机MSP430F413为微处理器,配有低功耗3位液晶显示器EDS812A,还有传输比很高的光,整个系统采用锂电池和高能
[单片机]
超低功耗<font color='red'>单片机</font>MSP430F413实现的智能遥控器
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved