OpenEdv-开源电子网

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

外接MPU6050的初始化问题,返回器件地址209

[复制链接]

2

主题

11

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-4-15
在线时间
0 小时
发表于 2015-4-16 09:37:55 | 显示全部楼层 |阅读模式
5金钱
看了论坛的帖子,好多人说是IIC通信的问题,我想也是。内置MPU6050的器件地址为0x68,外置MPU6050的器件地址为0x69,相加刚好为209。
我是让两个MPU连在一条IIC总线上了,但是内置MPU和EEPROM也在同一条线上不也好好工作吗?求解
除此之外,MPU_Write_Byte()函数从来没有正常响应过,在写寄存器地址( IIC_Send_Byte(reg))之后就没响应了(iic_wait_ack返回错误1)
大哥们帮忙看看啊

u8 MPU_Write_Byte(u8 reg,u8 data)  

    IIC_Start(); 
IIC_Send_Byte((MPU_ADDR<<1)|0);//发送器件地址+写命令
if(IIC_Wait_Ack()) //等待应答
{
IIC_Stop();
LCD_ShowString(30,130,200,16,16,"MPU_ADDR Error");
while(1);
return 1;
}
    IIC_Send_Byte(reg); //写寄存器地址
    if(IIC_Wait_Ack())
{
LCD_ShowString(30,130,200,16,16,"reg addr Error");
delay_ms(2000); //等待应答 
}
IIC_Send_Byte(data);//发送数据
if(IIC_Wait_Ack()) //等待ACK
{
IIC_Stop();  
return 1;  
}  
    IIC_Stop();  
return 0;
}

最佳答案

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

没有看程序  只是看到两个地址觉得有问题 两个mpu6050   一个A地址0x68 一个B地址0x69 难道读写没有问题么? A写地址 0x68  读地址0x69 B写地址0x69  读地址 0x6a 如果挂在一个总线上,请问怎么解决?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2014-10-28
在线时间
14 小时
发表于 2015-4-16 09:37:56 | 显示全部楼层
没有看程序  只是看到两个地址觉得有问题
两个mpu6050   一个A地址0x68 一个B地址0x69
难道读写没有问题么?
A写地址 0x68  读地址0x69
B写地址0x69  读地址 0x6a
如果挂在一个总线上,请问怎么解决?
成功必然有成功的原因,
回复

使用道具 举报

5

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2014-10-28
在线时间
14 小时
发表于 2015-4-16 09:58:28 | 显示全部楼层
在去确认了一下 
 MPU-60X0的IIC地址为b 1 1 0 1 0 0 X ,7位标准地址,最低有效位是AD0引脚逻辑电平确认的
所以 地址就两种 0x68    0xD2   
你这个0x69怎么来的
成功必然有成功的原因,
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-4-15
在线时间
0 小时
 楼主| 发表于 2015-4-16 12:26:04 | 显示全部楼层
回复【2楼】simplelifeNick:
---------------------------------
说得好有道理,让我换条IIC总线试一试
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-4-15
在线时间
0 小时
 楼主| 发表于 2015-4-16 12:29:35 | 显示全部楼层
回复【3楼】simplelifeNick:
---------------------------------
因为mpu6050.h代码里面的注释说
//如果AD0脚(9脚)接地,IIC地址为0X68(不包含最低位).
//如果接V3.3,则IIC地址为0X69(不包含最低位).

按照你说的,两个MPU果然还是不能接在一条IIC上吗?
回复

使用道具 举报

5

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2014-10-28
在线时间
14 小时
发表于 2015-4-16 16:24:37 | 显示全部楼层
回复【5楼】zwy0302:
---------------------------------
说的还是蛮清楚吧  你看MPU6050的手册 地址为 b 1 1 0 1 0 0 X, AD0决定是是x  这个只是前7位  
你自己算算0x69是怎么出来的
成功必然有成功的原因,
回复

使用道具 举报

0

主题

22

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2013-11-11
在线时间
0 小时
发表于 2016-7-24 18:16:34 | 显示全部楼层
我现在也遇到这样的问题。读取器件的0x75,读出来是0xd1,很奇怪,但是明明应该是0x68。我开始怀疑是6050坏了,但是我用103的板子和103的程序试了下,没问题。
我的程序也是在发送数据的时候,发送0x68,有回应,发送寄存器地址的时候就无回应了,发送数据也没有回应了。所以一直没法发送数据。但时读数有,虽然读出来的不对。我现在在怀疑是不是时钟的问题。因为407的时钟和103不一样,某些延时还是可能有差别,就是不知道到底应该变长还是变短。
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2019-5-18
在线时间
5 小时
发表于 2019-12-14 16:34:51 | 显示全部楼层
木君之上 发表于 2016-7-24 18:16
我现在也遇到这样的问题。读取器件的0x75,读出来是0xd1,很奇怪,但是明明应该是0x68。我开始怀疑是6050坏 ...

请问你现在解决了吗? 我也是同样的问题  读取器件ID寄存器里的数据 理论上应该是0X68 但是读出来是0XD1 不懂为啥是这个0XD1(0X68加上了LSB的读标志位1)我尝试直接向器件ID寄存器写入0X68再读,还是读出来0XD1
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-11-27
在线时间
11 小时
发表于 2020-5-13 14:31:38 | 显示全部楼层
如果返回器件地址是0x98算什么
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2021-4-22
在线时间
4 小时
发表于 2021-5-5 11:22:24 | 显示全部楼层
war360xy 发表于 2020-5-13 14:31
如果返回器件地址是0x98算什么

我也是0x98,真无语了
回复

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2021-8-2
在线时间
16 小时
发表于 2021-10-26 18:50:43 | 显示全部楼层
iic初始化里把推完输出设置成开漏就行了 我开始也是这样 后来解决了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 19:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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