慢慢懂 发表于 2013-5-1 16:19:16

有谁用过MPU-6050角度传感器,求教

现在正在弄MPU-6050角度传感器,求质料和430的程序

ppocat_check 发表于 2013-5-3 20:53:05

求不到的,只有自己找前辈写的一些程序自己再改

慢慢懂 发表于 2013-5-3 21:36:46

ppocat_check 发表于 2013-5-3 20:53 static/image/common/back.gif
求不到的,只有自己找前辈写的一些程序自己再改

这两天用模拟的I2C写,应为430的IO口没有双工模式,写不了,现在正在用硬件I2C写

sxliujin 发表于 2013-5-25 23:38:32

430用IIC读数据的时候 SDA改成DIR_IN 就可以了- - ......

慢慢懂 发表于 2013-5-26 10:06:40

sxliujin 发表于 2013-5-25 23:38 static/image/common/back.gif
430用IIC读数据的时候 SDA改成DIR_IN 就可以了- - ......

我是用的模拟I2C写的

电子爱好者ABC 发表于 2013-7-16 22:20:49

#include "i2c.h"
#include"mpu6050.h"
unsigned char CY=0;
void Delay5us()
{
   _NOP(); _NOP(); _NOP(); _NOP(); _NOP();
   _NOP(); _NOP();_NOP(); _NOP();_NOP();
}

//**************************************
//I2C起始信号
//**************************************
void I2C_Start()
{
    SET_SDA;                   //拉高数据线
    SET_SCL;                   //拉高时钟线
    Delay5us();               //延时
    RESET_SDA;                   //产生下降沿
    Delay5us();               //延时
    RESET_SCL;                  //拉低时钟线
}
//**************************************
//I2C停止信号
//**************************************
void I2C_Stop()
{
    RESET_SDA;                  //拉低数据线
    SET_SCL;                  //拉高时钟线
    Delay5us();               //延时
    SET_SDA;                   //产生上升沿
    Delay5us();               //延时
}
//**************************************
//I2C发送应答信号
//入口参数:ack (0:ACK 1:NAK)
//**************************************
//(51单片机)
/********************************
void I2C_SendACK(bit ack)
{
    SDA = ack;                  //写应答信号
    SET_SCL;                  //拉高时钟线
    Delay5us();               //延时
    RESET_SCL;                  //拉低时钟线
    Delay5us();               //延时
}
*********************************/
//(430单片机)
void I2C_SendACK(uchar ack)
{
   if(ack) SET_SDA;
    else RESET_SDA ;            //写应答信号
    SET_SCL;                  //拉高时钟线
    Delay5us();               //延时
    RESET_SCL;                  //拉低时钟线
    Delay5us();               //延时
}
//**************************************
//I2C接收应答信号
//**************************************
uchar I2C_RecvACK()
{
    P1DIR &=0xef; //SDA输入
    SET_SCL;                     //拉高时钟线
    Delay5us();               //延时
    CY = P1IN&0x10;             //读应答信号
    RESET_SCL;                  //拉低时钟线
    Delay5us();               //延时
    P1DIR |=0x10; //SDA输出
    return CY;
}
//**************************************
//向I2C总线发送一个字节数据
//**************************************
void I2C_SendByte(uchar dat)
{
    uchar i;
    for (i=0; i<8; i++)         //8位计数器
    {
         //(51单片机)
      //dat <<= 1;            //移出数据的最高位
       // SDA = CY;               //送数据口
      /*******************************/
      // (430单片机)
      CY=dat&0x80;            
      if(CY==0) RESET_SDA;
          elseSET_SDA;
          dat <<= 1;//移出数据的最高位
       /*******************************/
      SET_SCL;               //拉高时钟线
      Delay5us();             //延时
      RESET_SCL;                //拉低时钟线
      Delay5us();             //延时
    }
    I2C_RecvACK();
}

//**************************************
//从I2C总线接收一个字节数据
//**************************************
uchar I2C_RecvByte()
{
    uchar i;
    uchar dat = 0;
    P1DIR &=0xef; //SDA输入
    SET_SDA;//使能内部上拉,准备读取数据,
    for (i=0; i<8; i++)         //8位计数器
    {
      dat <<= 1;
      SET_SCL;                  //拉高时钟线
      Delay5us();             //延时
      dat |= ((P1IN &0x10)>>4);             //读数据               
      RESET_SCL;                //拉低时钟线
      Delay5us();             //延时
    }
    P1DIR |=0x10; //SDA输出
    return dat;
}
//**************************************
//向I2C设备写入一个字节数据
//**************************************
void Single_WriteI2C(uchar REG_Address,uchar REG_data)
{
    I2C_Start();                  //起始信号
    I2C_SendByte(SlaveAddress);   //发送设备地址+写信号
    I2C_SendByte(REG_Address);    //内部寄存器地址,
    I2C_SendByte(REG_data);       //内部寄存器数据,
    I2C_Stop();                   //发送停止信号
}

//**************************************
//从I2C设备读取一个字节数据
//**************************************
uchar Single_ReadI2C(uchar REG_Address)
{
        uchar REG_data;
        I2C_Start();                   //起始信号
        I2C_SendByte(SlaveAddress);    //发送设备地址+写信号
        I2C_SendByte(REG_Address);   //发送存储单元地址,从0开始       
        I2C_Start();                   //起始信号
        I2C_SendByte(SlaveAddress+1);//发送设备地址+读信号
        REG_data=I2C_RecvByte();       //读出寄存器数据
        I2C_SendACK(1);                //接收应答信号
        I2C_Stop();                  //停止信号
        return REG_data;
}

皮爱了西 发表于 2013-7-17 15:11:04

资料可以去智能小车相关的论坛搜搜,很多。

I2C建议参考一下白沙怀表的程序,里面有模拟的I2C程序。

附件是我找的读写AT24c02的硬件I2C程序,

页: [1]
查看完整版本: 有谁用过MPU-6050角度传感器,求教