gzc581 发表于 2013-1-25 11:19:32

【求助】ATmega8 I/O 驱动NRF24L01收不到数据

做了个测电压用的无线模块,无线用的NRF24L01,现在AD完全正常,就是无线接收端收不到数据。

流程如下:

发射端:AD0~3采集 电压信号=》 发射端通过串口输出采集到的电压数据=》 当0~3通道都采集完了通过无线发送数据包

接收端:设置接收模式 =》 如果接收缓存空,串口输出0x11
                                     如果收到了,校验,校验失败输出0x22

问题:现在接收端输出的全是0x11.纠结死了,也发现不了问题。用示波器看每个引脚波形基本都符合时序,但是对不对不知道

调试平台: AVR STUDIO4 + GCC

代码如下:

写的易读性还是有的,应该很容易看懂每部分,注释也很清楚
T-ctrl为发射端代码
T-rec为接收端代码

由于是做好的PCB,所以用单片机自带的SPI程序我用不上呀...谢谢各位

5V|PD6-CSN|PB0-MOSI|PB2-IRQ
GND| PD5-CE   |PD7-SCK    | PB1-MISO

lcw_swust 发表于 2013-1-25 13:30:15

SPI_RW里
if(PINB&0x10)temp++;                         // capture current MISO bit
将PINB&0x10改为Read_24L01_MISO,试试
再问一下,楼主用哪个引脚接的MISO?

gzc581 发表于 2013-1-25 13:42:20

lcw_swust 发表于 2013-1-25 13:30 static/image/common/back.gif
SPI_RW里
if(PINB&0x10)temp++;                         // capture current MISO bit
将PINB&0x10改为Rea ...

你好,我用的PB1接的MISO,谢谢~我改改试试

gzc581 发表于 2013-1-25 23:03:07

lcw_swust 发表于 2013-1-25 13:30 static/image/common/back.gif
SPI_RW里
if(PINB&0x10)temp++;                         // capture current MISO bit
将PINB&0x10改为Rea ...

你好,我看了下,那里确实有问题。我又改了下,但发现还是不行,情况跟原来一样...

lcw_swust 发表于 2013-1-26 09:24:05

在楼主的程序里,发送端init_NRF24L01里将NRF24L01配置为了接收模式,
在nRF24L01_TxPacket里将NRF24L01配置为发送模式,貌似这样不对,
切换接收与发送模式最好是这样:
掉电(PWR_UP=0)->需要的模式->上电(PWR_UP=1)
此外,楼主的发送程序里nRF24L01_TxPacket之后马上就SPI_RW_Reg,这样不太好,应该等待发送完毕再进行其它操作
此外,建议楼主监测STATUS的值

gzc581 发表于 2013-1-26 11:24:50

lcw_swust 发表于 2013-1-26 09:24 static/image/common/back.gif
在楼主的程序里,发送端init_NRF24L01里将NRF24L01配置为了接收模式,
在nRF24L01_TxPacket里将NRF24L01配 ...

你好,根据你的提示,并参考原厂使用文档,做了如下更改:

1.在init_NRF24L01 里分别配置发射端和接受端的寄存器

2.nRF24L01_TxPacket 后 延时10ms

3.根据   上传的使用文档,注销了init_NRF24L01 里的
      Hign_24L01_CSN;   // Spi disable
      Low_24L01_SCK;   // Spi clock line init high


但是还是不行,问题跟原来一样。

上传更改后的程序如下:

lcw_swust 发表于 2013-1-26 12:04:41

gzc581 发表于 2013-1-26 11:24 static/image/common/back.gif
你好,根据你的提示,并参考原厂使用文档,做了如下更改:

1.在init_NRF24L01 里分别配置发射端和接受端 ...

对楼主的建议:
1.电路贴出来看看,注意NRF24L01的工作电压。
2.检查电路看引脚是否正确连接,比如程序里这样写
   while(1){Low_24L01_CE;delayms(1000);Hign_24L01_CE;delayms(1000);}
然后用万用表去测量NRF24L01的CE脚是否受程序控制产生高低电平,并测量具体的电压值
将每个脚都测试一下。
3.我对MISO脚表示强烈怀疑,楼主说 改与不改情况一样。
那就请楼主做个测试,将MISO脚接到GND,调用SPI_RW函数,看返回值是多少;
然后将MISO脚接到VCC,调用SPI_RW函数,看返回值是多少;
4.检查NRF24L01是否正常工作,可以用这种办法:
设置NRF24L01配置寄存器(CONFIG)(或其它寄存器)为某值,然后读取该寄存的值,看是否与设置值相同,
再将设置该寄存器为另一个值,再次将其读出看是否为设置值。
5.不管接收端还是发送端,CE脚都可以不接单片机直接置为高电平。(以免程序误操作)

gzc581 发表于 2013-1-27 02:29:39

lcw_swust 发表于 2013-1-26 12:04 static/image/common/back.gif
对楼主的建议:
1.电路贴出来看看,注意NRF24L01的工作电压。
2.检查电路看引脚是否正确连接,比如程序里 ...

首先真的很感谢你一直都对我的问题有回复,并提出很多有用的建议,要是换了别人可能早就不理我了,非常感激

1.电路图如下:收发的无线连接都一样,用wirless表示,电压检测正常


