gadwgdsk77gg 发表于 2012-10-6 20:55:13

mpu6050问题

近来自己开了个mpu6050板子,打算用来做mk。但是调试后发现内部有关设置的寄存器都可读可写,但是读回来的加速度值,陀螺仪值,温度值都是0,是不是芯片坏了啊???
程序如下,大家快帮忙看看啊!!!

#ifndef _mpu6050_h_
#define _mpu6050_h_

#define        SMPLRT_DIV                0x19        //陀螺仪采样率,典型值:0x07(125Hz)
#define        CONFIG_MPU    0x1A        //低通滤波频率,典型值:0x06(5Hz)
#define        GYRO_CONFIG                0x1B        //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
#define        ACCEL_CONFIG        0x1C        //加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz)
#define        ACCEL_XOUT_H        0x3B
#define        ACCEL_XOUT_L        0x3C
#define        ACCEL_YOUT_H        0x3D
#define        ACCEL_YOUT_L        0x3E
#define        ACCEL_ZOUT_H        0x3F
#define        ACCEL_ZOUT_L        0x40
#define        TEMP_OUT_H                0x41
#define        TEMP_OUT_L                0x42

#define        GYRO_XOUT_H                0x43
#define        GYRO_XOUT_L                0x44       
#define        GYRO_YOUT_H                0x45
#define        GYRO_YOUT_L                0x46
#define        GYRO_ZOUT_H                0x47
#define        GYRO_ZOUT_L                0x48

#define        PWR_MGMT_1                0x6B        //电源管理,典型值:0x00(正常启用)
#define        MPU6050_Addr0xD0

uint MpuBuf={0};
uint MpuTemp=0;

void mpu6050Config(void)
{

if( !I2CWriteOneData(MPU6050_Addr,PWR_MGMT_1, 0x80) )        //解除休眠状态
                iicErr(iicError+1); // 报告错误信息
delayms(50);
if( !I2CWriteOneData(MPU6050_Addr,SMPLRT_DIV, 0x07) )
          iicErr(iicError+1); // 报告错误信息
delayms(50);
if( !I2CWriteOneData(MPU6050_Addr,CONFIG_MPU, 0x06) )
          iicErr(iicError+1); // 报告错误信息
delayms(50);
if( !I2CWriteOneData(MPU6050_Addr,GYRO_CONFIG, 0x18) )
          iicErr(iicError+1); // 报告错误信息
delayms(50);
if( !I2CWriteOneData(MPU6050_Addr,ACCEL_CONFIG, 0x00))
          iicErr(iicError+1); // 报告错误信息
delayms(50);


}


void mpu6050Read(void)
{
        uchar datH=0,datL=0;

       
        if( !I2CReadSeries(MPU6050_Addr,ACCEL_XOUT_H,&datH,1) )
               iicErr(iicError+1); // 报告错误信息
   if( !I2CReadSeries(MPU6050_Addr,ACCEL_XOUT_L,&datL,1) )
               iicErr(iicError+1); // 报告错误信息
       MpuBuf = datH<<8 + datL;

       datH=0;datL=0;
       if( !I2CReadSeries(MPU6050_Addr,ACCEL_YOUT_H,&datH,1) )
               iicErr(iicError+1); // 报告错误信息
   if( !I2CReadSeries(MPU6050_Addr,ACCEL_YOUT_L,&datL,1) )
               iicErr(iicError+1); // 报告错误信息
       MpuBuf = datH<<8 + datL;

       datH=0;datL=0;
       if( !I2CReadSeries(MPU6050_Addr,ACCEL_ZOUT_H,&datH,1) )
               iicErr(iicError+1); // 报告错误信息
   if( !I2CReadSeries(MPU6050_Addr,ACCEL_ZOUT_L,&datL,1) )
               iicErr(iicError+1); // 报告错误信息
       MpuBuf = datH<<8 + datL;
       
       datH=0;datL=0;
       if( !I2CReadSeries(MPU6050_Addr,TEMP_OUT_H,&datH,1) )
               iicErr(iicError+1); // 报告错误信息
   if( !I2CReadSeries(MPU6050_Addr,TEMP_OUT_L,&datL,1) )
               iicErr(iicError+1); // 报告错误信息
       MpuTemp = datH<<8 + datL;

}

#endif

cloudxxcloud 发表于 2012-10-7 22:33:38

官网有参考程序吧

lovetech 发表于 2012-10-22 11:45:43

我读出来的是固定值,读WHO_AM_I里的值不是0x68,但是其他寄存器的值却是设定了什么读出来的就是什么的。这是什么情况啊?

lovetech 发表于 2012-10-22 11:46:25

楼主现在搞定没有?分享一下吧

小号 发表于 2012-11-8 19:10:36

楼主有mpu6050的封装吗?求一个

firewise 发表于 2013-4-22 13:01:39

解决了吗?可分享出来吗?

Mrdingding 发表于 2013-4-22 13:09:26

应该先读WHO am I,保证读到0x68时候,再进行下一步操作

jib943 发表于 2013-11-11 14:09:48

先读who am i 如果正常返回再看看其它引脚有没有虚焊或者连接的情况。我之前是读who am i 正常但是返回都是0,重新焊了一下片子就ok了
页: [1]
查看完整版本: mpu6050问题