yayahello 发表于 2010-9-7 17:06:51

用nRF24L01无线模块接收10个不同频率的数据,老是出现数据丢失

我想用一个nRF24L01无线模块作为接收,另外10个nRF24L01无线模块作为发射,这10个模块各有一个固定的频率,且各不相同,这10个无顺序的发射数据,作为接收的那个模块的程序主函数里循环的设置成这10个频率接收,用外部中断来接收数据,这时问题就出现了,外部来中断时接收的那个频率可能与发射数据来的频率不同,此时这个数据就接收不到了,然后我将nRF24L01无线模块设置了自动应答模式,比原来好点了,可是要是达到了自动发射次数的最大值了数据还是没有接收到呢?
   我想请教一下高手们nRF24L01无线模块用什么方法接收数据时,保证数据部丢失呢??望高手指个方法啊

sfes 发表于 2010-9-7 17:26:58

一主多从 轮

anyhu 发表于 2010-9-7 17:27:37

建议你还是好好看看nRF24L01的Datasheet,里面有关于点对多点的通信。我是这么想,可以在10个发射模块中为接收模块配置一个地址,这个地址指向接收模块,而处于中心点的接收模块则储存好所有10个模块的地址,当发射模块发送数据时,数据包里带上目的接收模块的地址,当接收模块识别到无线数据的时候,先判断数据包里找不找得到预先储存的地址,如果找不到,就不处理。没有必要为10个模块设置不同的频率,你这么干太复杂了。

yayahello 发表于 2010-9-8 08:24:05

回复【2楼】anyhu
-----------------------------------------------------------------------

很感谢你的回答,但是我这10个发射模块可能同时发送数据,这个时候会出现同频干扰的问题哦,一个接收模块同时接收10个相同频率的数据时那不就乱了嘛,我用这个模块就想想解决同频干扰的问题,因为这10个发射模块可能同时发射数据

anyhu 发表于 2010-9-8 09:06:12

现在真正能解决同频干扰的只有类似于蓝牙的那种跳频机制,看似简单实现起来难度还有有的。点对多点无线通信通常没有真正意义上的并发,都会有先有后,哪怕之间间隔是ms级的,nRF24L01本身的带宽就有2Mbps,你可以算一下它每ms可以送走多少数据,甚至你可以精确到us级,这样的速度处理起来,存在同频干扰的几率是很低的,除非你发完又发不停重复。算完之后你会明白由于并发产生同频干扰的概率有多低。更何况你这10独立的发射模块想要特意去做到并发,做到这个也不太容易吧。一切问题在于亲自尝试,没试过你怎么知道会不会有同频干扰或者别的问题,你都还没有做出东西来,空想有何意义,是不是?

first_blood 发表于 2010-9-8 09:20:28

弄10个接收就可以了
或者分时传输,比如统一分配一个时间起点,0-100ms第1个发,100-200,第二个发,

yayahello 发表于 2010-9-8 10:35:03

回复【4楼】anyhu
--------------------------------------------------------------------
但是 我现在就是想用10个不同的频率来发射,你有好的方法解决我这个丢失数据的问题吗

34071417 发表于 2010-9-8 11:20:09

建议你使用无应答模式下,10个从机都统一接收地址,对从机的识别放到数据段里面去,其实跟modbus协议的从机地址差不多

anyhu 发表于 2010-9-8 15:40:13

回复【6楼】yayahello
-----------------------------------------------------------------------

也是可以实现的。可以这么干:10个发送模块要具备接收功能,全都初始化为一个频率,没有发射任务时让它们全部休眠,当其中一个发射模块出现发射任务时,首先使用默认的频率,通知其他九个模块,让它们屏蔽掉发射任务,然后这个模块才进入预先设定的发射频率,等到数据发送完成后,再跳回默认频率,通知其他9个模块解除屏蔽。如果仅仅是简单的错开频率想完全避免同频干扰,并且避开收发一体程序的复杂性,那你的想法是行不通的。或者你想得根本就太简单了。

yayahello 发表于 2010-9-8 17:19:38

回复【8楼】anyhu
-----------------------------------------------------------------------

恩 是啊 我也越来越发现我想的这条路走着费劲了,真的很感谢你的帮助!
   唉 我的问题是越来越多啦
   发射接收数据都很正常,可是这个其中的状态寄存器STATUS一直没闹明白,我把这个寄存器里的数据读出来后通过串口发送到串口调试助手里,都是00,这个时候我很郁闷,就把主函数里的程序都屏蔽了,只留了3句话,把0x70写入STATUS,然后读出来,然后发送到电脑里,居然是F8,而不是70,哪位高手指点一下啊???这是为什么啊

1a2b3c 发表于 2010-9-9 14:52:37

你这个10个发射端异频非协调随即发射,一个接收端想要接收所有的发射端数据,这个是不可能的!
实际上如果你可能使用TDMA就应该可以了,这样的话就是一个频道也行的 ,反正是分时。实际上8楼差不多就是这个意思,反正就是保证了同一时刻只有一个发射工作,这个只是解决了信息源本身不会冲突的问题(频率冲突或者接收端只能同时接受一个信息源顾此失彼的冲突),那么怎么协调(同步)又成了问题,他是使用了另外10个接收机作为抑制接收,那这样的话实际上还不如在接收端直接就用10个接收机一对一了,处理起来还更简单一些,是吧

yayahello 发表于 2010-9-9 16:40:56

回复【10楼】1a2b3c
-----------------------------------------------------------------------

谢谢高手的指点,就是啊,是我开始的时候想的太不全面了,看来我要换换思路了,真的很感谢各位的帮助!

biansf2001 发表于 2010-9-9 16:53:05

不丢才怪。就算一对一,你没用协议也是丢的一塌糊涂。

yayahello 发表于 2010-9-10 16:01:20

回复【12楼】biansf2001 花溅泪
-----------------------------------------------------------------------
哦?是嘛?我的一对一的也没丢数据啊

yulri 发表于 2010-9-24 21:04:58

mark啊!!!

zhuyi25762 发表于 2010-10-18 23:59:18

mark下,我用905 数据量大的时候也丢 不得不用协议解决

jewelhs 发表于 2011-5-15 20:36:15

楼主,我最近也在调试多对一的通信,也是很头疼,您最后是怎么实现的呢?能分享下您的经验吗?或者把您的程序让我看下。。。

ye_song 发表于 2011-5-15 20:46:33

mark

danceman_uk 发表于 2011-5-16 11:57:44

mark!

zjzssxs 发表于 2012-4-1 19:31:55

楼主你好,麻烦问一下,24L01这十个频率是怎么设置的?方便把程序给我看看么

jetli 发表于 2012-4-1 21:18:21

必须有协议区别id不同,

一尽然1 发表于 2012-4-1 22:07:28

大侠。。能给我你写的24L10一对一的程序。。我正在学这东西。。买了这模块可是一直调不出来。。求解

一尽然1 发表于 2012-4-3 09:12:57

邮箱xie546443279@163.com

zjzssxs 发表于 2012-4-3 18:49:28

楼主你好,我现在刚把24L10调成多对一的,但是只能是一个频段内不同通道,麻烦问一下,这个频段怎么设置?我想实现不用频段的一对多通信
页: [1]
查看完整版本: 用nRF24L01无线模块接收10个不同频率的数据,老是出现数据丢失