搜索
bottom↓
回复: 29

现在只有一个NRF24L01,可不可以判断他的好坏呢?

[复制链接]

出0入0汤圆

发表于 2012-9-5 10:02:59 | 显示全部楼层 |阅读模式
现在手头上只有一块NRF24L01,怎么样才能判断他的好坏呢???可以自发自收吗?

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入8汤圆

发表于 2012-9-5 10:24:46 | 显示全部楼层
让他发送,看状态位,标志位

出0入0汤圆

 楼主| 发表于 2012-9-5 11:07:18 | 显示全部楼层
标志位是哪一位?

出0入0汤圆

发表于 2012-9-5 11:16:23 | 显示全部楼层
看看例程中的check程序
那个好像能检测的

出0入0汤圆

 楼主| 发表于 2012-9-5 11:19:15 | 显示全部楼层
可以自发自收吗?

出0入0汤圆

 楼主| 发表于 2012-9-5 11:20:13 | 显示全部楼层
jiespring 发表于 2012-9-5 11:16
看看例程中的check程序
那个好像能检测的

麻烦你可以发一下吗?

出0入0汤圆

发表于 2012-9-5 11:22:20 | 显示全部楼层
jingwaner 发表于 2012-9-5 10:24
让他发送,看状态位,标志位

同意。呵呵。

出0入0汤圆

发表于 2012-9-5 11:23:23 | 显示全部楼层
//检测24L01是否存在
//返回值:0,成功;1,失败       
u8 NRF24L01_Check(void)
        {
        u8 buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5};
        u8 i;
        SPIx_SetSpeed(SPI_BaudRatePrescaler_8); //spi速度为9Mhz(24L01的最大SPI时钟为10Mhz)            
        NRF24L01_Write_Buf(NRF24L01_WRITE_REG+TX_ADDR,buf,5);//写入5个字节的地址.       
        NRF24L01_Read_Buf(TX_ADDR,buf,5); //读出写入的地址  
        for(i=0;i<5;i++)if(buf[i]!=0XA5)break;                                                                   
        if(i!=5)return 1;//检测24L01错误       
        return 0;                 //检测到24L01
        }       

出0入0汤圆

 楼主| 发表于 2012-9-5 11:33:37 | 显示全部楼层
zzz1367 发表于 2012-9-5 11:22
同意。呵呵。

怎么看呢?麻烦您能说具体一点吗?

出0入0汤圆

 楼主| 发表于 2012-9-5 11:35:08 | 显示全部楼层
jingwaner 发表于 2012-9-5 10:24
让他发送,看状态位,标志位

麻烦您能说具体一些吗?

出0入0汤圆

发表于 2012-9-5 11:39:35 | 显示全部楼层
pine222 发表于 2012-9-5 11:35
麻烦您能说具体一些吗?

你买NRF24L01模块的时候,卖方没给你 资料吗?
上面应该会有相关寄存器的 资料。

出0入0汤圆

 楼主| 发表于 2012-9-5 11:48:09 | 显示全部楼层
zzz1367 发表于 2012-9-5 11:39
你买NRF24L01模块的时候,卖方没给你 资料吗?
上面应该会有相关寄存器的 资料。
...

是STATUS和FIFO_STATUS寄存器吗?

出0入0汤圆

发表于 2012-9-5 11:58:04 | 显示全部楼层
pine222 发表于 2012-9-5 11:48
是STATUS和FIFO_STATUS寄存器吗?

是的
你先检测nrf24l01的这几个状态,
然后发送,发送后,再检测这几个状态。
如果发送位改变了,就认为 发送成功了。
呵呵。
当然,一般能读到这几个状态的数据,就认为是好的。

出0入663汤圆

发表于 2012-9-5 12:17:18 | 显示全部楼层
反正只有一个也没法用,扔一边去等凑齐一对再测。

出0入0汤圆

 楼主| 发表于 2012-9-5 12:19:49 | 显示全部楼层
zzz1367 发表于 2012-9-5 11:58
是的
你先检测nrf24l01的这几个状态,
然后发送,发送后,再检测这几个状态。

那是不是要硬仿?

出0入0汤圆

 楼主| 发表于 2012-9-5 12:20:41 | 显示全部楼层
gzhuli 发表于 2012-9-5 12:17
反正只有一个也没法用,扔一边去等凑齐一对再测。

现在是有四个,但是不知道哪个是好的,哪个是坏的?

出0入663汤圆

发表于 2012-9-5 12:25:15 | 显示全部楼层
pine222 发表于 2012-9-5 12:20
现在是有四个,但是不知道哪个是好的,哪个是坏的?

一会说一个一会说四个,会不会等下又变成量产四千个做批量测试?

出0入0汤圆

 楼主| 发表于 2012-9-5 12:26:19 | 显示全部楼层
gzhuli 发表于 2012-9-5 12:25
一会说一个一会说四个,会不会等下又变成量产四千个做批量测试?

四个不知道哪个好,哪个坏,得一个个测试啊,

出0入0汤圆

发表于 2012-9-5 12:29:54 | 显示全部楼层
干嘛不搞多一个?如果只判断标志位的话无法知道信号传输这一块是否有问题。

