看了论坛的帖子,好多人说是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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
两个mpu6050 一个A地址0x68 一个B地址0x69
难道读写没有问题么?
A写地址 0x68 读地址0x69
B写地址0x69 读地址 0x6a
如果挂在一个总线上,请问怎么解决?
---------------------------------
因为mpu6050.h代码里面的注释说
//如果AD0脚(9脚)接地,IIC地址为0X68(不包含最低位).
//如果接V3.3,则IIC地址为0X69(不包含最低位).
按照你说的,两个MPU果然还是不能接在一条IIC上吗?
---------------------------------
说的还是蛮清楚吧 你看MPU6050的手册 地址为 b 1 1 0 1 0 0 X, AD0决定是是x 这个只是前7位
你自己算算0x69是怎么出来的
我的程序也是在发送数据的时候,发送0x68,有回应,发送寄存器地址的时候就无回应了,发送数据也没有回应了。所以一直没法发送数据。但时读数有,虽然读出来的不对。我现在在怀疑是不是时钟的问题。因为407的时钟和103不一样,某些延时还是可能有差别,就是不知道到底应该变长还是变短。
一周热门 更多>