2.使用示波器检查收发每个引脚,都很正常

3.调用SPI_RW, 将内容改成如果收到高电平则串口输出0x55,低电平0x66,拔掉无线模块,直接用导线将VCC , GND 引到PB1上,串口很快输出0x55   /   0x66正常

4.寄存器用串口检测,读写正常

5.将CE置高,注释掉所有CE置高低操作,电压表确认。仍旧不行.....

6.PB1在高阻和弱上拉都试过
初始化里注释掉的又恢复了也都试过....


还是不行.....都快崩溃了,真纠结

amfan 发表于 2013-1-27 08:28:48

NRF24L01P 的enhanced shockburst有crc校验功能,可以替换你的模块试试

lcw_swust 发表于 2013-1-27 09:23:56

gzc581 发表于 2013-1-27 02:29 static/image/common/back.gif
首先真的很感谢你一直都对我的问题有回复,并提出很多有用的建议,要是换了别人可能早就不理我了,非常感 ...

楼主半夜回贴,令人佩服
关于第3点,楼主可能没有理解,用程序来说,我是要楼主这样试:
while(1)
{
UART_Putchar(SPI_RW());
delayms(500);
}

gzc581 发表于 2013-1-27 09:50:05

lcw_swust 发表于 2013-1-27 09:23 static/image/common/back.gif
楼主半夜回贴,令人佩服
关于第3点,楼主可能没有理解,用程序来说,我是要楼主这样试:
while(1)



你好,作如下更改:

UART_Putchar(SPI_RW(0x55));
_delay_ms(500);


接GND输出的是0x55;
由于是
PINB&=0B11111101
PORTB|=0B00000010弱上拉

悬空或是接3.3V都是0XFF

谢谢

gzc581 发表于 2013-1-27 11:53:53

lcw_swust 发表于 2013-1-27 09:23 static/image/common/back.gif
楼主半夜回贴,令人佩服
关于第3点,楼主可能没有理解,用程序来说,我是要楼主这样试:
while(1)


刚才用示波器看了一下,其余都很正常,就是发射和接受的MISO都出现了三角波...


另外发射端的MOSI/MISO在空闲的时候居然是高电平....

lcw_swust 发表于 2013-1-27 13:43:56

gzc581 发表于 2013-1-27 09:50 static/image/common/back.gif
你好,作如下更改:

UART_Putchar(SPI_RW(0x55));


接GND输出的是0x55;
楼主觉得对吗?应该是0X00才对吧,再检查下电路看看

gzc581 发表于 2013-1-27 15:58:03

lcw_swust 发表于 2013-1-27 13:43 static/image/common/back.gif
接GND输出的是0x55;
楼主觉得对吗?应该是0X00才对吧,再检查下电路看看

我擦,奇了怪了....昨天调程序睡太晚了,今天早上迷迷糊糊按你说的试了下居然输出了0x55......现在再试全是0x00呀.......难道早上我做梦做的这个测试吗....

gzc581 发表于 2013-1-27 16:00:18

lcw_swust 发表于 2013-1-27 13:43 static/image/common/back.gif
接GND输出的是0x55;
楼主觉得对吗?应该是0X00才对吧,再检查下电路看看

gzc581 发表于 2013-1-27 16:29:58


这是pcb和最新的程序

lcw_swust 发表于 2013-1-28 10:41:59

gzc581 发表于 2013-1-27 16:29 static/image/common/back.gif
这是pcb和最新的程序

这么看来,我也没办法,给你个51单片机程序参考一下

gzc581 发表于 2013-1-28 23:17:11

lcw_swust 发表于 2013-1-28 10:41 static/image/common/back.gif
这么看来,我也没办法,给你个51单片机程序参考一下

http://www.amobbs.com/thread-5518049-1-1.html

虽然没有用到您的方法,但是参照原来的帖子还是解决了,非常感谢您前几天的帮助

lcw_swust 发表于 2013-1-29 09:14:01

gzc581 发表于 2013-1-28 23:17 static/image/common/back.gif
http://www.amobbs.com/thread-5518049-1-1.html

虽然没有用到您的方法,但是参照原来的帖子还是解决了 ...

好的,恭喜你

zihan0855 发表于 2013-6-7 18:02:48

问题算是解决了居然是硬件问题换了一块板 已经调通   可惜原来那块板的硬件问题还没找到!!!

mioc 发表于 2013-10-26 20:31:17

gzc581 发表于 2013-1-28 23:17 static/image/common/back.gif
http://www.amobbs.com/thread-5518049-1-1.html

虽然没有用到您的方法,但是参照原来的帖子还是解决了 ...

有联系方式不,我也遇见和你一样的问题了。想找你讨论下

mioc 发表于 2013-10-26 20:31:33

mioc 发表于 2013-10-26 20:31 static/image/common/back.gif
有联系方式不,我也遇见和你一样的问题了。想找你讨论下

要不 你联系我吧。540317741

mioc 发表于 2013-10-27 21:43:58

你还在看你的帖子不?

阿伟 发表于 2015-8-30 18:20:48

有用MEGA8硬件spi写的吗 ?
页: [1]
查看完整版本: 【求助】ATmega8 I/O 驱动NRF24L01收不到数据