智能车制作

标题: nrf24l01模块可以在不同单片机之间传输的么? [打印本页]

作者: My_EE~    时间: 2014-7-31 20:37
标题: nrf24l01模块可以在不同单片机之间传输的么?
请问有熟悉nrf24l01无线模块的么?我想做一个无线环境监测系统,430采集并发送数据,51单片机接收,但是调了几天,都没成功,已经调试成功了51与51的传输。
作者: Quixote    时间: 2014-7-31 21:00
一般用频率低的给频率高的发送。但是波特率得一样。
作者: 邵志伟    时间: 2014-7-31 21:07
我试过。没成功而已...用s12发送,一个8位的接口接收...具体型号都忘记了..好久之前的了..
作者: Jyoun    时间: 2014-7-31 21:19
必须可以。
作者: My_EE~    时间: 2014-7-31 21:49
Jyoun 发表于 2014-7-31 21:19
必须可以。

刚刚调试成功了  :lol

作者: My_EE~    时间: 2014-7-31 21:50
邵志伟 发表于 2014-7-31 21:07
我试过。没成功而已...用s12发送,一个8位的接口接收...具体型号都忘记了..好久之前的了..

原理都是模拟I/O口SPI总线,刚刚调试成功。:lol:lol

作者: 邵志伟    时间: 2014-7-31 22:54
My_EE~ 发表于 2014-7-31 21:50
原理都是模拟I/O口SPI总线,刚刚调试成功。

因为我那时候的接口是USB的一个模块,直插就能用的,不过那个是有传输速度限制,就没再搞了。
作者: sunshineabner    时间: 2014-8-1 10:04
可以咯~   
作者: 晋豹奔跑    时间: 2014-8-1 10:52
肯定可以的啊
作者: My_EE~    时间: 2014-8-2 11:06
邵志伟 发表于 2014-7-31 22:54
因为我那时候的接口是USB的一个模块,直插就能用的,不过那个是有传输速度限制,就没再搞了。

现在我也遇到这样问题了,数据量多,速度明显慢了很多,这还是近距离的

作者: My_EE~    时间: 2014-8-2 11:07
晋豹奔跑 发表于 2014-8-1 10:52
肯定可以的啊

嗯,现在问题就是速度慢,有解决方法么?

作者: My_EE~    时间: 2014-8-2 11:08
sunshineabner 发表于 2014-8-1 10:04
可以咯~

已经调试成功了,单个数据没问题,传输16个数据,就很慢了

作者: My_EE~    时间: 2014-8-2 11:10
Quixote 发表于 2014-7-31 21:00
一般用频率低的给频率高的发送。但是波特率得一样。

没有这个说,不需要设置波特率吧,这个和蓝牙通讯簿同,是射频芯片。。

作者: Quixote    时间: 2014-8-2 12:17
My_EE~ 发表于 2014-8-2 11:10
没有这个说,不需要设置波特率吧,这个和蓝牙通讯簿同,是射频芯片。。

射频芯片也得设置波特率

作者: 邵志伟    时间: 2014-8-2 12:48
My_EE~ 发表于 2014-8-2 11:06
现在我也遇到这样问题了,数据量多,速度明显慢了很多,这还是近距离的

{:3_47:}{:3_47:}怪我咯

作者: horizon_z40    时间: 2014-8-2 14:41
My_EE~ 发表于 2014-7-31 21:50
原理都是模拟I/O口SPI总线,刚刚调试成功。

是IO模拟的SPI总线吗?为什么不用真正的SPI?

作者: My_EE~    时间: 2014-8-2 17:21
horizon_z40 发表于 2014-8-2 14:41
是IO模拟的SPI总线吗?为什么不用真正的SPI?

嗯,是模拟的,因为51单片机的SPI协议也是I/O口模拟,觉得这样兼容性好些。用专用的速度会快些么?
作者: My_EE~    时间: 2014-8-2 17:22
邵志伟 发表于 2014-8-2 12:48
怪我咯

{:3_55:}  不知道有解决方法没?

