搜索
bottom↓
回复: 23

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

[复制链接]

出0入0汤圆

发表于 2013-1-25 11:19:32 | 显示全部楼层 |阅读模式
做了个测电压用的无线模块,无线用的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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-1-25 13:30:15 | 显示全部楼层
SPI_RW里
if(PINB&0x10)temp++;                         // capture current MISO bit
将PINB&0x10改为Read_24L01_MISO,试试
再问一下,楼主用哪个引脚接的MISO?

出0入0汤圆

 楼主| 发表于 2013-1-25 13:42:20 | 显示全部楼层
lcw_swust 发表于 2013-1-25 13:30
SPI_RW里
if(PINB&0x10)temp++;                         // capture current MISO bit
将PINB&0x10改为Rea ...

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

出0入0汤圆

 楼主| 发表于 2013-1-25 23:03:07 | 显示全部楼层
lcw_swust 发表于 2013-1-25 13:30
SPI_RW里
if(PINB&0x10)temp++;                         // capture current MISO bit
将PINB&0x10改为Rea ...

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

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2013-1-26 11:24:50 | 显示全部楼层
lcw_swust 发表于 2013-1-26 09:24
在楼主的程序里,发送端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


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

上传更改后的程序如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-1-26 12:04:41 | 显示全部楼层
gzc581 发表于 2013-1-26 11:24
你好,根据你的提示,并参考原厂使用文档,做了如下更改:

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脚都可以不接单片机直接置为高电平。(以免程序误操作)

出0入0汤圆

 楼主| 发表于 2013-1-27 02:29:39 | 显示全部楼层
lcw_swust 发表于 2013-1-26 12:04
对楼主的建议:
1.电路贴出来看看,注意NRF24L01的工作电压。
2.检查电路看引脚是否正确连接,比如程序里 ...

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

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


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

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

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

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

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


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-1-27 08:28:48 | 显示全部楼层
NRF24L01P 的enhanced shockburst有crc校验功能,可以替换你的模块试试

出0入0汤圆

发表于 2013-1-27 09:23:56 | 显示全部楼层
gzc581 发表于 2013-1-27 02:29
首先真的很感谢你一直都对我的问题有回复,并提出很多有用的建议,要是换了别人可能早就不理我了,非常感 ...

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

出0入0汤圆

 楼主| 发表于 2013-1-27 09:50:05 | 显示全部楼层
lcw_swust 发表于 2013-1-27 09:23
楼主半夜回贴,令人佩服
关于第3点,楼主可能没有理解,用程序来说,我是要楼主这样试:
while(1)


你好,作如下更改:

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


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

悬空或是接3.3V都是0XFF

谢谢

出0入0汤圆

 楼主| 发表于 2013-1-27 11:53:53 | 显示全部楼层
lcw_swust 发表于 2013-1-27 09:23
楼主半夜回贴,令人佩服
关于第3点,楼主可能没有理解,用程序来说,我是要楼主这样试:
while(1)

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


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-1-27 13:43:56 | 显示全部楼层
gzc581 发表于 2013-1-27 09:50
你好,作如下更改:

UART_Putchar(SPI_RW(0x55));

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

出0入0汤圆

 楼主| 发表于 2013-1-27 15:58:03 | 显示全部楼层
lcw_swust 发表于 2013-1-27 13:43
接GND输出的是0x55;
楼主觉得对吗?应该是0X00才对吧,再检查下电路看看

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

出0入0汤圆

 楼主| 发表于 2013-1-27 16:00:18 | 显示全部楼层
lcw_swust 发表于 2013-1-27 13:43
接GND输出的是0x55;
楼主觉得对吗?应该是0X00才对吧,再检查下电路看看

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-1-27 16:29:58 | 显示全部楼层

这是pcb和最新的程序

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-1-28 10:41:59 | 显示全部楼层
gzc581 发表于 2013-1-27 16:29
这是pcb和最新的程序

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-1-28 23:17:11 | 显示全部楼层
lcw_swust 发表于 2013-1-28 10:41
这么看来,我也没办法,给你个51单片机程序参考一下

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

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

出0入0汤圆

发表于 2013-1-29 09:14:01 | 显示全部楼层
gzc581 发表于 2013-1-28 23:17
http://www.amobbs.com/thread-5518049-1-1.html

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

好的,恭喜你

出0入0汤圆

发表于 2013-6-7 18:02:48 | 显示全部楼层
问题算是解决了  居然是硬件问题  换了一块板 已经调通   可惜原来那块板的硬件问题还没找到!!!

出0入0汤圆

发表于 2013-10-26 20:31:17 | 显示全部楼层
gzc581 发表于 2013-1-28 23:17
http://www.amobbs.com/thread-5518049-1-1.html

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

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

出0入0汤圆

发表于 2013-10-26 20:31:33 | 显示全部楼层
mioc 发表于 2013-10-26 20:31
有联系方式不,我也遇见和你一样的问题了。想找你讨论下

要不 你联系我吧。540317741

出0入0汤圆

发表于 2013-10-27 21:43:58 | 显示全部楼层
你还在看你的帖子不?

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-7-24 02:17

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

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