打印
[技术问答]

ak8963電子羅盤

[复制链接]
1054|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

粉丝