3032|5

1193

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

丧心病狂第一、二弹续(验证代码篇) [复制链接]

在这里将第一、第二弹的BoosterPack放在一起来测试。使用这部分代码验证需要用到以下物料:
MSP430系列EXP4300-G2 launchpad 2块,其中MCU型号为MSP430G2553,发送端需要焊接32768Hz晶振
Nokia5110BoosterPack 模块1件
NRF24L01 BoosterPack 模块2件

代码见附件,在CCSv6中验证通过,跳线电阻需要按照注释中说明修改。

Transfer.zip (5.53 KB, 下载次数: 37) Receiver.zip (9.04 KB, 下载次数: 35)

程序文件中关于Nokia5110的部分代码为直接从本论坛帖子中下载引用,非本人原创,特此声明。

最新回复

前排学习~~  详情 回复 发表于 2015-10-20 22:48
 
点赞 关注(2)

回复
举报

1193

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
本帖最后由 qiushenghua 于 2015-10-31 20:21 编辑

说说编写这个测试程序的一些想法吧

这个程序的目的是测试验证NRF24L01的通信,那么势必存在一发一收。

既然是做在BoosterPack里,并进行了管脚兼容,那么就有必要使用硬件SPI来完成无线通信。虽然G2系列MCU的USI模块里也有硬件SPI,但是仔细校对之后发现在USI的SPI模块中,对管脚的定义并非MISO和MOSI,而是SDI和SDO,也就是管脚是单向的,不能依据主从模式来更换管脚的方向。更悲催的事情是,经过比较发现,作为从机的时候,USI中管脚定义与BoosterPack是一致的,但是作为主机的时候,USI中的SPI管脚定义恰好与BoosterPack反了过来。也就意味着无法使用MSP430G2452或者更低端的MCU,最不济都得用MSP430G2553。

MCU敲定了,那么考虑一下工作模式。这个测试有两个目的,一个是验证发送接收的数据是否正确,第二个是测试一下它究竟能发多远,发送是否即时的。

基于NRF24L01最常见的工作模式是自动重发+自动应答,但是考虑到我们的目的是验证性能,并不是保证通信质量,那么类似于UDP的只发送不接收的模式可能会更适合我们。如果开启自动重发模式,那么我们不容易弄清楚异常是出现在何处,丢包率究竟有多严重等等。因为我们有液晶显示屏,那么接收到数据显示到液晶上,如果有跳数,就说明丢包了,这样便于测试通信的极限条件,例如最大通信距离等。

那么还有什么外设可以利用呢?基于不增加外设的想法,最大限度利用好板子上的外设就好了,最常见的就是按键和LED了。G2的Launchpad上有两个按键,一个复位按键一个功能按键。那么如何设计按键来验证通信呢?比较容易想到的是,在发送端上检测按键,然后改变发送的数据,从而证明发送的数据发生了即时的改变。如果连续发同一个数字,那么无法验证这个数字究竟是什么时候发出的,所以最终决定的设定是:
发送端每隔0.5s发送一个数字到空中,这个数字每0.5s自增一,以便验证通信是否正常。一旦检测到发送端的功能按键按下,那么将数字自增1000。系统复位的时候将这个数字归零,用于验证复位按键的功能。

接收端接收到数字之后,直接将其显示到Nokia5110液晶上。由于Nokia5110存在个体差异,每块液晶正常显示需要的VOP电压均不相同,于是在接收端对按键功能做了类似的设定:按下左侧功能按键的时候逐个等级修改液晶显示亮度,这样最终的代码能以一种最简单方式直接利用。

基本功能大致就是这样,具体实现的时候做了些许改动,发送数据不再是一个简单的数字,而是一个字符串,将数字填充在尾部的两个字节中。数字采用无符号整型,也就是16位,有效范围从0到65535。

 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

板凳
 
本帖最后由 qiushenghua 于 2015-10-13 20:53 编辑

上一层介绍的是功能设计思路,这一楼就拿来说说程序实现的思路吧。


具体的程序还得参看代码,验证通过之后额外花了不少时间来补充注释,程序文件可以直接作为MSP430的学习教程使用。

简单说一下,发送端焊接了32768晶振,使用TimerA1作为定时器,每半秒发送一帧数据。

于是ACLK是使用LF晶振,8分频得到32768/8=4096Hz。TimerA1再对ACLK8分频,得到4096/8=512Hz。
TACCR0设定为256-1=255,这样中断频率就是512/256=2Hz,满足每0.5s产生一个中断的需求。

使用ACLK作为定时之后,发送端可以放心的进入LPM3模式,以最大限度降低功耗,当TimerA1中断到来之时再唤醒MCU发送一帧数据。

关于用不用SPI硬件中断的问题,也经过再三斟酌,NRF24L01允许的SPI最高通信速率是10M,MCU的时钟频率设定在DCO16MHz,那么只需要对时钟2分频即可作为SPI时钟源。2个时钟周期就能发送一个比特的数据,如果在SPI发送期间进入低功耗模式,那么进出低功耗模式的机器周期消耗将不可忽略,甚至会大大拖慢SPI的通信速率。因此,决定在SPI发送期间不进入LPM模式,直接采用查询法检测SPI数据是否发送完毕。这样的代码看起来效率不高,但实际上SPI通信速率很快,发送一个字节的数据仅需要16个机器周期,也就是大约1个μs。MCU从低功耗模式唤醒也需要大约1μs,这还不算中断现场保护和现场还原的时间。

接收端由于无线部分需要一直待机,因此没有在低功耗方面做太多的考虑,仅仅是将MCU置于LPM模式,等待IRQ中断来唤醒。

最后贴一下两个模块的跳线电阻焊接方式(两个无线模块使用相同的跳线):




 
 
 

回复

3415

帖子

0

TA的资源

纯净的硅(高级)

4
 
赶上直播了
坐等干货

点评

干货谈不上,就是觉得不能只发一个程序包,还得把编写思路说一说,这样别人才能理解程序。 特别是这个BoosterPack以及程序的受众是MSP430的初学者,那么示范程序就更应该写得详细才是。  详情 回复 发表于 2015-10-13 20:57
 
个人签名

So TM what......?

 

 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

5
 
ljj3166 发表于 2015-10-10 23:31
赶上直播了
坐等干货

干货谈不上,就是觉得不能只发一个程序包,还得把编写思路说一说,这样别人才能理解程序。
特别是这个BoosterPack以及程序的受众是MSP430的初学者,那么示范程序就更应该写得详细才是。
 
 
 

回复

1451

帖子

18

TA的资源

纯净的硅(高级)

6
 
前排学习~~
 
个人签名http://weibo.com/u/1391449055
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖探索 | 和村田一起,深挖 GNSS 开发!
活动时间:即日起-5月11日
活动奖励:智能手环、螺丝刀套装、双肩包

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 5

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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