搜索
bottom↓
回复: 20

24l01多对一

[复制链接]

出0入0汤圆

发表于 2013-7-12 09:33:45 | 显示全部楼层 |阅读模式
接收设置
void RX_Mode(u8 RF_IDLE_CH)
{
//u8 TX_ADDRESS[5]  = {0xb0,0xb2,0xb3,0xb4,0x01};
                                               
u8 RX_ADDRESS[5] = {0x34,0x43,0x10,0x10,0x01};
u8  RX_ADDRESS1[5] = {0xc2,0x13,0x54,0xa5,0x76};
u8  RX_ADDRESS2[1] = {0xc3};
u8  RX_ADDRESS3[1] = {0xc4};
u8  RX_ADDRESS4[1] = {0xc5};
u8  RX_ADDRESS5[1] = {0xc6};
        NRF24L01_CE=0;          
          NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址
        NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P1,(u8*)RX_ADDRESS1,RX_ADR_WIDTH);//写RX节点地址
        NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P2,(u8*)RX_ADDRESS2,1);//写RX节点地址
        NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P3,(u8*)RX_ADDRESS3,1);//写RX节点地址
        NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P4,(u8*)RX_ADDRESS4,1);//写RX节点地址
        NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P5,(u8*)RX_ADDRESS5,1);//写RX节点地址


          
          NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x00);    //使能通道0的自动应答   
          NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x3f);//使能所有通道的接收地址           
          NRF24L01_Write_Reg(WRITE_REG+RF_CH,40);             //设置RF通信频率                  
        NRF24L01_Write_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度
        NRF24L01_Write_Reg(WRITE_REG+RX_PW_P1,RX_PLOAD_WIDTH);//选择通道1的有效数据宽度
        NRF24L01_Write_Reg(WRITE_REG+RX_PW_P2,RX_PLOAD_WIDTH);//选择通道2的有效数据宽度
        NRF24L01_Write_Reg(WRITE_REG+RX_PW_P3,RX_PLOAD_WIDTH);//选择通道3的有效数据宽度
        NRF24L01_Write_Reg(WRITE_REG+RX_PW_P4,RX_PLOAD_WIDTH);//选择通道4的有效数据宽度
        NRF24L01_Write_Reg(WRITE_REG+RX_PW_P5,RX_PLOAD_WIDTH);//选择通道5的有效数据宽度              
          NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x27);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启0x0f   
          NRF24L01_Write_Reg(WRITE_REG+CONFIG, 0x0f);//配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式
          NRF24L01_CE = 1; //CE为高,进入接收模式
}

发射1是设置地址
unsigned char xdata TX_ADDRESS[5]={0x34,0x43,0x10,0x10,0x01}; //发送地址
发射2设置地址
unsigned char xdata TX_ADDRESS[5]={0xc2,0x13,0x54,0xa5,0x76}; //发送地址       
发射3设置地址
unsigned char xdata TX_ADDRESS[5]={0xc3,0x13,0x54,0xa5,0x76}; //发送地址       
发射4设置地址
unsigned char xdata TX_ADDRESS[5]={0xc4,0x13,0x54,0xa5,0x76}; //发送地址       
发射5设置地址
unsigned char xdata TX_ADDRESS[5]={0xc5,0x13,0x54,0xa5,0x76}; //发送地址
发射6设置地址
unsigned char xdata TX_ADDRESS[5]={0xc6,0x13,0x54,0xa5,0x76}; //发送地址       
参照本论坛的贴设置的
void TX_Mode(void)
{                                                                                                                 
        NRF24L01_CE=0;            
          NRF24L01_Write_Buf(WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址
          NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH); //设置TX节点地址,主要为了使能ACK          

          NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x00);     //使能通道0的自动应答   
          NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x01); //使能通道0的接收地址  
          NRF24L01_Write_Reg(WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次
          NRF24L01_Write_Reg(WRITE_REG+RF_CH,40);       //设置RF通道为40
          NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x27);  //设置TX发射参数,0db增益,2Mbps,低噪声增益开启 0x0f  
          NRF24L01_Write_Reg(WRITE_REG+CONFIG,0x0e);    //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断
        NRF24L01_CE=1;//CE为高,10us后启动发送
}       