作者: My_EE~    时间: 2014-8-2 17:27
Quixote 发表于 2014-8-2 12:17
射频芯片也得设置波特率

嗯,模块给了内部驱动资料,发送和接收的各个参数是一样的,直接调用了。。

作者: My_EE~    时间: 2014-8-2 17:29
My_EE~ 发表于 2014-8-2 17:27
嗯,模块给了内部驱动资料,发送和接收的各个参数是一样的,直接调用了。。

我用430的系统时钟是10M  51的是12M  ,现在传输了15个数据,很慢,还出现了乱码,请问有解决方法没?

作者: 晋豹奔跑    时间: 2014-8-2 17:33
My_EE~ 发表于 2014-8-2 11:07
嗯,现在问题就是速度慢,有解决方法么?

确保通信环境畅通的情况下依然慢,那基本无解了,你的协议速率已经定死了,串口,速度还是比较慢的。不过就算速度慢,你也可以考虑优化编码,把数据压缩一下传输,去掉没有意义的字节。

作者: My_EE~    时间: 2014-8-2 17:37
晋豹奔跑 发表于 2014-8-2 17:33
确保通信环境畅通的情况下依然慢,那基本无解了,你的协议速率已经定死了,串口,速度还是比较慢的。不过 ...

嗯,我也在打算对编码优化,数据处理那一块,估计这么模块不适合多数据传送。

作者: 晋豹奔跑    时间: 2014-8-2 17:42
My_EE~ 发表于 2014-8-2 17:37
嗯,我也在打算对编码优化,数据处理那一块,估计这么模块不适合多数据传送。

数据量大的话用sd卡吧

作者: My_EE~    时间: 2014-8-2 17:49
晋豹奔跑 发表于 2014-8-2 17:42
数据量大的话用sd卡吧

SD卡只在TFT彩屏51时弄过,先把这个弄好,核心就是无线数据传输,刚才把小数位处理屏蔽,速度果然起来了  /*switch        (L_adc_display[0]&0x0f)               //小数位        {
                  case 0x0f_adc_display[0]=9+48;break;
                  case 0x0e:L_adc_display[0]=9+48;break;
                  case 0x0d:L_adc_display[0]=8+48;break;
                  case 0x0c:L_adc_display[0]=8+48;break;
                  case 0x0b:L_adc_display[0]=7+48;break;
                  case 0x0a:L_adc_display[0]=6+48;break;
                  case 0x09:L_adc_display[0]=6+48;break;
                  case 0x08:L_adc_display[0]=5+48;break;
                  case 0x07:L_adc_display[0]=4+48;break;
                  case 0x06:L_adc_display[0]=4+48;break;
                  case 0x05:L_adc_display[0]=3+48;break;
                  case 0x04:L_adc_display[0]=3+48;break;
                  case 0x03:L_adc_display[0]=2+48;break;
                  case 0x02:L_adc_display[0]=1+48;break;
                  case 0x01:L_adc_display[0]=1+48;break;
                  case 0x00:L_adc_display[0]=1+48;break;
                  default:break;
        }*/   

作者: 晋豹奔跑    时间: 2014-8-2 17:52
你这段是发送端?
作者: My_EE~    时间: 2014-8-2 17:59
晋豹奔跑 发表于 2014-8-2 17:52
你这段是发送端?

是的

作者: 晋豹奔跑    时间: 2014-8-2 18:01
My_EE~ 发表于 2014-8-2 17:59
是的

编码过程为什么不放在接收端?

作者: My_EE~    时间: 2014-8-2 18:02
晋豹奔跑 发表于 2014-8-2 17:52
你这段是发送端?

main函数这样数据发送,有问题么?

