关于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
} 楼主不妨看一下Modbus协议,用此协议组网是非常可靠的,协议文本在我的Blog中有。 Modbus协议也要先发查询包呀,现在是发不到正确的地址里面去呀 不要使用硬件地址匹配,全部用软件处理,不存什么“正确的地址”,各节点根据数据帧中的地址匹配进行响应就是。 我现在差不多就这样做的,自己用了个简单的协议吧,包头+从机地址+数据+校验,,,
现在的现象是:我发送数据时,其中一部分从机都能收到,但因为包中地址不是自己的,不会响应而于,如果一对一好像没问题,
但现在问题是又有了:我要切换,向不同的从机发数据,发现不能切换,我换到二号的时候,二号收不到,,,,改用发送的时候发TX(); Delay(10); TX();这样发送二次,,,从机就能正确响应。不知道为什么会这样,用串口检测的时候,从机收到的数据却是二个一样的包,,,,如果第一次它没收到,那它应该收到一个包呀,收到二个包,是不是就是说它二个包都正确收到了呢,那它为什么我在发第一个包的时候,它不响应呢,我发第二个的时候,它却响应了二次呢,,为什么,为什么,,,,我接收部分有问题吗? 说明你的程序有误,仔细检查吧。 主机每次发数据如果发送一包,每次都要发二次,从机能才收到一包,,,,如果发10包,每包发送间隔要很长100ms,从机才能接收到10包数据。时间短了,就只有三五包。如果还存在其它从机的话,则只能收到9包,
问题真的很多呀,调的快要疯了,,调不出来,估计也不好意思在这呆了
chunyang 老师,QQ多少呀,能否向你请教呀! 经验是调试积累出来的,工资是跳高的 我要跳的更高 :lol 发送间隔时间长的问题应该是从机处理速度的问题吧,我觉得可以看看从机的接收缓存的数据时怎么进行读取和处理的,由此判断是不是这个过程太长,导致主机发的部分包没有被收到 谢谢了, 多机通信是我想突破的啊。
页:
[1]