OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 35001|回复: 42

MPU6050读不到数据。。。折腾两天了!!

[复制链接]

19

主题

107

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2015-3-5
在线时间
44 小时
发表于 2015-3-13 11:58:53 | 显示全部楼层 |阅读模式
5金钱
这两天在弄mpu6050模块,system下的delay.c usart.c和sys.c,hardware中的myiic.c和led.c是copy的miniv3板的寄存器版本(板子是刚买的miniv3),但是mpu6050.c是cpoy的探索者开发板的mpu6050六轴开发板传感器实验。现在问题来了:
  硬件仿真发现iic、led初始化都没有问题,6050返回的ACK也能读到,但是mpu6050读不到device id(读这个的时候应该返回0X68),初始化不了,代码如下:
[mw_shl_code=c,true] #include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "mpu6050.h" #include "myiic.h" #include "math.h" //#include "stdio.h"   保留,可能用到字符串打印函数 //头文件包含,需要用到I2C、6050、串口发送数据给上位机、数据处理、led灯 int main(void) { // u8 MPU6050_init_sign ;//6050复位成功标志 // u8 t; // u8 len; u16 times; short ax;           short ay; short az;           //三轴加速度的原始值 short gx; short gy; short gz;           //三轴角速率的原始值 // float pitch; // float roll; //// float yaw;      6050没有接磁力计,航向没有意义,先不用 // // float acc_X;        // float acc_Y; // float acc_Z;     // 经过解算的三轴加速度数据 // // float gyro_X;     //绕X旋转的角速度,定义为横滚角速率 // float gyro_Y;     //绕Y旋转的角速度,定义为俯仰角速率   // float gyro_Z;     //绕Z旋转的角速度,定义为偏航角速率   float temp;         //温度值 Stm32_Clock_Init(9); delay_init(72); uart_init(72,9600); LED_Init(); MPU_Init(); //初始化成功,返回0 while(1)     //!MPU6050_init_sign {    times++; if(times%10==0) LED0=!LED0; MPU_Get_Accelerometer(&ax,&ay,&az);   //采集到三轴加速度值 MPU_Get_Gyroscope(&gx,&gy,&gz);        //采集到三轴角速率值 temp=MPU_Get_Temperature()/100;       //采集到温度值 printf("当前温度值为:%f \r\n",temp);         printf("当前加速度值为:%o \r\n",ax); delay_ms(10);    } [/mw_shl_code]
个人觉得问题可能出在MPU的代码上,mpu6050.c的代码如下:

