3100|2

126

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

你问我答——用2553的IO模拟I2C时波形异常问题! [复制链接]

最近要用到430g2303,想先用Launchpad把程序写好,然后移植过去。其中用到模拟I2C,虽然可以把I2C器件的数据正确读出来,但是I2C写命令时波形出现异常:
写第一个命令0x80时,波形正常。写第二个命令0xF3时,波形出现异常,在SCL第8个时钟周期结束时本应该是高电平的SDA突然降低了,不是完全变为0 。后面变为低电平是程序把SDA变低的。具体波形图片附上,不知道是什么原因?写命令程序如下,如果是程序原因,那为什么第1次写的时候,波形正常呢?
模拟I2C总线写函数:
uint8 WriteByte(uint8 byte)
{
uint8 i;

for(i=8;i>0;i--)
{
  if( byte & 0x80 )
      SDA_1;
  else
      SDA_0;
   byte <<= 1;
   delay(1);  
   SCL_1;
   delay(3);
   SCL_0;
   delay(1);
}
delay(3);
SDA_0;
delay(3);
SCL_1;

i = 0;
SDA_IN;
//P2REN |= BIT1;
delay(3);
while((SDA==BIT1) && (i<255))
        i++;  
SDA_OUT;
//P2REN &= ~BIT1;
   
SDA_0;
SCL_0;
delay(3);
if(i<255)
    return ACK;
else
    return NACK;
}

[ 本帖最后由 编号洞洞拐 于 2013-11-20 18:22 编辑 ]

11-19-2.JPG (46.07 KB, 下载次数: 0)

11-19-2.JPG

11-19-1.JPG (46.23 KB, 下载次数: 0)

11-19-1.JPG

最新回复

可以参考我以前发过的I2C的工程,或者相关帖子。在需要输出高时把IO口设置成输入就行了。  详情 回复 发表于 2013-11-20 20:57

点评

这是程序的问题,是你程序不规范,在I2C中,SDA是不应该输出高电平的,而是要靠上拉电阻去把SDA拉高。 一般从器件在收到命令的时候,一般会拉低SDA表示ACK,而你出问题的波形就是主器件输出的是高电平,而从器件输  详情 回复 发表于 2013-11-20 20:56
 
点赞 关注

回复
举报

6040

帖子

204

TA的资源

版主

沙发
 

回复 楼主编号洞洞拐 的帖子

这是程序的问题,是你程序不规范,在I2C中,SDA是不应该输出高电平的,而是要靠上拉电阻去把SDA拉高。
一般从器件在收到命令的时候,一般会拉低SDA表示ACK,而你出问题的波形就是主器件输出的是高电平,而从器件输出低电平,导致冲突。

赞赏

1

查看全部赞赏

 
 

回复

6040

帖子

204

TA的资源

版主

板凳
 
可以参考我以前发过的I2C的工程,或者相关帖子。在需要输出高时把IO口设置成输入就行了。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表