搜索
bottom↓
回复: 13

SI4432是不是烧坏了

[复制链接]

出0入0汤圆

发表于 2013-4-8 20:58:32 | 显示全部楼层 |阅读模式
因项目需求,要用到无线通信模块,刚好队友那里买了一对SI4432。研究了个把星期,把手册和编程指南都过了一遍,然后在网上找到相关的程序,移植到Atmega128上面,一番调试后,基本上算是通了,但很奇怪,传输距离只有5米的样子。然后以为是硬件问题(单片机用的是5V电压),队友赶着做了一块转接板,其实就是在单片机与模块间串入电阻,做好后一试,基本还是一样的。不得已,重新看资料,看寄存器配置,与其他的demo程序对比,发现模块的发射功率设小了,于是想当然的把寄存器改成了最大,然后。。。。悲剧发生了,有一块是下完程序后工作基本正常,还有一块下完后,发现除了能够启动外,其他什么都不正常了,把功率再次设低后,也恢复不了正常状态了,我想问问各位前辈,是不是因为模块功率被设置过大,烧坏了。。。。本人现在是自动化专业的学生,没学过高频跟通信,完全看不懂,手册上面的寄存器配置,完全是照着别人的程序来,下面把寄存器的配置部分贴出来给大家看看,是不是设置的有问题。先在此谢过了!
  1. void Init_4432(void)
  2. {
  3.         Init_spi();       
  4.         SpiWriteRegister(0x07, 0x80);         //恢复所有寄存器为默认值
  5.         Delayms(500);
  6.        
  7.         SpiWriteRegister(0x03, 0x00);         //清除所有中断标志
  8.         SpiWriteRegister(0x04, 0x00);   //清除所有中断标志
  9.         SpiWriteRegister(0x05, 0x00);         //清除所有中断使能
  10.         SpiWriteRegister(0x06, 0x00);  //清除所有中断使能

  11.         SpiWriteRegister(0x06, 0x80);  //使能同步字侦测
  12.         SpiWriteRegister(0x07, 0x01);  //进入 Ready 模式
  13.        
  14.         SpiWriteRegister(0x09, 0x7f);  //负载电容= 12P
  15.         SpiWriteRegister(0x0a, 0x05);  //关闭低频输出
  16.         SpiWriteRegister(0x0b, 0xea);  //GPIO 0 当做普通输出口
  17.         SpiWriteRegister(0x0c, 0xea);  //GPIO 1 当做普通输出口
  18.         SpiWriteRegister(0x0d, 0xf4);  //GPIO 2 输出收到的数据
  19.         SpiWriteRegister(0x70, 0x2c);  
  20.         SpiWriteRegister(0x1d, 0x40);  //使能 afc
  21.        
  22.         // 1.2K bps setting
  23.         SpiWriteRegister(0x1c, 0x16);  //IF滤波带宽
  24.         SpiWriteRegister(0x20, 0x83);   
  25.         SpiWriteRegister(0x21, 0xc0);  //
  26.         SpiWriteRegister(0x22, 0x13);  //
  27.         SpiWriteRegister(0x23, 0xa9);  //
  28.         SpiWriteRegister(0x24, 0x00);  //
  29.         SpiWriteRegister(0x25, 0x04);  //
  30.         SpiWriteRegister(0x2a, 0x14);
  31.         SpiWriteRegister(0x6e, 0x09);
  32.         SpiWriteRegister(0x6f, 0xd5);
  33.         //1.2K bps setting end               
  34.        
  35.         SpiWriteRegister(0x30, 0x8c);  //使能PH+ FIFO模式,高位在前面,使能CRC校验
  36.         SpiWriteRegister(0x32, 0xff);  //byte 0,1,2,3 作为头码
  37.         SpiWriteRegister(0x33, 0x42);  //byte 0,1,2,3 是头码,同步字3,2 是同步字
  38.         SpiWriteRegister(0x34, 16);    //发射16个Nibble的Preamble
  39.         SpiWriteRegister(0x35, 0x20);  //需要检测4个nibble的Preamble
  40.         SpiWriteRegister(0x36, 0x2d);  //同步字为 0x2dd4
  41.         SpiWriteRegister(0x37, 0xd4);
  42.         SpiWriteRegister(0x38, 0x00);
  43.         SpiWriteRegister(0x39, 0x00);
  44.         SpiWriteRegister(0x3a, 's');   //发射的头码为:"swwx"
  45.         SpiWriteRegister(0x3b, 'w');
  46.         SpiWriteRegister(0x3c, 'w');
  47.         SpiWriteRegister(0x3d, 'x');
  48.         SpiWriteRegister(0x3e, TxBuf_Len);    //总共发射TxBuf_Len个字节的数据
  49.         SpiWriteRegister(0x3f, 's');   //需要校验的头码为:"swwx"
  50.         SpiWriteRegister(0x40, 'w');
  51.         SpiWriteRegister(0x41, 'w');
  52.         SpiWriteRegister(0x42, 'x');
  53.         SpiWriteRegister(0x43, 0xff);  //头码1,2,3,4 的所有位都需要校验
  54.         SpiWriteRegister(0x44, 0xff);  //
  55.         SpiWriteRegister(0x45, 0xff);  //
  56.         SpiWriteRegister(0x46, 0xff);  //
  57.        
  58.         SpiWriteRegister(0x6A, 0x0B); //write 0x0B to the AGC Override 2 register
  59.         //set ADC reference voltage to 0.9V
  60.         SpiWriteRegister(0x68, 0x04); //write 0x04 to the Deltasigma ADC Tuning 2 register
  61.         SpiWriteRegister(0x1F, 0x03); //write 0x03 to the Clock Recovery Gearshift Override register
  62.         这里功率该设置多大好
  63.         SpiWriteRegister(0x6d, 0x07);  //发射功率设置  0x00:+1dBM  0x01:+2dBM  0x02:+5dBM  0x03:+8dBM  0x04:+11dBM  0x05:+14dBM  0x06:+17dBM  0x07:+20dBM
  64.         SpiWriteRegister(0x79, 0x0);   //不需要跳频
  65.         SpiWriteRegister(0x7a, 0x0);   //不需要跳频
  66.         SpiWriteRegister(0x71, 0x22);  //发射不需要CLK,FiFo,FSK模式
  67.         SpiWriteRegister(0x72, 0x30);  //频偏为 30KHz
  68.         SpiWriteRegister(0x73, 0x0);   //没有频率偏差
  69.         SpiWriteRegister(0x74, 0x0);   //没有频率偏差
  70.         SpiWriteRegister(0x75, 0x53);  //频率设置 434
  71.         SpiWriteRegister(0x76, 0x57);  //标称载波频率 57
  72.         SpiWriteRegister(0x77, 0x80);  //标称载波频率 80
  73.         SpiWriteRegister(0x0e, 0x00);         // 天线开关不在发射,接收状态

  74. }