[mw_shl_code=c,true]#include "mpu6050.h" #include "sys.h" #include "delay.h" #include "usart.h" ////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途 //ALIENTEK STM32F407开发板 //MPU6050 驱动代码 //正点原子@ALIENTEK //技术论坛:www.openedv.com //创建日期:2014/5/9 //版本:V1.0 //版权所有,盗版必究。 //Copyright(C) 广州市星翼电子科技有限公司 2014-2024 //All rights reserved ////////////////////////////////////////////////////////////////////////////////// //初始化MPU6050 //返回值:0,成功 // 其他,错误代码 u8 MPU_Init(void) { u8 res; IIC_Init();//初始化IIC总线 MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80); //复位MPU6050 delay_ms(100); MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X00); //唤醒MPU6050 MPU_Set_Gyro_Fsr(3); //陀螺仪传感器,±2000dps MPU_Set_Accel_Fsr(0); //加速度传感器,±2g MPU_Set_Rate(50); //设置采样率50Hz MPU_Write_Byte(MPU_INT_EN_REG,0X00); //关闭所有中断 MPU_Write_Byte(MPU_USER_CTRL_REG,0X00); //I2C主模式关闭 MPU_Write_Byte(MPU_FIFO_EN_REG,0X00); //关闭FIFO MPU_Write_Byte(MPU_INTBP_CFG_REG,0X80); //INT引脚低电平有效 res=MPU_Read_Byte(MPU_DEVICE_ID_REG); if(res==MPU_ADDR)//器件ID正确 { MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X01); //设置CLKSEL,PLL X轴为参考 MPU_Write_Byte(MPU_PWR_MGMT2_REG,0X00); //加速度与陀螺仪都工作 MPU_Set_Rate(50); //设置采样率为50Hz } else return 1; return 0; } //设置MPU6050陀螺仪传感器满量程范围 //fsr:0,±250dps;1,±500dps;2,±1000dps;3,±2000dps //返回值:0,设置成功 // 其他,设置失败 u8 MPU_Set_Gyro_Fsr(u8 fsr) { return MPU_Write_Byte(MPU_GYRO_CFG_REG,fsr<<3);//设置陀螺仪满量程范围 } //设置MPU6050加速度传感器满量程范围 //fsr:0,±2g;1,±4g;2,±8g;3,±16g //返回值:0,设置成功 // 其他,设置失败 u8 MPU_Set_Accel_Fsr(u8 fsr) { return MPU_Write_Byte(MPU_ACCEL_CFG_REG,fsr<<3);//设置加速度传感器满量程范围 } //设置MPU6050的数字低通滤波器 //lpf:数字低通滤波频率(Hz) //返回值:0,设置成功 // 其他,设置失败 u8 MPU_Set_LPF(u16 lpf) { u8 data=0; if(lpf>=188)data=1; else if(lpf>=98)data=2; else if(lpf>=42)data=3; else if(lpf>=20)data=4; else if(lpf>=10)data=5; else data=6; return MPU_Write_Byte(MPU_CFG_REG,data);//设置数字低通滤波器 } //设置MPU6050的采样率(假定Fs=1KHz) //rate:4~1000(Hz) //返回值:0,设置成功 // 其他,设置失败 u8 MPU_Set_Rate(u16 rate) { u8 data; if(rate>1000)rate=1000; if(rate<4)rate=4; data=1000/rate-1; data=MPU_Write_Byte(MPU_SAMPLE_RATE_REG,data); //设置数字低通滤波器 return MPU_Set_LPF(rate/2); //自动设置LPF为采样率的一半 } //得到温度值 //返回值:温度值(扩大了100倍) short MPU_Get_Temperature(void) { u8 buf[2]; short raw; float temp; MPU_Read_Len(MPU_ADDR,MPU_TEMP_OUTH_REG,2,buf); raw=((u16)buf[0]<<8)|buf[1]; temp=36.53+((double)raw)/340; return temp*100;; } //得到陀螺仪值(原始值) //gx,gy,gz:陀螺仪x,y,z轴的原始读数(带符号) //返回值:0,成功 // 其他,错误代码 u8 MPU_Get_Gyroscope(short *gx,short *gy,short *gz) { u8 buf[6],res; res=MPU_Read_Len(MPU_ADDR,MPU_GYRO_XOUTH_REG,6,buf); if(res==0) { *gx=((u16)buf[0]<<8)|buf[1]; *gy=((u16)buf[2]<<8)|buf[3]; *gz=((u16)buf[4]<<8)|buf[5]; } return res;; } //得到加速度值(原始值) //gx,gy,gz:陀螺仪x,y,z轴的原始读数(带符号) //返回值:0,成功 // 其他,错误代码 u8 MPU_Get_Accelerometer(short *ax,short *ay,short *az) { u8 buf[6],res; res=MPU_Read_Len(MPU_ADDR,MPU_ACCEL_XOUTH_REG,6,buf); if(res==0) { *ax=((u16)buf[0]<<8)|buf[1]; *ay=((u16)buf[2]<<8)|buf[3]; *az=((u16)buf[4]<<8)|buf[5]; } return res;; } //IIC连续写 //addr:器件地址 //reg:寄存器地址 //len:写入长度 //buf:数据区 //返回值:0,正常 // 其他,错误代码 u8 MPU_Write_Len(u8 addr,u8 reg,u8 len,u8 *buf) { u8 i; IIC_Start(); IIC_Send_Byte((addr<<1)|0);//发送器件地址+写命令 if(IIC_Wait_Ack()) //等待应答 { IIC_Stop(); return 1; } IIC_Send_Byte(reg); //写寄存器地址 IIC_Wait_Ack(); //等待应答 for(i=0;i<len;i++) { IIC_Send_Byte(buf); //发送数据 if(IIC_Wait_Ack()) //等待ACK { IIC_Stop(); return 1; } } IIC_Stop(); return 0; } //IIC连续读 //addr:器件地址 //reg:要读取的寄存器地址 //len:要读取的长度 //buf:读取到的数据存储区 //返回值:0,正常 // 其他,错误代码 u8 MPU_Read_Len(u8 addr,u8 reg,u8 len,u8 *buf) { IIC_Start(); IIC_Send_Byte((addr<<1)|0);//发送器件地址+写命令 if(IIC_Wait_Ack()) //等待应答 { IIC_Stop(); return 1; } IIC_Send_Byte(reg); //写寄存器地址 IIC_Wait_Ack(); //等待应答 IIC_Start(); IIC_Send_Byte((addr<<1)|1);//发送器件地址+读命令 IIC_Wait_Ack(); //等待应答 while(len) { if(len==1)*buf=IIC_Read_Byte(0);//读数据,发送nACK else *buf=IIC_Read_Byte(1); //读数据,发送ACK len--; buf++; } IIC_Stop(); //产生一个停止条件 return 0; } //IIC写一个字节 //reg:寄存器地址 //data:数据 //返回值:0,正常 // 其他,错误代码 u8 MPU_Write_Byte(u8 reg,u8 data) { IIC_Start(); IIC_Send_Byte((MPU_ADDR<<1)|0);//发送器件地址+写命令 if(IIC_Wait_Ack()) //等待应答 { IIC_Stop(); return 1; } IIC_Send_Byte(reg); //写寄存器地址 IIC_Wait_Ack(); //等待应答 IIC_Send_Byte(data);//发送数据 if(IIC_Wait_Ack()) //等待ACK { IIC_Stop(); return 1; } IIC_Stop(); return 0; } //IIC读一个字节 //reg:寄存器地址 //返回值:读到的数据 u8 MPU_Read_Byte(u8 reg) { u8 res; IIC_Start(); IIC_Send_Byte(0xD0);//发送器件地址+写命令,写的时候器件地址为D0 IIC_Wait_Ack(); //等待应答 IIC_Send_Byte(reg); //写寄存器地址 IIC_Wait_Ack(); //等待应答 IIC_Start(); IIC_Send_Byte(0xD1);//发送器件地址+读命令 读的时候器件地址为D1 IIC_Wait_Ack(); //等待应答 res=IIC_Read_Byte(0);//读取数据,发送nACK IIC_Stop(); //产生一个停止条件 return res; } [/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

