PIC模拟i2c存在的问题

2020-02-06 10:25发布

最近再用pic普通io口模拟I2C与传感器bh1710进行通信,因为是模拟I2C,有些问题我不是太明白。
就我观察到的,pic模拟i2c主要有两种方式,我下面分别说明一下:
第一种方式,就是把io口数据寄存器初始值设为0,当想输出高电平时,就设为输入状态,引脚在外部上拉电阻的作用下自动拉高;当想输出低电平时,设置为输出状态,数据寄存器上的0就被输出到io口。
第二种方式,就是把io口设置为输出状态,输出0就是0,输出1就是1。
上面两种方式我都见过,不知道究竟哪一种更好,关键是现在我的程序还没有调通,所以也不知道是不是用的方式不对。
大家有什么意见,可以说一下吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
jiangxingyuan
1楼-- · 2020-02-06 16:16
第一种好。不会因为设为输出1时被从器件拉低而产生大电流或无法拉低。
lixianghappy
2楼-- · 2020-02-06 19:39
- -还真没考虑过诶,不过我一般是用第二种方法- -
albert_w
3楼-- · 2020-02-06 22:30
 精彩回答 2  元偷偷看……
millwood0
4楼-- · 2020-02-07 00:18
the 2nd approach is not in compliance with i2c protocol.
防滑销钉
5楼-- · 2020-02-07 00:52
本帖最后由 防滑销钉 于 2013-8-6 21:05 编辑
millwood0 发表于 2013-8-5 18:24
the 2nd approach is not in compliance with i2c protocol.


但我网上下的程序,好多都是用的第二种方法,也说能够实现。
我看了我老师以前的一个项目,就是简单的读取数字传感器数据,程序里就是用的第二种方法,最后也没什么问题。
不过我也觉得,第一种方法更符合i2c的规范,我看来一本pic的应用手册,也是这样推荐的。
我准备用第一种方法试试看。
防滑销钉
6楼-- · 2020-02-07 02:31
我自己来回答一下把。
如果采用我提到的第二种方法,使用推挽输出方式。当mcu输出高电平的时候,相当于mcu内部使端口直接连接vcc,这时候如果从机i2c设备输出为0,相当于短路,容易烧坏从机i2c端口。
而且,采用第一种方法时,从机i2c设备工作电压可以小于mcu工作电压,因为我们输出1时实际上相当于由外部上拉,只需要把外部上拉电压设置为与从机工作电压一致就可以了。

一周热门 更多>