搜索
bottom↓
回复: 9

熟悉无线模块 nrf24L01的朋友进来看看

[复制链接]

出0入0汤圆

发表于 2012-12-2 08:23:39 | 显示全部楼层 |阅读模式
最近在做无线语音通信的项目,用到了24L01,24LE1(个人感觉24LE1跟24L01区别不大,核心都是NRF的无线收发,只是24LE1多了一个51内核)
方案是24L01作为中继,24LE1作为对讲机
遇到一个麻烦,中继24L01发送两次,对讲机才接收到一次……
给我的感觉是第一次发送接收都正常,第二次发送没起到作用,第三次却接收到了,第四次又不能接受到,第五次又可以了……就是这样的情况
我分析可能是时序的问题,但是还没发现到底是哪的问题,请教有经验的朋友说说自己是怎么处理的呢?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2012-12-2 08:50:53 | 显示全部楼层
这是涉及到的一些代码,大家看看有什么问题吗

/**************************************************/
// 功能: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[0];
        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[rx_start] = 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操作
}

出0入0汤圆

 楼主| 发表于 2012-12-2 08:51:23 | 显示全部楼层
肯请大侠的帮助啊!!

出0入0汤圆

发表于 2012-12-14 12:36:07 | 显示全部楼层
很多人用中断也遇到了这个问题,查询的话确实很少有你出现的这种情况啊。24l01还是有弊端啊。有时IRQ根本不动作 可是数据却发出去啊

出0入0汤圆

发表于 2012-12-22 14:51:45 | 显示全部楼层
我用SI24R1也有这种IRQ不触发的问题

出0入0汤圆

发表于 2012-12-25 09:20:43 | 显示全部楼层
fmdz 发表于 2012-12-22 14:51
我用SI24R1也有这种IRQ不触发的问题

程序问题的,你CE启动后不能有任何操作,要在那里等待发送完成

出0入0汤圆

发表于 2012-12-25 09:32:58 | 显示全部楼层
贴的是收代码,实际是发送问题,估计是未等待发生完成就发下一包,导致间隔丢包。

出200入2554汤圆

发表于 2012-12-25 09:52:46 | 显示全部楼层
以前用24L01作半双工 查询-返回 式程序时,就遇到过此类问题,就是发的太快了:

被查询方如果收到数据包后迅速返回,则查询方收不到该包;
使用第三个24L01监视期间通信,则也只有查询包没有反馈。

当时是强行用延时给包之间增加了近100us的间隔,才最终解决。

出0入0汤圆

发表于 2012-12-2 08:23:40 | 显示全部楼层
之前我遇到过哦这情况。
收发各有三个缓存区,及时清除缓冲区。发送前后清除缓冲区。接收有可能没中断触发,用查询寄存器去读取。

我现在遇到别的问题

目前两点之间通信基本算稳定,但是一(仅)发二(仅)收的系统经常发送失败,发送设备在发送过程需要切换地址,两接收设备一直处于接收状态。是什么原因?
目前我分析如下可能:

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”是什么作用?如何使用?

有经验前辈分析一下注意的使用心得~~~

出0入0汤圆

发表于 2014-11-9 23:12:03 | 显示全部楼层
原来如此
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 22:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表