问题解决了,初始化I2C总线后必须延时个几百毫秒再初始化6050,不然6050初始化不成功
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

107

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2015-3-5
在线时间
44 小时
 楼主| 发表于 2015-3-13 11:58:54 | 显示全部楼层
问题解决了,初始化I2C总线后必须延时个几百毫秒再初始化6050,不然6050初始化不成功
回复

使用道具 举报

12

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-3-21
在线时间
0 小时
发表于 2015-3-13 11:58:54 | 显示全部楼层
回复【19楼】洛奇1994:
---------------------------------
解决了,还是杜邦线惹的鬼,杜邦线最好是一整排的(包括VCC  GND  SCL   SDA),之前我的线都是散的,拿了一排整的之后就好了。太坑了
serioly every minute
回复

使用道具 举报

7

主题

146

帖子

1

精华

高级会员

Rank: 4

积分
896
金钱
896
注册时间
2014-1-2
在线时间
156 小时
发表于 2015-3-13 13:09:39 | 显示全部楼层
楼主不要慌,看看器件地址有没有弄错,再仿真看看有没有ACK应答。
回复

使用道具 举报

19

主题

107

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2015-3-5
在线时间
44 小时
 楼主| 发表于 2015-3-13 13:31:17 | 显示全部楼层
回复【2楼】登云钓月:
---------------------------------

