求教 24L01 手一摸通讯就正常是怎么回事?
本帖最后由 sohappyoh 于 2018-10-19 09:13 编辑淘宝买的NRF24L01,分别有加PA和没加PA的,都一样,收发试验NOACK模式,掉包很严重,也不是距离太近信号太强的缘故,我手一摸天线,或者模块背面通讯就正常了!!!求教是什么原因?
下面是我的代码:
void SI24R1_Config(void)
{
SPI_RW_Reg( WRITE_REG_CMD + SETUP_AW, 0x03 ); // 设置地址宽度为 5bytes
SPI_Write_Buf( WRITE_REG_CMD + TX_ADDR, TX_ADDRESS, 5 ); // 发送地址
SPI_Write_Buf( WRITE_REG_CMD + RX_ADDR_P0, RX_ADDRESS, 5 ); // 接收通道 0 地址
SPI_RW_Reg( WRITE_REG_CMD + EN_RXADDR, 0x01 ); // 使能接收通道 0
SPI_RW_Reg( WRITE_REG_CMD + RF_CH, 11 ); // 选择射频信道
SPI_RW_Reg( WRITE_REG_CMD + RX_PW_P0, TX_PLOAD_WIDTH ); // 设置负载长度,使用 PIPE0 接收
SPI_RW_Reg( WRITE_REG_CMD + FEATURE, 0x01 ); // NO ACK
SPI_RW_Reg( WRITE_REG_CMD + DYNPD, 0x00 ); // 关闭 DPL_P0
SPI_RW_Reg( WRITE_REG_CMD + RF_SETUP, 0x07 ); // 数据传输率 2Mbps 及功率
}
void SI24R1_TxMode(void)
{
CE = 0;
SPI_RW_Reg( FLUSH_TX_CMD, 0x00 ); //清除TX_FIFO寄存器
SPI_RW_Reg( WRITE_REG_CMD + CONFIG, 0x0E ); //IRQ引脚不显示中断 上电 发射模式 1~16CRC校验
CE = 1;
delay_xus( 130 ); //从CE = 0 到 CE = 1;即待机模式到收发模式,需要最大130us
}
void SI24R1_RxMode(void)
{
CE = 0;
SPI_RW_Reg( FLUSH_RX_CMD, 0x00 ); //清除RX_FIFO寄存器
SPI_RW_Reg( WRITE_REG_CMD + CONFIG, 0x0F ); //IRQ引脚不显示中断 上电 接收模式 1~16CRC校验
CE = 1;
delay_xus( 130 ); //从CE = 0 到 CE = 1;即待机模式到收发模式,需要最大130us
}
if(rx) {
rc++;
SI24R1_Config();
SI24R1_RxMode();
delayms_cnt2 = 0;
do {
status = SPI_Read( READ_REG_CMD + STATUS );
SPI_RW_Reg( WRITE_REG_CMD + STATUS, status );
if(status & RX_DR) {
LedBlink( LED_GREEN );
SI24R01_ReadFIFO( rxbuf );
if( USB_Connected() )
USB_SendDat( ( u8 * )rxbuf, strlen( ( char * )rxbuf ) );
break;
}
} while (delayms_cnt2<10);
} else {
tc++;
static u32 x=0;
sprintf( ( char * )txbuf, "TX CNT=%d\r\n", x++ );
SI24R1_Config();
SI24R1_TxMode();
CE = 0;
SPI_Write_Buf( WR_TX_PLOAD_NOACK_CMD, txbuf, 32 );
CE = 1;
delay_xus(150);
delayms_cnt2 = 0;
do {
status = SPI_Read( READ_REG_CMD + STATUS );
SPI_RW_Reg( WRITE_REG_CMD + STATUS, status );
} while(((status&TX_DS)==0)&&(delayms_cnt2<10));
delay_xms(100);
} 接地或者天线匹配没做好吧 供电不稳吧。供电输入加个大电容并上小电容 我做我的王 发表于 2018-10-19 10:48
供电不稳吧。供电输入加个大电容并上小电容
这个搞不好是IIC挂了。我被iic总线折腾了好几天了。设备上用了总共将近30cm的走线,其中20cm以上是FPC。然后有一个模组死活不工作或工作不正常,查IIC之类都正常。最后没办法,给IIC终端那里加了1nF电容抗干扰。疑似IIC终端没有加上拉,靠PCB上拉到设备端之后不稳定,偶尔会造成混乱。像LZ这应该查查IIC上拉是否正常。
如果确认IIC上拉是正常的,那就查查地是不是浮地。 天线不好吧,电容不匹配 大部分是供电问题
页:
[1]