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

2019-07-20 21:07发布

看了论坛的帖子,好多人说是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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
simplelifeNick
1楼-- · 2019-07-20 21:32
没有看程序  只是看到两个地址觉得有问题
两个mpu6050   一个A地址0x68 一个B地址0x69
难道读写没有问题么?
A写地址 0x68  读地址0x69
B写地址0x69  读地址 0x6a
如果挂在一个总线上,请问怎么解决?
simplelifeNick
2楼-- · 2019-07-21 02:45
 精彩回答 2  元偷偷看……
zwy0302
3楼-- · 2019-07-21 05:45
 精彩回答 2  元偷偷看……
zwy0302
4楼-- · 2019-07-21 11:44
回复【3楼】simplelifeNick:
---------------------------------
因为mpu6050.h代码里面的注释说
//如果AD0脚(9脚)接地,IIC地址为0X68(不包含最低位).
//如果接V3.3,则IIC地址为0X69(不包含最低位).

按照你说的,两个MPU果然还是不能接在一条IIC上吗?
simplelifeNick
5楼-- · 2019-07-21 17:21
回复【5楼】zwy0302:
---------------------------------
说的还是蛮清楚吧  你看MPU6050的手册 地址为 b 1 1 0 1 0 0 X, AD0决定是是x  这个只是前7位  
你自己算算0x69是怎么出来的
木君之上
6楼-- · 2019-07-21 19:15
我现在也遇到这样的问题。读取器件的0x75,读出来是0xd1,很奇怪,但是明明应该是0x68。我开始怀疑是6050坏了,但是我用103的板子和103的程序试了下,没问题。
我的程序也是在发送数据的时候,发送0x68,有回应,发送寄存器地址的时候就无回应了,发送数据也没有回应了。所以一直没法发送数据。但时读数有,虽然读出来的不对。我现在在怀疑是不是时钟的问题。因为407的时钟和103不一样,某些延时还是可能有差别,就是不知道到底应该变长还是变短。

一周热门 更多>