器件地址应该不会错的,因为ack有应答
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-3-13 22:52:50 | 显示全部楼层
貌似和你接线有问题。
用杜邦线连接MPU6050模块,容易出现读到的ID是0X6D(貌似是这个)的情况,缩短杜邦线,或者模块直接插板子,就不存在这个问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

19

主题

107

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2015-3-5
在线时间
44 小时
 楼主| 发表于 2015-3-14 08:42:50 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
谢谢原子哥指点,我用jtag仿真,读到的地址一直是0X00。更奇怪的是我把6050的杜邦线拔了,还是能读到ack。。。不懂了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-3-16 23:10:57 | 显示全部楼层
回复【6楼】阿拓:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2015-3-29
在线时间
13 小时
发表于 2015-3-29 20:24:09 | 显示全部楼层
回复【6楼】阿拓:
---------------------------------
在哪里加延时?我是在u8 MPU_Init(void)这个函数的iic初始化后面加的延时,下载后也还是不能用,而且我读出来的id(ad0接低电平)一直是0xd1,(ad0接高电平)一直是0xff,为什么不是0x68和0x69呢?我移植后自己改了,整个程序编译是没出错,i0口也改过来了。可是还是不行。能教下我移植过去要怎么改吗?大神
回复

使用道具 举报

7

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2013-10-5
在线时间
9 小时
发表于 2015-4-4 20:29:06 | 显示全部楼层
回复【8楼】幸运果:
---------------------------------
检查你的接线,我之前也遇到过这种问题,后来发现都是杜邦线惹的祸!
回复

使用道具 举报

2

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2015-3-29
在线时间
13 小时
发表于 2015-4-4 20:53:56 | 显示全部楼层
回复【9楼】岁月已无声:
---------------------------------
哦哦,谢谢,现在之前那个问题解决了,现在是自检不通过,返回值是0或1 (延时不一样),本来应该是0x3吧,请问有遇到过这样的问题吗?
回复

使用道具 举报

2

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2015-3-29
在线时间
13 小时
发表于 2015-4-4 22:20:38 | 显示全部楼层
回复【9楼】岁月已无声:
---------------------------------
哈哈,问题已解决
回复

使用道具 举报

7

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2013-10-5
在线时间
9 小时
发表于 2015-4-5 13:25:52 | 显示全部楼层
回复【11楼】幸运果:
---------------------------------
解释一下啊
回复

使用道具 举报

2

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2015-3-29
在线时间
13 小时
发表于 2015-4-5 14:11:06 | 显示全部楼层
回复【12楼】岁月已无声:
---------------------------------
自检时候模块要放水平,不能倾斜太大,不然自检会出问题。dmp就初始化不了了。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-1-6
在线时间
0 小时
发表于 2015-4-8 15:34:58 | 显示全部楼层
回复【8楼】幸运果:
---------------------------------
我也是,ID一直读出来都是0XD1,到现在都好几天了也没调好。请问你后来是怎么做的就能读出正确的ID了?
回复

使用道具 举报

19

主题

107

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2015-3-5
在线时间
44 小时
 楼主| 发表于 2015-4-8 15:48:57 | 显示全部楼层
