打印
[ZLG-ARM]

2138 I2C总线中发送数据不成功

[复制链接]
2183|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liulicau|  楼主 | 2007-10-22 15:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
zlgarm| | 2007-10-22 18:02 | 只看该作者

确定您的从机地址是否正确

首先确定您的从机地址是否正确,有些器件的从机地址是可以配置的,并和硬件连接有关;然后请注意软件包的使用,该函数的原型如下:
uint8 ISendByte(uint8 sla,uint8 dat);

使用特权

评论回复
板凳
liulicau|  楼主 | 2007-10-23 09:38 | 只看该作者

我确定从机地址是正确的

我用的ADS1110芯片,该器件地址是固化好的。我选的这一片地址就是0x94。我对这个函数的调用也是对的阿。不知道哪里有问题啊?

使用特权

评论回复
地板
zlgarm| | 2007-10-23 17:56 | 只看该作者

re

用户看管脚链接是否正确
还可以用示波器来看下波形,是否有CLK产生!

使用特权

评论回复
5
lpc2000| | 2007-10-23 23:59 | 只看该作者

上拉电阻

使用特权

评论回复
6
hotpower| | 2007-10-24 00:02 | 只看该作者

我怎么看IIC都是最简单的呀~~~

使用特权

评论回复
7
liulicau|  楼主 | 2007-10-26 10:11 | 只看该作者

偶现在已经改成模拟的了,大家帮我看下时序吧

#define YANSHI 60
void delay (uint32 i)
{
    while(--i);
}

void Start_I2c()
{
    IO0DIR=(IO0DIR&0xfffffff7)|0x00000008;//SDA输出
    IO0SET=(IO0PIN&0xfffffff7)|0x00000008;      //SDA置1
    delay(YANSHI);
    IO0SET=(IO0PIN&0xfffffffb)|0x00000004;      //SCL置1
    delay(YANSHI);
      IO0CLR=(IO0PIN&0xfffffff7)|0x00000008;      //SDA置0
    delay(YANSHI);
      IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;      //SCL置0
    delay(YANSHI);
}
void Stop_I2c()
{
    
    IO0DIR=(IO0DIR&0xfffffff7)|0x00000008;//SDA输出
    IO0CLR=(IO0PIN&0xfffffff7)|0x00000008;//SDA置0
    delay(YANSHI);
    IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;
    delay(YANSHI);
      IO0SET=(IO0PIN&0xfffffffb)|0x00000004;//SCL置1
    delay(YANSHI);
      IO0SET=(IO0PIN&0xfffffff7)|0x00000008;//SDA置1
    delay(YANSHI);
}
/***********************************
字节数据传送函数
函数原理:void SendByte(uchar c);
功能:将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对此状态位进行操作(不应答或非应答都使ack=0 假)。
发送数据正常,ack=1;ack=0表示被控器无应答或损坏。
****************************************/
void SendByte(uint8 c)
{
    uint8 BitCnt;
    IO0DIR=(IO0DIR&0xfffffff7)|0x00000008;        //SDA输出
    for(BitCnt=0;BitCnt<8;BitCnt++)
    {          
      if((c&0x80)==0x80)
          IO0SET=(IO0PIN&0xfffffff7)|0x00000008;//SDA置1
       else 
        IO0CLR=(IO0PIN&0xfffffff7)|0x00000008;//SDA置0
    delay(YANSHI);
    IO0SET=(IO0PIN&0xfffffffb)|0x00000004;    //SCL置1
      delay(YANSHI);
    IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;    //SCL置0
    c=c<<1;
    }
    delay(YANSHI);
    IO0SET=(IO0PIN&0xfffffff7)|0x00000008;        //SDA置1
    delay(YANSHI);
    IO0SET=(IO0PIN&0xfffffffb)|0x00000004;        //SCL置1
    delay(YANSHI);
    IO0DIR=(IO0DIR&0xfffffff7);                   //SDA输入
    delay(YANSHI);
    sda_value=IO0PIN;
    if((IO0PIN&0x00000008)==0x00000008)
      ack=0;
    else
    ack=1;
    IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;        //SCL置0
    delay(YANSHI);
}
/*****************************************
字节数据传送函数
函数原形:uchar RcvByte();
功能:用来接收从器件传来的数据,并判断总线错误(不发应答信号),
      发完后请用应答函数。
*******************************************/
uint8 RcvByte()
{
    uint8 retc;
     uint8 BitCnt;
    retc=0;
    IO0DIR=(IO0DIR&0xfffffff7)|0x00000008;        //SDA输出
     IO0SET=(IO0PIN&0xfffffff7)|0x00000008;        //SDA置1
     IO0DIR=(IO0DIR&0xfffffff7);//SDA输入
     for(BitCnt=0;BitCnt<8;BitCnt++)
      {
        delay(YANSHI);
          IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;     //SCL置0
          delay(YANSHI);
        IO0SET=(IO0PIN&0xfffffffb)|0x00000004;     //SCL置1
          delay(YANSHI);
        retc=retc<<1;
          if((IO0PIN&0x00000008)==0x00000008)
              retc=retc+1;
          delay(YANSHI);
    }
    IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;           //SCL置0
    delay(YANSHI);
    return(retc);
}
/*******************************************
应答子函数
原形:viod Ack_I2c(bit a);
功能:主控器进行应答信号,(可以是应答或非应答信号)
**********************************************/
void Ack_I2c(uint8 a)
{
     IO0DIR=(IO0DIR&0xfffffff7)|0x00000008;//SDA输出
     if(a==1)
         IO0SET=(IO0PIN&0xfffffff7)|0x00000008;//SDA置1
     else
         IO0CLR=(IO0PIN&0xfffffff7)|0x00000008;//SDA置0
         delay(YANSHI);
     IO0SET=(IO0PIN&0xfffffffb)|0x00000004;//SCL置1
    delay(YANSHI);
     IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;//SCL置0
    delay(YANSHI);
}
 

使用特权

评论回复
8
liulicau|  楼主 | 2007-10-26 12:17 | 只看该作者

不知道这个延时时间长短对不对

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

28

帖子

1

粉丝