复制代码

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2013-4-8 20:59:00 | 显示全部楼层
自己先顶一下

出0入0汤圆

 楼主| 发表于 2013-4-9 08:40:02 来自手机 | 显示全部楼层
再次顶起,不能沉了


出0入0汤圆

 楼主| 发表于 2013-4-9 11:18:15 | 显示全部楼层
来个人啊。。。

出0入0汤圆

 楼主| 发表于 2013-4-9 15:07:12 | 显示全部楼层
再次顶起。。。。。。。。

出0入0汤圆

 楼主| 发表于 2013-4-11 09:53:15 | 显示全部楼层

出0入0汤圆

发表于 2013-4-11 11:12:09 | 显示全部楼层
人类同学 发表于 2013-4-11 09:53

先验证SPI正确吗?最好加个读取寄存器验证。

出0入0汤圆

 楼主| 发表于 2013-4-11 18:01:42 | 显示全部楼层
终于有人来回复了,非常感谢。。。。
SPI读取应该是正确的,不然前面的通信不会成功,你的意思是把寄存器的值读回来到串口查看真确与否?

出0入0汤圆

 楼主| 发表于 2013-4-23 23:02:00 | 显示全部楼层
问题解决

出0入0汤圆

发表于 2013-4-24 00:46:51 | 显示全部楼层
我碰到的问题是发完电流100多毫安,降不下来,仅有少数机会能降到30mA,没辙。

出0入0汤圆

发表于 2013-5-16 09:39:18 | 显示全部楼层
人类同学 发表于 2013-4-23 23:02
问题解决

楼主,你的是什么问题呢?可否分享下?

出0入0汤圆

发表于 2013-5-16 17:24:28 | 显示全部楼层
还对新的试试看不就知道,这样找问题才快!

出0入0汤圆

发表于 2013-6-8 20:33:55 | 显示全部楼层
楼主,我和你一样啊,也是AVR单片机meg128,目前保证芯片都正常,硬件SPI读写都正常,频谱仪显示发送的时候有数据包出来,就是死活收不到啊,希望楼主提供demo程序一份给小弟,感激不尽呐

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-8-26 13:11

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

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