回复【14楼】Qidi:
---------------------------------
上边有回复呀,初始化I2C之后延时几百毫秒之后再去初始化MPU6050
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2015-1-6
在线时间
0 小时
发表于 2015-4-8 17:51:49 | 显示全部楼层
回复【15楼】阿拓:
---------------------------------
加了延时也不行,后来我发现是我的杜邦线太长了导致读数不对,现在能读出ID是0X68。但是之后读加速度寄存器,读出来的值都是0x01,又不知道哪里出了问题了。请问你有没有碰到过这个问题?
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-5-25
在线时间
0 小时
发表于 2015-5-29 21:31:31 | 显示全部楼层
楼主能否分享一下程序,我的刚开始是有数据的,后来一直是零...
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2015-6-18
在线时间
0 小时
发表于 2015-6-18 19:18:11 | 显示全部楼层
我用32单独读买的6050模块  读出的who am i寄存器是也是0xD1 怎么调都不行...6个值都不变 同样的程序烧进我的小四轴是读的出来的  去解释啊  是杜邦线的问题么  我明天看看
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-11-27
在线时间
0 小时
发表于 2015-7-31 17:21:17 | 显示全部楼层
回复【18楼】anderson:
---------------------------------
 我读出来的ID也是0XD1,后来换杜邦线就好了,杜邦线真的对它有很多影响。
回复

使用道具 举报

12

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-3-21
在线时间
0 小时
发表于 2015-9-4 17:23:04 | 显示全部楼层
回复【19楼】洛奇1994:
--------------------------------
我的也是到 0XD1, 加了延时,换了几条杜邦线还是不行,请问还有其他情况影响吗
serioly every minute
回复

使用道具 举报

12

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-3-21
在线时间
0 小时
发表于 2015-9-4 17:23:27 | 显示全部楼层
我的也是到 0XD1, 加了延时,换了几条杜邦线还是不行,请问还有其他情况影响吗
serioly every minute
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2015-12-21
在线时间
0 小时
发表于 2015-12-24 22:22:56 | 显示全部楼层
我用了整排的杜邦线,也加了延时,还是不行啊,貌似卡死在初始化函数那里的样子。。求大神。。。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2013-12-18
在线时间
1 小时
发表于 2016-1-17 16:54:57 | 显示全部楼层
我的初始化后好像数据跟MPU6050没关系了,数据不会变,全都一样,而且不插MPU6050都有数据,好奇怪,ID是d1
喜欢电子diy小产品
回复

使用道具 举报

8

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2015-7-22
在线时间
11 小时
发表于 2016-3-17 19:39:52 | 显示全部楼层
正点原子 发表于 2015-3-13 22:52
貌似和你接线有问题。
用杜邦线连接MPU6050模块,容易出现读到的ID是0X6D(貌似是这个)的情况,缩短杜邦线 ...

原子哥,可是我读出来的ID是0xFF,这是咋回事啊,老是初始化不了
回复

使用道具 举报

8

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2015-7-22
在线时间
11 小时
发表于 2016-3-17 20:01:54 | 显示全部楼层
阿拓 发表于 2015-3-13 11:58
问题解决了,初始化I2C总线后必须延时个几百毫秒再初始化6050,不然6050初始化不成功

请问你这个延时函数是在哪加的呢
回复

使用道具 举报

10

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2015-4-22
在线时间
11 小时
发表于 2016-4-24 16:24:41 | 显示全部楼层
西江月拂晓 发表于 2016-3-17 19:39
原子哥,可是我读出来的ID是0xFF,这是咋回事啊,老是初始化不了

0XFF和0x00表示你IO的电平一直没有变化,就是说I2C协议没有工作。
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-7-30
在线时间
3 小时
发表于 2016-7-30 22:11:21 | 显示全部楼层
但是我之前两天还是可以读出准确数据的,现在突然卡死数据输出有误且保持不变这是为什么呢
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-8-19
在线时间
1 小时
发表于 2016-8-19 23:14:44 | 显示全部楼层
请问一下IIC初始化后延时几百毫秒要放在哪
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-8-19
在线时间
1 小时
发表于 2016-8-19 23:23:02 | 显示全部楼层
请问在哪加
回复

使用道具 举报

3

主题

18

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2016-7-28
在线时间
4 小时
发表于 2016-8-22 15:20:58 | 显示全部楼层
阿拓 发表于 2015-3-13 11:58
问题解决了,初始化I2C总线后必须延时个几百毫秒再初始化6050,不然6050初始化不成功

