搜索
bottom↓
回复: 6

24l01室内几米远有1%左右的丢包率正常么?如何改善?

[复制链接]

出0入0汤圆

发表于 2021-2-27 20:38:12 | 显示全部楼层 |阅读模式
本帖最后由 bangbangji 于 2021-2-27 22:37 编辑

淘宝上买的模块,发射端带天线,单方向传输。

开启了应答和自动重传,大概还有1%左右的丢包率,这个现象正常吗?


5楼有代码,帮忙分析下有无问题

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出100入143汤圆

发表于 2021-2-27 21:02:32 | 显示全部楼层
开了应答,接收端要跟发送端一样才行,因为应答信号是从接收端发出,如果发射功率不够或者没天线不行;

出0入0汤圆

发表于 2021-2-27 21:32:54 | 显示全部楼层
或者换个芯片si4432

出0入0汤圆

 楼主| 发表于 2021-2-27 21:43:22 | 显示全部楼层
zzh90513 发表于 2021-2-27 21:02
开了应答,接收端要跟发送端一样才行,因为应答信号是从接收端发出,如果发射功率不够或者没天线不行; ...

这里确实有点问题
不过现在看好像不是应答没收到,只是单纯的发送方往接收方发的时候丢了。
如果是应答没有收到,那么发送端会重发,那么接收端可能会收到两帧相同的数,目前没有发现相同数的。

出0入0汤圆

 楼主| 发表于 2021-2-27 22:36:36 | 显示全部楼层
贴一下代码,发送端:
        CE_L;//CE=0;    // chip enable
        CS_H;//CSN=1;   // Spi  disable
        SCK_L;//SCK=0;   //
       
                SPI_RW_Reg(WRITE_REG_24L01 + STATUS, 0xff); // clear irq flag
                SPI_RW(FLUSH_TX); //clear tx fifo
                SPI_RW(FLUSH_RX); //clear rx fifo
       
          SPI_Write_Buf(WRITE_REG_24L01 + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // Writes TX_Address to nRF24L01
          SPI_Write_Buf(WRITE_REG_24L01 + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack
          SPI_Write_Buf(WR_TX_PLOAD, TxBuf, TX_PLOAD_WIDTH); // Writes data to TX payload
                SPI_RW_Reg(WRITE_REG_24L01 + EN_AA, 0x01);      // Enable Auto.Ack:Pipe0
          SPI_RW_Reg(WRITE_REG_24L01 + EN_RXADDR, 0x01);  // Enable Pipe0
          SPI_RW_Reg(WRITE_REG_24L01 + SETUP_RETR, 0x12); // 500us , 10 retrans...
          SPI_RW_Reg(WRITE_REG_24L01 + RF_CH, ch_freq);        // Select RF channel 40
          SPI_RW_Reg(WRITE_REG_24L01 + RF_SETUP, 0x07);   // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
          SPI_RW_Reg(WRITE_REG_24L01 + CONFIG, 0x0e);     // Set PWR_UP bit, enable CRC(2 bytes) & Prim:TX. MAX_RT & TX_DS enabled..
        CE_H;
       
        while(IRQ_D == 1); //µÈ´ý·¢ËÍÍê±Ï



接收端:
        if(first_flag == 0)
        {//只初始化时运行1次
                first_flag = 1;
                CE_L;//CE=0;    // chip enable
                CS_H;//CSN=1;   // Spi  disable
                SCK_L;//SCK=0;   //
               
                SPI_RW_Reg(WRITE_REG_24L01 + STATUS, 0xff); // clear irq flag
                SPI_RW(FLUSH_TX); //clear tx fifo
                SPI_RW(FLUSH_RX); //clear rx fifo
               
                        SPI_Write_Buf(WRITE_REG_24L01 + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // Writes TX_Address to nRF24L01
                        SPI_Write_Buf(WRITE_REG_24L01 + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // Use the same address on the RX device as the TX device
                        SPI_RW_Reg(WRITE_REG_24L01 + EN_AA, 0x01);      // 1 Enable Auto.Ack:Pipe0
                        SPI_RW_Reg(WRITE_REG_24L01 + EN_RXADDR, 0x01);  // Enable Pipe0
                        SPI_RW_Reg(WRITE_REG_24L01 + RF_CH, freq);        // Select RF channel 40
                        SPI_RW_Reg(WRITE_REG_24L01 + RX_PW_P0, TX_PLOAD_WIDTH); // Select same RX payload width as TX Payload width
                        SPI_RW_Reg(WRITE_REG_24L01 + RF_SETUP, 0x07);   // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
                        SPI_RW_Reg(WRITE_REG_24L01 + CONFIG, 0x0f);     // Set PWR_UP bit, enable CRC(2 bytes) & Prim:RX. RX_DR enabled..
                CE_H;
               
                HAL_Delay(2);
        }
       
        if(IRQ_D == 0)
        {
                i = SPI_Read(STATUS);
                if(i&(1<<6)) // STATUS's bit6 is rx flag
                {
                        SPI_Read_Buf(RD_RX_PLOAD,RxBuf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
                        SPI_RW_Reg(WRITE_REG_24L01 + STATUS, 0xff); // clear irq flag
                        SPI_RW(FLUSH_TX); //clear tx fifo
                        SPI_RW(FLUSH_RX); //clear rx fifo
                        send_uart_byte_array(1, RxBuf, 32);
                }
        }

出5入0汤圆

发表于 2021-2-28 14:18:47 | 显示全部楼层
本帖最后由 menglogic 于 2021-2-28 14:26 编辑

原来做用24L01 做遥控器时,距离几米也是有发现丢包的,不排除是其它WIFI之类的同频干扰。看网上资料要提高通信稳定性跳频是需要的。我这遥控器不需要很高的实时性,当丢包后延时再发送。

出0入1209汤圆

发表于 2021-2-28 15:19:49 | 显示全部楼层
无线的方式肯定存在丢包问题,空间电磁干扰太多了。加了应答和自动重发还丢数据,只能说明你的代码应答逻辑不够严谨。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 07:27

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

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