//=========================主函数=============================================
void main()
{     
      unsigned char i=0;
      WDTCTL = WDTPW + WDTHOLD; //禁止看门狗

      LED_IO_set();
      RF24L01_IO_set();
      DS18B20_IO_set();

      InitSys();           //系统时钟初始化设置
      init_NRF24L01() ;    //NRF24L01无线模块初始化
      ADC_init();          //ADC12初始化
      //InitUART();          //串口初始化

      ds18b20_reset();
      ds18b20_write(0xcc);
      ds18b20_write(0x44);
       ms_delay();  //延时约36ms
       ms_delay();
       ms_delay();
       ms_delay();
       ms_delay();
       ms_delay();
       ms_delay();
      LED1_1;
      while(1)
      {
        if(i==12)
        {
                i=0;
                Ds18b20Convert(); //采集温度
                work_temp();       //温度处理                    
                ms_delay();


                dispaly[4]=H_adc_display[2];
                dispaly[5]=H_adc_display[1];
                dispaly[6]=H_adc_display[0];

                dispaly[7]=L_adc_display[2];
                dispaly[8]=L_adc_display[1];
                dispaly[9]=L_adc_display[0];                        

                dispaly[10]=G_adc_display[2];
                dispaly[11]=G_adc_display[1];
                dispaly[12]=G_adc_display[0];
        }
        i++;



       lignt();
       nRF24L01_TxPacket(dispaly);  //把采集好的温度数据发送出去         
       SPI_RW_Reg(WRITE_REG+STATUS,0XFF);   //清状态寄存器


      /*sprintf(s, "%d%d.%d",dispaly[4],dispaly[5],dispaly[6]  );
      PutString(s);

       Send1Char(' ');    //123校验位 (通用) 自己写上位机用
       Send1Char('1');   
       Send1Char('2');        
       Send1Char('3');
       Send1Char(' ');*/


      }
}



作者: My_EE~    时间: 2014-8-2 18:04
晋豹奔跑 发表于 2014-8-2 18:01
编码过程为什么不放在接收端?

是说直接AD采集了数据,然后发送,给51数据处理么

作者: 晋豹奔跑    时间: 2014-8-2 18:08
My_EE~ 发表于 2014-8-2 18:04
是说直接AD采集了数据,然后发送,给51数据处理么

是啊,总之平衡收发负担就好了。另外,程序我真心不想看,一看代码就恶心,我要好好享受假期…请原谅啊

作者: My_EE~    时间: 2014-8-2 18:16
晋豹奔跑 发表于 2014-8-2 18:08
是啊,总之平衡收发负担就好了。另外,程序我真心不想看,一看代码就恶心,我要好好享受假期…请原谅啊

好吧,我改动下看看。  这个暑假时豁出去啦,搞完了智能车竞赛 再来做“TI”电子竞赛。。

作者: 晋豹奔跑    时间: 2014-8-2 18:17
My_EE~ 发表于 2014-8-2 18:16
好吧,我改动下看看。  这个暑假时豁出去啦,搞完了智能车竞赛 再来做“TI”电子竞赛。。

加油哦!!!

作者: My_EE~    时间: 2014-8-2 18:20
晋豹奔跑 发表于 2014-8-2 18:17
加油哦!!!

嗯,再熬十几天就过去了

作者: 晋豹奔跑    时间: 2014-8-2 18:26
My_EE~ 发表于 2014-8-2 18:20
嗯,再熬十几天就过去了


作者: 邵志伟    时间: 2014-8-2 18:46
My_EE~ 发表于 2014-8-2 17:22
不知道有解决方法没?

我不知道...

作者: horizon_z40    时间: 2014-8-2 18:49
My_EE~ 发表于 2014-8-2 17:21
嗯,是模拟的,因为51单片机的SPI协议也是I/O口模拟,觉得这样兼容性好些。用专用的速度会快些么?

用IO口模拟SPI接口是因为单片机没有SPI模块。。像K60这种的,应该是用真正的SPI吧,这样才能保证稳定性和高速吧

作者: My_EE~    时间: 2014-8-2 19:14
horizon_z40 发表于 2014-8-2 18:49
用IO口模拟SPI接口是因为单片机没有SPI模块。。像K60这种的,应该是用真正的SPI吧,这样才能保证稳定性和 ...

嗯,借鉴啦,谢谢哈

作者: 王泽斌    时间: 2015-2-4 17:46
  NRF24L01无线模块没调通啊,求指导,给个可以用的程序




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2