现在只有一个NRF24L01,可不可以判断他的好坏呢?
现在手头上只有一块NRF24L01,怎么样才能判断他的好坏呢???可以自发自收吗? 让他发送,看状态位,标志位 标志位是哪一位? 看看例程中的check程序那个好像能检测的 可以自发自收吗? jiespring 发表于 2012-9-5 11:16 static/image/common/back.gif
看看例程中的check程序
那个好像能检测的
麻烦你可以发一下吗? jingwaner 发表于 2012-9-5 10:24 static/image/common/back.gif
让他发送,看状态位,标志位
同意。呵呵。{:smile:} //检测24L01是否存在
//返回值:0,成功;1,失败
u8 NRF24L01_Check(void)
{
u8 buf={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!=0XA5)break;
if(i!=5)return 1;//检测24L01错误
return 0; //检测到24L01
} zzz1367 发表于 2012-9-5 11:22 static/image/common/back.gif
同意。呵呵。
怎么看呢?麻烦您能说具体一点吗?{:smile:}
jingwaner 发表于 2012-9-5 10:24 static/image/common/back.gif
让他发送,看状态位,标志位
麻烦您能说具体一些吗? pine222 发表于 2012-9-5 11:35 static/image/common/back.gif
麻烦您能说具体一些吗?
你买NRF24L01模块的时候,卖方没给你 资料吗?
上面应该会有相关寄存器的 资料。
zzz1367 发表于 2012-9-5 11:39 static/image/common/back.gif
你买NRF24L01模块的时候,卖方没给你 资料吗?
上面应该会有相关寄存器的 资料。
...
是STATUS和FIFO_STATUS寄存器吗? pine222 发表于 2012-9-5 11:48 static/image/common/back.gif
是STATUS和FIFO_STATUS寄存器吗?
是的
你先检测nrf24l01的这几个状态,
然后发送,发送后,再检测这几个状态。
如果发送位改变了,就认为 发送成功了。
呵呵。
当然,一般能读到这几个状态的数据,就认为是好的。
反正只有一个也没法用,扔一边去等凑齐一对再测。 zzz1367 发表于 2012-9-5 11:58 static/image/common/back.gif
是的
你先检测nrf24l01的这几个状态,
然后发送,发送后,再检测这几个状态。
那是不是要硬仿? gzhuli 发表于 2012-9-5 12:17 static/image/common/back.gif
反正只有一个也没法用,扔一边去等凑齐一对再测。
现在是有四个,但是不知道哪个是好的,哪个是坏的? pine222 发表于 2012-9-5 12:20 static/image/common/back.gif
现在是有四个,但是不知道哪个是好的,哪个是坏的?
一会说一个一会说四个,会不会等下又变成量产四千个做批量测试? gzhuli 发表于 2012-9-5 12:25 static/image/common/back.gif
一会说一个一会说四个,会不会等下又变成量产四千个做批量测试?
四个不知道哪个好,哪个坏,得一个个测试啊, 干嘛不搞多一个?如果只判断标志位的话无法知道信号传输这一块是否有问题。 蜂巢 发表于 2012-9-5 12:29 static/image/common/back.gif
干嘛不搞多一个?如果只判断标志位的话无法知道信号传输这一块是否有问题。 ...
那可不可以自发自收呢?
代码被我改成这个样子,通过IRQ中断来判断自发自收是否成功呢?
void int1() interrupt 2
{ count++;
P0=~seg;
if(count==90)count=0;
}
//************************************主函数************************************************************
void main(void)
{
unsigned char tf =0;
unsigned char TxBuf={0}; //
unsigned char RxBuf={0};
init_NRF24L01() ;
led0=0;led1=0;led2=0;led3=0;
P0=0x00;
TxBuf = 1 ;
TxBuf = 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;
TxBuf = 1 ;
tf = 1 ;
}
if(KEY2 ==0 )
{
P0=~seg;
TxBuf =1 ;
tf = 1 ;
}
if (tf==1)
{
nRF24L01_TxPacket(TxBuf); // Transmit Tx buffer data
TxBuf = 0x00;
TxBuf = 0x00;
tf=0;
Delay(1000);
}
//***********************************************************************************************
SetRX_Mode();
RxBuf = 0x00;
RxBuf = 0x00;
Delay(1000);
nRF24L01_RxPacket(RxBuf);
if(RxBuf|RxBuf)
{
if( RxBuf==1)
{
P0=~seg;
}
if( RxBuf==1)
{
P0=~seg;
}
Delay(1000);
}
RxBuf = 0x00;
RxBuf = 0x00;
}
} pine222 发表于 2012-9-5 12:36 static/image/common/back.gif
代码被我改成这个样子,通过IRQ中断来判断自发自收是否成功呢?
void int1() interrupt 2
{ count++;
我记得没办法自发自收
要使用传输方式测试就要有两个
可以试试" jiespring "的方法
写一笔数据进寄存器
再读出来
捡查数据是否相同 那个例程里面的check()就可以检测了,弄个LED显示返回值就行啦。
u8 NRF24L01_Check(void)
{
u8 buf={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!=0XA5)break;
if(i!=5)return 1;//检测24L01错误
return 0; //检测到24L01
} 那个收音机子啊旁边看看能不能听到干扰波 p4s5j6 发表于 2012-9-5 15:27 static/image/common/back.gif
那个收音机子啊旁边看看能不能听到干扰波
这也行,呵呵 pine222 发表于 2012-9-5 12:33 static/image/common/back.gif
那可不可以自发自收呢?
不可以自发自收的。 我的也只有一个模块,郁闷。。 發一個載波, 看看頻譜儀有沒有訊號. 问一下24楼,2.4G的频段,能干扰到收音机????? 找一个确定能发送的程序,看电流。当然你要先得到一个参考电流值。一般RF匹配与否,天线是否接上电流都会不一样。
页:
[1]