NO_龙 发表于 2012-10-16 21:24:24

求救!!mpu6050 I2C 没有应答啊~~


准备做个3个电机,加一个舵机做个伪四轴,刚开始把串口搞订,忘了说了,主控用的是k60(MK60X256Z)飞思卡尔的
初始化返回的就还是2!没有得到第一个应答!!
第一个程序是写一个字节,后面的是mpu初始化~!
那位大神帮帮啊~

//============================================================================
//函数名称:iic_write1                                                      
//功能概要:向从机写1个字节数据                                          
//参数说明:num:模块号      
//          DeviceAddr:设备地址   
//          AccessAddr:访问地址
//          Data:要发给从机的1个字节数据
//函数返回:为0,成功写一个字节;为1,写一个字节失败
//函数说明: 内部调用 hw_send_signal,hw_wait
//============================================================================

uint8 iic_write1(I2C_MemMapPtr num,uint8 DeviceAddr, uint8 AccessAddr, uint8 Data)
{
        I2C_C1_REG(num) |= 0x10;             //TX = 1,MCU设置为发送模式
    hw_send_signal('S',num);             //发送开始信号
    I2C_D_REG(num) = DeviceAddr & 0xfe;//发送设备地址,并通知从机接收数据
    if (hw_wait('T',num))                //等待一个字节数据传送完成
      return 1;                        //没有传送成功,写一个字节失败
    if (hw_wait('A',num))               //等待从机应答信号
      return 2;                     //没有等到应答信号,写一个字节失败   
    I2C_D_REG(num) = AccessAddr;         //发送访问地址
    if (hw_wait('T',num))               //等待一个字节数据传送完成
      return 3;                     //没有传送成功,写一个字节失败
    if (hw_wait('A',num))               //等待从机应答信号
      return 4;                      //没有等到应答信号,写一个字节失败   
    I2C_D_REG(num) = Data;             //写数据
    if (hw_wait('T',num))            //等待一个字节数据传送完成
      return 5;                      //没有传送成功,写一个字节失败
    if (hw_wait('A',num))            //等待从机应答信号
      return 6;                      //没有等到应答信号,写一个字节失败   
    hw_send_signal('O',num);         //发送停止信号
    return 0;
}

define        SMPLRT_DIV                0x19        //陀螺仪采样率,典型值:0x07(125Hz)
#define        CONFIG                        0x1A        //低通滤波频率,典型值:0x06(5Hz)
#define        GYRO_CONFIG                0x1B        //陀螺仪自检及测量范围,典型值:0x01(不自检,200deg/s)
#define        ACCEL_CONFIG        0x1C        //加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz)
#define        PWR_MGMT_1                0x6B        //电源管理,典型值:0x00(正常启用)
#define        WHO_AM_I          0x75        //IIC地址寄存器(默认数值0x68,只读)
#define        SlaveAddress        0xD0        //IIC写入时的地址字节数据,+1为读取


//======================================
//初始化MPU6050
//======================================

uint8 mpu6050_init()
{
    uint8 i=0;
        i|=iic_write1(I2C0,SlaveAddress,PWR_MGMT_1, 0x00);        //解除休眠状态
        Delay5us();
        i|=iic_write1(I2C0,SlaveAddress,SMPLRT_DIV, 0x07);
        Delay5us();       
        i|=iic_write1(I2C0,SlaveAddress,CONFIG, 0x06);
        Delay5us();       
        i|=iic_write1(I2C0,SlaveAddress,GYRO_CONFIG, 0x01);
        Delay5us();
        i|=iic_write1(I2C0,SlaveAddress,ACCEL_CONFIG, 0x01);
    return i;
}

yandld11 发表于 2013-6-20 10:15:28

研究此问题数日无果,大汗淋漓!其中时日不禁百度前100+页 无果,后继而google之. 大悟! 耐将I2C对应端口PCR中ODE置位即可。爽栽。

NO_龙 发表于 2013-6-28 14:06:34

yandld11 发表于 2013-6-20 10:15 static/image/common/back.gif
研究此问题数日无果,大汗淋漓!其中时日不禁百度前100+页 无果,后继而google之. 大悟! 耐将I2C对应端口P ...

已经用模拟的好使了,速度400K左右吧!谢谢

zhaojianjiang 发表于 2013-8-27 14:25:47

你能把这段程序给我发一下么?MPU6050的K60上使用。IIC我都没弄出来

sylarwcy 发表于 2014-4-20 15:57:52

我是没弄出来,愁死了。。。各种库,都是不好用。。。
页: [1]
查看完整版本: 求救!!mpu6050 I2C 没有应答啊~~