zhuyi2576 发表于 2010-10-15 00:50

关于nRF905求助,多点通信出错问题?

关于nRF905求助,多点通信出错问题?

我一个主机,三个从机做实验(以后要带几百个从机),都用的是用同一的固定的频率,通过改变地址,将数据发到从机上
现在问题是,本来我要发到1号机上,有时却发到了2号,或3号机上,反正就是不受控制。乱了
资料上不是有地址检测,频率检测吗,可是感觉一点都没有用呀,特别是CD检测功能!

这是我接收程序,麻烦大家看一下,,或是大家提点建议,怎么处理好呀
void RxPacket(void)
{
       SetRxMode();   // Set nRF905 in Rx mode
       Delay(10);
if(DR&&AM)//数据校验正确,而且地址也匹配
{
ReadPacket(RxBuffer,32);//读数据
LED=1;//接收到主机发给自己的数据,指示灯开
for(i=0;i<32;i++)
{
   send_UART(RxBuffer);//发回串口显示
}
      }
}

void ReadPacket(uchar *p,uchar Len) //读数据
{
uchar i;
      TRX_CE=0;    //进入空闲模式,读数据
CSN=0;   // Spi enable for write a spi command
SPI_ByteWrite(RRP);//读RxPayload
for (i = 0 ;i < Len ;i++)
{
   *p = SPI_ByteRead();
p++;
         }
CSN=1 ;
while (AM||DR);    //等待读取数据完毕,如果数据被读出,905自动将DR=0,AM=0
TRX_CE=1;    //回到继续接收模式      
}

配置
void Config905(uchar *Pointer)
{
uchar i;
CSN=0;
Delay(1);   // Spi enable for write a spi command
SPI_ByteWrite(WC);   // Write config command写放配置命令
SPI_ByteWrite(CH_NO_FREQ_430_0MHz &0xff);//字节0中心频率低8位      0x4c
SPI_ByteWrite(PA_PWR_10dBm | HFREQ_PLL_433MHz); //发射+10dBm,发射频率433MHz,中心频率第9位=0 0x0c
SPI_ByteWrite(TX_AFW_4BYTE | RX_AFW_4BYTE);   //接收地址宽度4字节,发送地址宽度4字节0x44
SPI_ByteWrite(RX_PW_32BYTE);                  //接收数据宽度32字节      0x20
SPI_ByteWrite(TX_PW_32BYTE);                  //发送数据宽度32字节      0x20
for (i=0;i<4;i++)         //接收有效地址第1字节
{
   SPI_ByteWrite(*Pointer);
Pointer++;
}
SPI_ByteWrite(CRC16_EN | XOF_16MHz);            //CRC16模式使能,晶体振荡器频率16MHz//0xd8
// SPI_ByteWrite(CRC8_EN | XOF_16MHz);    //CRC8模式使能,晶体振荡器频率16MHz   //0x58
CSN=1;   // Disable Spi
}

chunyang 发表于 2010-10-15 09:41

楼主不妨看一下Modbus协议,用此协议组网是非常可靠的,协议文本在我的Blog中有。

zhuyi2576 发表于 2010-10-15 10:10

Modbus协议也要先发查询包呀,现在是发不到正确的地址里面去呀

chunyang 发表于 2010-10-15 13:02

不要使用硬件地址匹配,全部用软件处理,不存什么“正确的地址”,各节点根据数据帧中的地址匹配进行响应就是。

zhuyi2576 发表于 2010-10-16 22:00

我现在差不多就这样做的,自己用了个简单的协议吧,包头+从机地址+数据+校验,,,
现在的现象是:我发送数据时,其中一部分从机都能收到,但因为包中地址不是自己的,不会响应而于,如果一对一好像没问题,
但现在问题是又有了:我要切换,向不同的从机发数据,发现不能切换,我换到二号的时候,二号收不到,,,,改用发送的时候发TX(); Delay(10); TX();这样发送二次,,,从机就能正确响应。不知道为什么会这样,用串口检测的时候,从机收到的数据却是二个一样的包,,,,如果第一次它没收到,那它应该收到一个包呀,收到二个包,是不是就是说它二个包都正确收到了呢,那它为什么我在发第一个包的时候,它不响应呢,我发第二个的时候,它却响应了二次呢,,为什么,为什么,,,,我接收部分有问题吗?

chunyang 发表于 2010-10-17 09:49

说明你的程序有误,仔细检查吧。

zhuyi2576 发表于 2010-10-18 14:15

主机每次发数据如果发送一包,每次都要发二次,从机能才收到一包,,,,如果发10包,每包发送间隔要很长100ms,从机才能接收到10包数据。时间短了,就只有三五包。如果还存在其它从机的话,则只能收到9包,

问题真的很多呀,调的快要疯了,,调不出来,估计也不好意思在这呆了



chunyang   老师,QQ多少呀,能否向你请教呀!

迅通科技 发表于 2010-10-26 12:08

经验是调试积累出来的,工资是跳高的

我是土匪 发表于 2010-10-26 13:38

我要跳的更高 :lol

fornever 发表于 2010-10-27 20:28

发送间隔时间长的问题应该是从机处理速度的问题吧,我觉得可以看看从机的接收缓存的数据时怎么进行读取和处理的,由此判断是不是这个过程太长,导致主机发的部分包没有被收到

Daojia211 发表于 2013-5-26 16:43

谢谢了, 多机通信是我想突破的啊。
页: [1]
查看完整版本: 关于nRF905求助,多点通信出错问题?