但是接收的通道 都是0通道
                if(NRF24L01_RxPacket(tmp_buf)==0)//一旦接收到信息,则显示出来.
                        {       
                st=(sta&0x0f)>>1;
//                                st=(sta&0x0e);
                                if(st==0x00)           //通道0
请各位朋友帮看看          
                                                 

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

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2013-7-26 13:53:20 | 显示全部楼层
什么问题?楼主想问什么

出0入0汤圆

 楼主| 发表于 2013-8-14 17:12:42 | 显示全部楼层
没有问题了  是变量定义的问题  这么做没有错

出0入0汤圆

发表于 2014-2-28 12:20:18 | 显示全部楼层
zishiquan 发表于 2013-8-14 17:12
没有问题了  是变量定义的问题  这么做没有错

想问楼主做出来没有?
我最近在做这个,老是调不通超过两个通道的。

出0入0汤圆

 楼主| 发表于 2014-2-28 18:17:31 | 显示全部楼层
hck2llj 发表于 2014-2-28 12:20
想问楼主做出来没有?
我最近在做这个,老是调不通超过两个通道的。

做出来了

出0入0汤圆

 楼主| 发表于 2014-2-28 18:18:31 | 显示全部楼层
hck2llj 发表于 2014-2-28 12:20
想问楼主做出来没有?
我最近在做这个,老是调不通超过两个通道的。

上面的 地址都是对应的  没有问题

出0入0汤圆

发表于 2014-2-28 19:53:38 | 显示全部楼层
zishiquan 发表于 2014-2-28 18:18
上面的 地址都是对应的  没有问题

方便共享一下源码吗?我最近找了很多问题,没弄出来。

出0入0汤圆

发表于 2014-2-28 19:55:09 | 显示全部楼层

我按照论坛里几位大神的源码,就是不成功,奇怪呀。
有一个写多对一的,里面有两个发射的,一个接收的。
这个可以了,但是多加的通道都不成。

出0入0汤圆

 楼主| 发表于 2014-3-3 08:42:58 | 显示全部楼层
hck2llj 发表于 2014-2-28 19:53
方便共享一下源码吗?我最近找了很多问题,没弄出来。

上面的 就源码   实验用的   

if(NRF24L01_RxPacket(tmp_buf)==0)//一旦接收到信息,则显示出来.
                        {       
               st=(st&0x0f)>>1;
//                                st=(st&0x0e);
                                if(st==0x00)           //通道0
                                {       
                                }
                                if(st==0x01)           //通道1
                                {       
                                }
                                if(st==0x02)           //通道2
                                {       
                                }
                                if(st==0x03)           //通道3
                                {       
                                }
                                if(st==0x04)           //通道4
                                {       
                                }
                                if(st==0x05)           //通道5
                                {       
                                }
                        }

出0入0汤圆

发表于 2014-3-3 09:00:22 | 显示全部楼层
zishiquan 发表于 2014-3-3 08:42
上面的 就源码   实验用的   

if(NRF24L01_RxPacket(tmp_buf)==0)//一旦接收到信息,则显示出来.

我的写法和这个差不多,但是就是不成功呀

出0入0汤圆

 楼主| 发表于 2014-3-3 12:02:34 | 显示全部楼层
hck2llj 发表于 2014-3-3 09:00
我的写法和这个差不多,但是就是不成功呀

仿真看看  数据到哪里

出0入0汤圆

发表于 2014-3-3 14:55:19 | 显示全部楼层
51单片机,怎么仿真

出0入0汤圆

 楼主| 发表于 2014-3-3 16:02:57 | 显示全部楼层
我不知道 现在的51 用的多不多   你应该换个芯片了 学ARM吧  51用的不多了

出0入0汤圆

 楼主| 发表于 2014-3-3 16:04:01 | 显示全部楼层
程序多了  出问题 都不知道哪里出的  用51还有意义吗

出0入0汤圆

发表于 2014-3-3 16:10:03 | 显示全部楼层
zishiquan 发表于 2014-3-3 16:04
程序多了  出问题 都不知道哪里出的  用51还有意义吗

各有所长吧,我只是弄一个简单的多点无线测温,在这里使用arm相对来说,价格上没有什么优势。
我只是想弄懂原因,弄懂了,使用什么平台都是一样的。。

出0入0汤圆

 楼主| 发表于 2014-3-3 16:28:20 | 显示全部楼层
hck2llj 发表于 2014-3-3 16:10
各有所长吧,我只是弄一个简单的多点无线测温,在这里使用arm相对来说,价格上没有什么优势。
我只是想弄 ...

你没有办法仿真调试啊  这是关键

出0入0汤圆

 楼主| 发表于 2014-3-3 16:29:01 | 显示全部楼层
你换成c8051f310也行 也有仿真

出0入0汤圆

发表于 2014-3-3 18:00:36 | 显示全部楼层
zishiquan 发表于 2014-3-3 16:29
你换成c8051f310也行 也有仿真

我用串口来调试吧

出0入0汤圆

发表于 2014-3-3 18:01:02 | 显示全部楼层
zishiquan 发表于 2014-3-3 16:29
你换成c8051f310也行 也有仿真

你的配置nRF24L01的代码找不到了呀?

出0入0汤圆

 楼主| 发表于 2014-3-5 10:32:17 | 显示全部楼层
hck2llj 发表于 2014-3-3 18:01
你的配置nRF24L01的代码找不到了呀?

                  RX_ADDRESS[0] =0x01;
                          RX_ADDRESS[1] = 0x43;
                          RX_ADDRESS[2] = 0x10;
                                          RX_ADDRESS[3] = 0x10;
                                          RX_ADDRESS[4] = 0x01;
                                                NRF24L01_CE=0;                                                                                  
                                                  NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址                                                  
                                                  NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x00);    //使能通道0的自动应答   
                                                  NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0xff);//使能所有通道的接收地址           
                                                  NRF24L01_Write_Reg(WRITE_REG+RF_CH,40);             //设置RF通信频率                  
                                                 NRF24L01_Write_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度               
                                                  NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x26);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启0x0f   
                                                  NRF24L01_Write_Reg(WRITE_REG+CONFIG, 0x0f);//配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式
                                                  NRF24L01_CE = 1; //CE为高,进入接收模?       

出0入0汤圆

发表于 2014-3-5 11:35:29 | 显示全部楼层
zishiquan 发表于 2014-3-5 10:32
RX_ADDRESS[0] =0x01;
                          RX_ADDRESS[1] = 0x43;
                          RX_ADDRESS[2] ...

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

本版积分规则

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

GMT+8, 2024-10-3 03:19

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

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