防滑销钉 发表于 2013-8-5 11:39:32

PIC模拟i2c存在的问题

最近再用pic普通io口模拟I2C与传感器bh1710进行通信,因为是模拟I2C,有些问题我不是太明白。
就我观察到的,pic模拟i2c主要有两种方式,我下面分别说明一下:
第一种方式,就是把io口数据寄存器初始值设为0,当想输出高电平时,就设为输入状态,引脚在外部上拉电阻的作用下自动拉高;当想输出低电平时,设置为输出状态,数据寄存器上的0就被输出到io口。
第二种方式,就是把io口设置为输出状态,输出0就是0,输出1就是1。
上面两种方式我都见过,不知道究竟哪一种更好,关键是现在我的程序还没有调通,所以也不知道是不是用的方式不对。
大家有什么意见,可以说一下吗?

jiangxingyuan 发表于 2013-8-5 11:42:46

第一种好。不会因为设为输出1时被从器件拉低而产生大电流或无法拉低。

lixianghappy 发表于 2013-8-5 15:13:54

- -还真没考虑过诶,不过我一般是用第二种方法- -

albert_w 发表于 2013-8-5 17:35:36

第二种一般是不允许的吧

millwood0 发表于 2013-8-5 18:24:17

the 2nd approach is not in compliance with i2c protocol.

防滑销钉 发表于 2013-8-6 21:03:37

本帖最后由 防滑销钉 于 2013-8-6 21:05 编辑

millwood0 发表于 2013-8-5 18:24 static/image/common/back.gif
the 2nd approach is not in compliance with i2c protocol.

但我网上下的程序,好多都是用的第二种方法,也说能够实现。
我看了我老师以前的一个项目,就是简单的读取数字传感器数据,程序里就是用的第二种方法,最后也没什么问题。
不过我也觉得,第一种方法更符合i2c的规范,我看来一本pic的应用手册,也是这样推荐的。
我准备用第一种方法试试看。

防滑销钉 发表于 2013-8-7 08:03:32

我自己来回答一下把。
如果采用我提到的第二种方法,使用推挽输出方式。当mcu输出高电平的时候,相当于mcu内部使端口直接连接vcc,这时候如果从机i2c设备输出为0,相当于短路,容易烧坏从机i2c端口。
而且,采用第一种方法时,从机i2c设备工作电压可以小于mcu工作电压,因为我们输出1时实际上相当于由外部上拉,只需要把外部上拉电压设置为与从机工作电压一致就可以了。

alias 发表于 2013-8-7 08:20:23

>> 当mcu输出高电平的时候,相当于mcu内部使端口直接连接vcc

不一定。PIC 有一种输出是用了开漏形式的,像 16F628A 的 RA4 脚,就可以使用你提到的第二种方法,不过只限此脚而已。

panda08 发表于 2014-11-6 13:16:37

楼主能把您的模拟i2c程序发上来学习一下吗???

防滑销钉 发表于 2014-11-6 21:39:14

panda08 发表于 2014-11-6 13:16
楼主能把您的模拟i2c程序发上来学习一下吗???

不好意思啊,时间太长了,程序已经没有了。
不过我有一点经验,就是第一次写的话,最好用示波器一个一个的看,开始,停止,发送一个字节。
等到都没有问题了,再整条命令的尝试
页: [1]
查看完整版本: PIC模拟i2c存在的问题