我用的是mini版,正点mpu6050模块.请加我QQ641573672有些问题想请教你,谢谢了
回复

使用道具 举报

3

主题

18

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2016-7-28
在线时间
4 小时
发表于 2016-8-23 08:15:38 | 显示全部楼层
阿拓 发表于 2015-3-14 08:42
回复【4楼】正点原子:
---------------------------------
谢谢原子哥指点,我用jtag仿真,读到的地址一直 ...

楼主。能加一下你qq吗
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-9-2
在线时间
0 小时
发表于 2016-9-2 19:56:02 | 显示全部楼层
发现杜邦线不能太长,不然SDA与SCL的信号可能会相互有干扰,造成I2C通信出错,用短的杜邦线或是屏蔽线,再降低读取速率会好些
回复

使用道具 举报

徐ZZ 该用户已被删除
发表于 2017-2-12 23:01:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

3

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-3-27
在线时间
6 小时
发表于 2017-4-12 11:20:43 | 显示全部楼层
6050每次读取到的值都是0xFF怎么办
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-10-22
在线时间
5 小时
发表于 2017-11-14 18:09:00 | 显示全部楼层
limn2o4 发表于 2017-4-12 11:20
6050每次读取到的值都是0xFF怎么办

最后你是咋解决的?

我也是 ,全1,读who am i 也是全1,另外 MPU6050 有应答,就是读啥都是1,

崩溃 T_T
回复

使用道具 举报

2

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
377
金钱
377
注册时间
2015-10-19
在线时间
173 小时
发表于 2017-12-4 23:35:49 | 显示全部楼层
我也是有此問題MPU6050器件ID讀出來是0xD1

樓上所有方法都試過了(換杜邦排線,加延遲)都沒用

不過神奇的是若我MPU6050的 GND懸空 而 AD0接GND 則完全正常可讀到 0x68

而此接法根本不須多加延遲或考慮杜邦線問題

經過我反覆無數次測試都可正常讀取MPU6050數據




回复

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2018-10-4
在线时间
9 小时
发表于 2019-1-14 20:30:46 | 显示全部楼层
+2.2K上拉电阻
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2019-1-27
在线时间
0 小时
发表于 2019-1-27 19:50:19 | 显示全部楼层
各位大神,为什么我读出来的陀螺仪的初始值是0xff的,要转动陀螺仪数据才会有变化,初始值没转动不应是0x00吗
回复

使用道具 举报

3

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2019-5-8
在线时间
27 小时
发表于 2019-6-21 18:14:03 | 显示全部楼层
阿拓 发表于 2015-4-8 15:48
回复【14楼】Qidi:
---------------------------------
上边有回复呀,初始化I2C之后延时几百毫秒之后再去 ...

500ms够了吗?
回复

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2019-8-8
在线时间
16 小时
发表于 2019-8-10 16:07:14 | 显示全部楼层
可以的,感谢前人宝贵的经验的分享
回复

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2020-12-7
在线时间
11 小时
发表于 2021-6-13 11:34:24 | 显示全部楼层
阿拓 发表于 2015-3-13 11:58
问题解决了,初始化I2C总线后必须延时个几百毫秒再初始化6050,不然6050初始化不成功

有用,感谢楼主分享!
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2019-5-1
在线时间
1 小时
发表于 2021-7-18 09:52:32 | 显示全部楼层
本帖最后由 zty989 于 2021-7-18 10:06 编辑

同样的问题 折腾了两天 初始化 DMP什么的都过了 就是数据出不来 最后发现是因为2596S的稳压供电不稳 读出来的ID是0xD1  最后直接用开发板供电 也可以换用ASM1117等供电稳定的稳压 完美解决  还有一个经验是 数据线太长了确实容易也信号不稳 60cm杜邦线就不稳了 6050的要求太精密 延时100ms都够
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 02:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表