[技术问答] ak8963電子羅盤

[复制链接]
1198|2
 楼主| nmmn1359 发表于 2016-11-7 17:12 | 显示全部楼层 |阅读模式
void Init_MPU6050()
{
        I2CWrite_MPU6050(I2C_ADDR,PWR_MGMT_1, 0x00);        //
        I2CWrite_MPU6050(I2C_ADDR,SMPLRT_DIV, 0x00); //1khz
        //I2CWrite_MPU6050(I2C_ADDR,SMPLRT_DIV, 0x07);
        I2CWrite_MPU6050(I2C_ADDR,CONFIG, 0x02);
        I2CWrite_MPU6050(I2C_ADDR,GYRO_CONFIG, 0x00);        //250dps
        //I2CWrite_MPU6050(I2C_ADDR,GYRO_CONFIG, 0x03);
        I2CWrite_MPU6050(I2C_ADDR,ACCEL_CONFIG, 0x00);  //2g
        I2CWrite_MPU6050(I2C_ADDR,ACCEL_CONFIG2,0x02);//lpf
        I2CWrite_MPU6050(AK8963_ADDRESS,AK8963_CNTL1,0x02);//mode1 0110
        I2CWrite_MPU6050(I2C_ADDR,INT_PIN_CFG,0x02);
}

void mag()
{
                //        I2CWrite_MPU6050(AK8963_ADDRESS,AK8963_CNTL1,0x02);
                        if(I2CRead_MPU6050(AK8963_ADDRESS,AK8963_ST1)&0x01)
                        {
                        m[0] = I2CRead_MPU6050(AK8963_ADDRESS,AK8963_XOUT_L); // read Gyroscope X_Low  value
                        m[1] = I2CRead_MPU6050(AK8963_ADDRESS,AK8963_XOUT_H); // read Gyroscope X_High value

                        m[2] = I2CRead_MPU6050(AK8963_ADDRESS,AK8963_YOUT_L); // read Gyroscope Y_Low  value
                        m[3] = I2CRead_MPU6050(AK8963_ADDRESS,AK8963_YOUT_H); // read Gyroscope Y_High value

                        m[4] = I2CRead_MPU6050(AK8963_ADDRESS,AK8963_ZOUT_L); // read Gyroscope Z_Low  value
                        m[5] = I2CRead_MPU6050(AK8963_ADDRESS,AK8963_ZOUT_H); // read Gyroscope Z_High value
                        m[6]=I2CRead_MPU6050(AK8963_ADDRESS,AK8963_ST2);

                        if(!(m[6]&0x08))
                        {mX=((m[1]<<8)+m[0])*50/256*4912/8190.00;
                         mY=((m[3]<<8)+m[2])*52/256*4912/8190.00;
                         mZ=((m[5]<<8)+m[4])*40/256*4912/8190.00;}

                        printf("mX=%d, mY=%d, mZ=%d\n", (int)mX, (int)mY,(int) mZ);
                        }
}

為何偶讀mag data獨到一半會突然不行?我用debug除錯發現執行到if(I2CRead_MPU6050(AK8963_ADDRESS,AK8963_ST1)&0x01)這時,會判斷False而不執行if裡的i2c read
dongnanxibei 发表于 2016-11-7 18:38 | 显示全部楼层
IIC的设备一般挺多的。这里就是。不过也有一些用的是SPI。
捉虫天师 发表于 2016-11-7 21:53 | 显示全部楼层
不如给出这个芯片的手册啊,要不还是不懂。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

11

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部