熟悉无线模块 nrf24L01的朋友进来看看
最近在做无线语音通信的项目,用到了24L01,24LE1(个人感觉24LE1跟24L01区别不大,核心都是NRF的无线收发,只是24LE1多了一个51内核)方案是24L01作为中继,24LE1作为对讲机
遇到一个麻烦,中继24L01发送两次,对讲机才接收到一次……
给我的感觉是第一次发送接收都正常,第二次发送没起到作用,第三次却接收到了,第四次又不能接受到,第五次又可以了……就是这样的情况
我分析可能是时序的问题,但是还没发现到底是哪的问题,请教有经验的朋友说说自己是怎么处理的呢?
这是涉及到的一些代码,大家看看有什么问题吗
/**************************************************/
// 功能:RF中断服务子程序
/**************************************************/
void RF_IRQ(void) interrupt INTERRUPT_RFIRQ
{
EA=0;
sta=SPI_Read(STATUS); // 保存寄存器状态值
if(RX_DR)
{
RFCE=0;
RD_PAYLOAD(); //读取接收到的信息到缓冲区
// receive_flag=1;
// LED1=0;
receive_show(); //显示接收到的信息
}
else
{
receive_flag=0;
}
SPI_RW_Reg(WRITE_REG+STATUS,0x70); // 清除所有中断标志
RFCE=1;
EA=1;
}
void receive_show()
{
unsigned char i=1,j=0;
LCD_P8x16Str(0,0,"Total:0"); //7*8=56
j=rx_buf;
LCD_Pchar8x16(48,0,j+0X30);
while(j--)
{
LCD_Pchar8x16( 0,i*2,rx_buf[(i-1)*4+1]);
LCD_Pchar8x16( 8,i*2,rx_buf[(i-1)*4+2]);
LCD_Pchar8x16(16,i*2,rx_buf[(i-1)*4+3]);
LCD_Pchar8x16(24,i*2,rx_buf[(i-1)*4+4]);
i++;
}
}
void RD_PAYLOAD(void)
{
uint8_t i;
RFCSN=0; // 进入SPI操作
SPI_RW(RD_RX_PLOAD); // 写入命令
for (i=0;i<TX_PLOAD_WIDTH;i++)
{
rx_buf = SPI_RW(0); // 读出数据
rx_start++; // 改变指针
rx_start&=0x3f;
rx_num++; // 接收数据总数加一
}
RFCSN=1; // 结束SPI操作
RFCSN=0; // 进入SPI操作
SPI_RW_Reg(FLUSH_RX,0); // 清除接收缓冲区
RFCSN=1; // 进入SPI操作
} 肯请大侠的帮助啊!! 很多人用中断也遇到了这个问题,查询的话确实很少有你出现的这种情况啊。24l01还是有弊端啊。有时IRQ根本不动作 可是数据却发出去啊 我用SI24R1也有这种IRQ不触发的问题 fmdz 发表于 2012-12-22 14:51 static/image/common/back.gif
我用SI24R1也有这种IRQ不触发的问题
程序问题的,你CE启动后不能有任何操作,要在那里等待发送完成 贴的是收代码,实际是发送问题,估计是未等待发生完成就发下一包,导致间隔丢包。 以前用24L01作半双工 查询-返回 式程序时,就遇到过此类问题,就是发的太快了:
被查询方如果收到数据包后迅速返回,则查询方收不到该包;
使用第三个24L01监视期间通信,则也只有查询包没有反馈。
当时是强行用延时给包之间增加了近100us的间隔,才最终解决。 之前我遇到过哦这情况。
收发各有三个缓存区,及时清除缓冲区。发送前后清除缓冲区。接收有可能没中断触发,用查询寄存器去读取。
我现在遇到别的问题
目前两点之间通信基本算稳定,但是一(仅)发二(仅)收的系统经常发送失败,发送设备在发送过程需要切换地址,两接收设备一直处于接收状态。是什么原因?
目前我分析如下可能:
1、三系统供电都是DCDC 3.3V,无线模块使用开关电源不稳定?
2、发送设备在写入地址的时候不正确写入,导致发送失败?
3、其它原因?
此外还有几点使用疑问:
1、发送的时候CE端一直保持高电平,TX缓冲区只要不为空模块是不是一直处于发送状态,一直发送缓冲区的数据?要是一直发送缓冲区数据,发送不成功产生超时超次数(MAX_RT)中断,我们寄存器写入清除中断标志后模块是否会继续发送数据?还是?
2、模块中的指令“ACTIVATE ”“R_RX_PL_WID”“W_ACK_PAYLOAD”“W_TX_PAYLOAD_NO
ACKa”是什么作用?如何使用?
有经验前辈分析一下注意的使用心得~~~ 原来如此
页:
[1]