MPU6050读出来的数据是0
MPU6050读出来的数据是0,但我读WHO AM I 的时候返回值确是0X68,证明通信连接了吧?但为什么读其他寄存器的时候返回值却是0啊。。。。。求大神指导。。。 初始化没做好吧 zjykwym 发表于 2013-3-26 17:58 static/image/common/back.gif初始化没做好吧
Single_Write(SlaveAddress,PWR_MGMT_1, 0x00); //
Single_Write(SlaveAddress,SMPLRT_DIV, 0x07); //
Single_Write(SlaveAddress,CONFIG, 0x06); //±2000°
Single_Write(SlaveAddress,GYRO_CONFIG, 0x18 );//
Single_Write(SlaveAddress,ACCEL_CONFIG, 0x01); //
#define SMPLRT_DIV 0x19 //陀螺仪采样率,典型值:0x07(125Hz)
#define CONFIG 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 WHO_AM_I 0x75 //IIC地址寄存器(默认数值0x68,只读)
#define SlaveAddress6050 0xD0
初始化我是参考网上的代码,您看看有问题吗?? i2c 读取代码贴上来看看 jinmailang 发表于 2013-3-26 18:24 static/image/common/back.gif
Single_Write(SlaveAddress,PWR_MGMT_1, 0x00); //
Single_Write(SlaveAddress,SMPLRT_DIV, 0x07 ...
我也是用这个代码的,读取没有问题 我的也是,不知道是不是烧了 我的也是一样的情况,请问楼主解决了吗? 我也出现过这个问题。
卖IMU的给的代码在STM32F103C8T6上有问题,重写i2c就好了。 帮顶下,日后可能会用到 我读WHO AM I 的时候返回值确是0X79 楼主我的也遇到相同的问题在读取器件ID时返回值为68 但是其他的返回值都是零怎么回事?C:\Users\孟涛\Desktop 楼主这是我调试时串口返回数据的截图 mark....
顶一个...{:lol:} 我也遇到同样问题,,,想哭 不知道什么原因我用的两个6050试的WHO AM I都过了 有代码呈现http://www.amobbs.com/forum.php?mod=viewthread&tid=5517820&highlight=MPU6050 我的MPU6050读取数据中总是在正确数据中伴有数据0,这是怎么回事啊?应该不是IIC发送时间延时的问题,改快改慢都不行啊....
初步判断是i2C做初始化的问题,有用示波器捕捉I2C波形看是否I2C读写正确吗? 楼主,解决问题了么? 我也遇到了这样的问题,数据采的好好的,我甩了下传感器,就出来都是0了!~
读WHO AM I 能读出来68,说明模拟IIC读取没问题呀!{:dizzy:} 初始化代码开头加入复位传感器的操作,同样是i2c写PWR_MGMT_1寄存器,有一个位是复位用的,过一会(几毫秒或几十毫秒吧)再接你的代码。 太伤感了,终于解决了,只恨没早看见这个帖啊{:lol:} 我记得如果你端口的设置没对的话会是0,设置为漏极,悬空。不知道是不是这个问题 我也出现这个问题了,读出ID,其他都是0 woshicky 发表于 2013-12-20 23:59
太伤感了,终于解决了,只恨没早看见这个帖啊
怎么解决的?求教 firstzys 发表于 2014-1-14 15:05
怎么解决的?求教
上电后进行一次软件复位,像这样:
/* Reset The MPU6050 Device */
MPU6050_Reset(RESET);
delay_ms(30);
MPU6050_Reset(SET);
希望对你有用{:smile:} woshicky 发表于 2014-1-14 15:09
上电后进行一次软件复位,像这样:
/* Reset The MPU6050 Device */
MPU6050_Reset(RESET);
多谢多谢!{:handshake:} 顶一下,因为这个问题纠结好长时间了,原来是在进行mpu6050的初始化之前还要进行一下复位和延时,呵呵,真的谢谢了 firstzys 发表于 2014-1-14 15:56
多谢多谢!
出现同样的问题,请教怎么复位? v灰尘 发表于 2014-9-8 19:58
出现同样的问题,请教怎么复位?
不用了{:biggrin:} ,已经知道怎么弄了
IIC_Single_Write(MPU6050_Addr,PWR_MGMT_1, 0x80);
delay_ms(5);
IIC_Single_Write(MPU6050_Addr,PWR_MGMT_1, 0x00);
IIC_Single_Write(MPU6050_Addr,SMPLRT_DIV, 0x07);
IIC_Single_Write(MPU6050_Addr,CONFIG, 0x06);
IIC_Single_Write(MPU6050_Addr,GYRO_CONFIG, 0x18);
IIC_Single_Write(MPU6050_Addr,ACCEL_CONFIG, 0x01);
嘿嘿,顶一下顶一下 我的复位后还是一样,只有ID读得出来,其余读出来的数据是0。
void MPU6050(void)
{
I2C_InitTypeDef I2C_Con;
I2C_Con.I2C_Mode=I2C_Mode_I2C;
I2C_Con.I2C_DutyCycle=I2C_DutyCycle_2;
I2C_Con.I2C_OwnAddress1=0x00;
I2C_Con.I2C_Ack=I2C_Ack_Enable;
I2C_Con.I2C_AcknowledgedAddress=I2C_AcknowledgedAddress_7bit;
I2C_Con.I2C_ClockSpeed=50000;
I2C_ITConfig(I2C1,I2C_IT_BUF|I2C_IT_EVT ,DISABLE);
I2C_Init(I2C1,&I2C_Con);
I2C_Cmd(I2C1,ENABLE);
I2C_AcknowledgeConfig(I2C1,ENABLE);
Delay_Ms(1000);
I2C_WriteByte(0xD0,0x6B,0x80);
Delay_Ms(200);
I2C_WriteByte(0xD0,0x6B,0x00);
Delay_Ms(200);
I2C_WriteByte(0xD0,0x19,0x07);//SMPLRT_DIV
I2C_WriteByte(0xD0,0x1A,0x06);//Config
I2C_WriteByte(0xD0,0x1B,0x18);//GYRO_CONFIG
I2C_WriteByte(0xD0,0x1C,0x01);//ACCEL_CONFIG
USART_SendData(USART1,I2C_ReadByte(0xD0,0x41));
}
页:
[1]