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
官网有参考程序吧 我读出来的是固定值,读WHO_AM_I里的值不是0x68,但是其他寄存器的值却是设定了什么读出来的就是什么的。这是什么情况啊? 楼主现在搞定没有?分享一下吧 楼主有mpu6050的封装吗?求一个 解决了吗?可分享出来吗? 应该先读WHO am I,保证读到0x68时候,再进行下一步操作 先读who am i 如果正常返回再看看其它引脚有没有虚焊或者连接的情况。我之前是读who am i 正常但是返回都是0,重新焊了一下片子就ok了
页:
[1]