出0入0汤圆

 楼主| 发表于 2012-9-5 12:33:45 | 显示全部楼层
蜂巢 发表于 2012-9-5 12:29
干嘛不搞多一个?如果只判断标志位的话无法知道信号传输这一块是否有问题。 ...

那可不可以自发自收呢?

出0入0汤圆

 楼主| 发表于 2012-9-5 12:36:03 | 显示全部楼层
代码被我改成这个样子,通过IRQ中断来判断自发自收是否成功呢?
void int1() interrupt 2
{        count++;
        P0=~seg[count/10];
        if(count==90)count=0;       
}
//************************************主函数************************************************************
void main(void)
{
        unsigned char tf =0;
        unsigned char TxBuf[20]={0};         //
        unsigned char RxBuf[20]={0};       
    init_NRF24L01() ;
        led0=0;led1=0;led2=0;led3=0;
        P0=0x00;
        TxBuf[1] = 1 ;
        TxBuf[2] = 1 ;
        nRF24L01_TxPacket(TxBuf);        // Transmit Tx buffer data
        Delay(6000);
        P0=0xBF;
//开外部中断1////////////////////////////////////////////////////////
    EX1=1;
        EA=1;  
        IT1=1;
//////////////////////////
        while(1)
        {
            nRF24L01_TxPacket(TxBuf);        //一直发射,用来测试
                Delay(6000);                                //必须要加
            if(KEY1 ==0 )
                  {
                        P0=~seg[1];
                    TxBuf[1] = 1 ;
                    tf = 1 ;
            }
           if(KEY2 ==0 )
           {
                        P0=~seg[2];
                        TxBuf[2] =1 ;
                        tf = 1 ;
           }
           if (tf==1)
       {       
                        nRF24L01_TxPacket(TxBuf);        // Transmit Tx buffer data
                        TxBuf[1] = 0x00;
                        TxBuf[2] = 0x00;
                        tf=0;
                        Delay(1000);
           }
//***********************************************************************************************
            SetRX_Mode();
                RxBuf[1] = 0x00;
                RxBuf[2] = 0x00;
                Delay(1000);
                nRF24L01_RxPacket(RxBuf);
               
                   if(RxBuf[1]|RxBuf[2])
                {                                       
                        if(        RxBuf[1]==1)
                        {                
                                P0=~seg[3];
                        }
                        if(        RxBuf[2]==1)
                        {
                                P0=~seg[4];
                        }
                        Delay(1000);
                }
       
                RxBuf[1] = 0x00;
                RxBuf[2] = 0x00;
        }
       
}

出0入0汤圆

发表于 2012-9-5 12:57:14 | 显示全部楼层
pine222 发表于 2012-9-5 12:36
代码被我改成这个样子,通过IRQ中断来判断自发自收是否成功呢?
void int1() interrupt 2
{        count++;


我记得没办法自发自收
要使用传输方式测试就要有两个

可以试试" jiespring "的方法

写一笔数据进寄存器
再读出来
捡查数据是否相同

出0入0汤圆

发表于 2012-9-5 13:03:45 | 显示全部楼层
那个例程里面的check()就可以检测了,弄个LED显示返回值就行啦。
u8 NRF24L01_Check(void)
        {
        u8 buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5};
        u8 i;
        SPIx_SetSpeed(SPI_BaudRatePrescaler_8); //spi速度为9Mhz(24L01的最大SPI时钟为10Mhz)            
        NRF24L01_Write_Buf(NRF24L01_WRITE_REG+TX_ADDR,buf,5);//写入5个字节的地址.        
        NRF24L01_Read_Buf(TX_ADDR,buf,5); //读出写入的地址  
        for(i=0;i<5;i++)if(buf[i]!=0XA5)break;                                                                    
        if(i!=5)return 1;//检测24L01错误        
        return 0;                 //检测到24L01
        }   

出0入0汤圆

发表于 2012-9-5 15:27:51 | 显示全部楼层
那个收音机子啊旁边看看能不能听到干扰波

出0入0汤圆

 楼主| 发表于 2012-9-5 20:25:37 | 显示全部楼层
p4s5j6 发表于 2012-9-5 15:27
那个收音机子啊旁边看看能不能听到干扰波

这也行,呵呵

出0入0汤圆

发表于 2012-9-6 12:40:38 | 显示全部楼层
pine222 发表于 2012-9-5 12:33
那可不可以自发自收呢?

不可以自发自收的。

出0入0汤圆

发表于 2013-2-1 21:10:56 | 显示全部楼层
我的也只有一个模块,郁闷。。

出0入0汤圆

发表于 2013-2-12 13:53:47 | 显示全部楼层
發一個載波, 看看頻譜儀有沒有訊號.

出0入0汤圆

发表于 2013-2-21 11:50:12 | 显示全部楼层
问一下24楼,2.4G的频段,能干扰到收音机?????

出0入0汤圆

发表于 2013-3-31 10:27:38 | 显示全部楼层
找一个确定能发送的程序,看电流。当然你要先得到一个参考电流值。一般RF匹配与否,天线是否接上电流都会不一样。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-23 17:33

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

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