搜索
bottom↓
回复: 19

【讨论】hmc5883L 读出的数据不对

[复制链接]

出0入0汤圆

发表于 2011-11-17 11:15:08 | 显示全部楼层 |阅读模式
//以下是arduino程序源码
#include <Wire.h>

#define HMC5883_WriteAddress 0x1E //  i.e 0x3C >> 1
#define HMC5883_ModeRegisterAddress 0x02
#define HMC5883_ContinuousModeCommand 0x00
#define HMC5883_DataOutputXMSBAddress  0x03


int outputData[6];

void setup()
{  
    //SerialUSB.begin(9600);
    Wire.begin();       //Initiate the Wire library and join the I2C bus as a master
    //初始化部分
    Wire.beginTransmission(HMC5883_WriteAddress); //Initiate a transmission with HMC5883 (Write address).
    Wire.send(HMC5883_ModeRegisterAddress);       //Place the Mode Register Address in send-buffer.
    Wire.send(HMC5883_ContinuousModeCommand);     //Place the command for Continuous operation Mode in send-buffer.
    Wire.endTransmission();                       //Send the send-buffer to HMC5883 and end the I2C transmission.
    delay(100);
}

void loop() {

    int i,x,y,z;
    double angle;

    Wire.beginTransmission(HMC5883_WriteAddress);  //Initiate a transmission with HMC5883 (Write address).            
    Wire.send(HMC5883_DataOutputXMSBAddress); //select register 3, X MSB register
    Wire.endTransmission();
  
    Wire.requestFrom(HMC5883_WriteAddress,6);      //Request 6 bytes of data from the address specified,2 registers per axis.
    delay(500);

    //Read the value of magnetic components X,Y and Z

    if(6 <= Wire.available()) // If the number of bytes available for reading be <=6.
    {
        for(i=0;i<6;i++)
        {
            outputData=Wire.receive();  //Store the data in outputData buffer
        }
    }

    x=outputData[0] << 8 | outputData[1]; //Combine MSB and LSB of X Data output register
    z=outputData[2] << 8 | outputData[3]; //Combine MSB and LSB of Z Data output register
    y=outputData[4] << 8 | outputData[5]; //Combine MSB and LSB of Y Data output register
       
SerialUSB.print("X=");
        SerialUSB.print(x);
        SerialUSB.print("  Y=");
        SerialUSB.print(y);
        SerialUSB.print("  Z=");
        SerialUSB.print(z);


疑问:1.我将上述初始化部分代码放到setup里面,读出来的数据没有变化,而只有将初始化的部分放到loop里面,每次程序运行都初始化的时候 数据才有变化,请问这个是怎么回事呢?初始化代码就应该是放到setup里的呀。
2.我的读书如下:

X=65279.00  Y=65535.00  Z=65534.00
X=65279.00  Y=65535.00  Z=65534.00
X=65279.00  Y=65535.00  Z=65534.00
X=65279.00  Y=65280.00  Z=254.00
X=65535.00  Y=65280.00  Z=255.00
X=65535.00  Y=65280.00  Z=255.00
X=65535.00  Y=65281.00  Z=511.00
X=255.00  Y=65281.00  Z=256.00
X=255.00  Y=65280.00  Z=0.00
X=255.00  Y=65280.00  Z=0.00
X=511.00  Y=65280.00  Z=1.00
X=511.00  Y=65535.00  Z=65281.00
X=511.00  Y=65535.00  Z=65281.00
X=511.00  Y=65535.00  Z=65281.00
X=511.00  Y=65535.00  Z=65281.00
X=511.00  Y=65534.00  Z=65025.00
X=255.00  Y=65534.00  Z=65024.00
X=255.00  Y=65534.00  Z=65024.00
X=65535.00  Y=65534.00  Z=65279.00
X=65535.00  Y=65534.00  Z=65279.00
X=255.00  Y=65534.00  Z=65024.00
X=65535.00  Y=65534.00  Z=65279.00
X=65535.00  Y=65534.00  Z=65279.00
X=65279.00  Y=65535.00  Z=65534.00
X=65279.00  Y=65535.00  Z=65534.00
X=65279.00  Y=65535.00  Z=65534.00
X=65279.00  Y=65280.00  Z=254.00
X=65535.00  Y=65280.00  Z=255.00
X=65535.00  Y=65280.00  Z=255.00
X=65535.00  Y=65281.00  Z=511.00
从这个数据上看 应该不对。请问这个是怎么回事呢?

谢谢!

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

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

出0入0汤圆

 楼主| 发表于 2011-11-17 11:40:15 | 显示全部楼层
回复【楼主位】Farid  
-----------------------------------------------------------------------

另外 我的识别寄存器10, 11, 12 读出来的都是0 是不是硬件损坏了呢?

出0入0汤圆

发表于 2011-11-17 11:54:26 | 显示全部楼层
和我的情况一模一样!同是天涯沦落人啊……你看看我的帖子

出0入0汤圆

 楼主| 发表于 2011-11-17 17:17:15 | 显示全部楼层
回复【2楼】aishiqi1992  小鸡
-----------------------------------------------------------------------

你的识别寄存器10, 11, 12 读出来的也都是0 ?

出0入0汤圆

发表于 2011-11-19 19:32:28 | 显示全部楼层
回复【3楼】Farid  
-----------------------------------------------------------------------

那倒不是,我就这一点比你好!!

出0入0汤圆

 楼主| 发表于 2011-11-22 14:10:55 | 显示全部楼层
回复【4楼】aishiqi1992  小鸡
-----------------------------------------------------------------------

小鸡,你的问题解决了么?我的还是没有……纠结

出0入0汤圆

发表于 2011-11-23 20:28:40 | 显示全部楼层
回复【5楼】Farid  
回复【4楼】aishiqi1992  小鸡
-----------------------------------------------------------------------
小鸡,你的问题解决了么?我的还是没有……纠结
-----------------------------------------------------------------------

还没有,我又在网上买了两套,他要是再不行,我就愤怒的买热风枪了!

出0入0汤圆

 楼主| 发表于 2011-11-25 15:37:20 | 显示全部楼层
回复【6楼】aishiqi1992  小鸡
-----------------------------------------------------------------------

你的新板子到了?有没有试行不行?我的还是无解。打算换了……

出0入0汤圆

发表于 2011-11-27 15:34:57 | 显示全部楼层
回复【7楼】Farid  
-----------------------------------------------------------------------

今天刚到,,我更无语了。。竟然什么都读不出来。。。难道是我焊接的问题,两个都读不出来,我崩溃了。。

出0入0汤圆

发表于 2011-11-27 15:45:39 | 显示全部楼层
HMC5883L对焊接温度很敏感,很可能是焊接时搞坏了。还有那个4.7uf的电容,要用质量好的,串联阻抗要小。

出0入0汤圆

发表于 2011-11-28 08:04:07 | 显示全部楼层
回复【7楼】Farid  
-----------------------------------------------------------------------

有转机了……有一个板子能用了,果然是焊接的问题!太难焊了,很多引脚不知道有没有焊上。我用刀头焊的。

出0入0汤圆

 楼主| 发表于 2011-12-12 11:38:44 | 显示全部楼层
回复【10楼】aishiqi1992  小鸡
-----------------------------------------------------------------------

你的现在能用了么?

出0入0汤圆

发表于 2011-12-14 11:23:59 | 显示全部楼层
回复【11楼】Farid  
回复【10楼】aishiqi1992  小鸡
-----------------------------------------------------------------------
你的现在能用了么?
-----------------------------------------------------------------------

有一个已经能用啦!激动呦

出0入0汤圆

发表于 2012-1-31 20:05:33 | 显示全部楼层
唉,这个。。。同纠结啊,貌似我的可以读,但是最后算出来的数据不对。。。。是参考淘宝的程序。。。

出0入0汤圆

发表于 2012-2-15 10:58:14 | 显示全部楼层
我有这方面的程序 是L3g4200d HMC5883L  ADXL345 综合起来的 可以参考下我的帖子  算法也正在研究

出0入0汤圆

发表于 2012-4-15 13:12:40 | 显示全部楼层
不知道楼主的问题解决没有,因为数据在传感器内是补码形似存放的,输出的大于60000的数据其实是负值 ,需要在原数据上加负号再输出

出0入0汤圆

发表于 2012-4-23 13:21:39 | 显示全部楼层

怎么我的数据是这么大呢?
x            y          z
14847,-4354,-23554;
14591,-4354,-23298;
14591,-3074,-22786;
14335,-7426,-23042;
14847,-4610,-22786;
15103,-4098,-22786;

出0入0汤圆

发表于 2012-5-22 14:53:31 | 显示全部楼层
Name_006 发表于 2012-2-15 10:58
我有这方面的程序 是L3g4200d HMC5883L  ADXL345 综合起来的 可以参考下我的帖子  算法也正在研究 ...

能把你的程序贴出来,学习学习不?

出0入0汤圆

发表于 2012-5-22 17:27:41 | 显示全部楼层
本帖最后由 Name_006 于 2012-5-22 17:28 编辑
xiwangyangguang 发表于 2012-5-22 14:53
能把你的程序贴出来,学习学习不?


http://www.ourdev.cn/forum.php?m ... ;highlight=L3g4200d  搜索下就有啦   貌似下载不了  到淘宝找我QQ   或者加那个群 群里有

出0入0汤圆

发表于 2012-8-30 00:31:20 | 显示全部楼层
Farid 发表于 2011-11-17 17:17
回复【2楼】aishiqi1992  小鸡
----------------------------------------------------------------------- ...

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

本版积分规则

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

GMT+8, 2024-8-26 23:21

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

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