最近再用pic普通io口模拟I2C与传感器bh1710进行通信,因为是模拟I2C,有些问题我不是太明白。
就我观察到的,pic模拟i2c主要有两种方式,我下面分别说明一下:
第一种方式,就是把io口数据寄存器初始值设为0,当想输出高电平时,就设为输入状态,引脚在外部上拉电阻的作用下自动拉高;当想输出低电平时,设置为输出状态,数据寄存器上的0就被输出到io口。
第二种方式,就是把io口设置为输出状态,输出0就是0,输出1就是1。
上面两种方式我都见过,不知道究竟哪一种更好,关键是现在我的程序还没有调通,所以也不知道是不是用的方式不对。
大家有什么意见,可以说一下吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
但我网上下的程序,好多都是用的第二种方法,也说能够实现。
我看了我老师以前的一个项目,就是简单的读取数字传感器数据,程序里就是用的第二种方法,最后也没什么问题。
不过我也觉得,第一种方法更符合i2c的规范,我看来一本pic的应用手册,也是这样推荐的。
我准备用第一种方法试试看。
如果采用我提到的第二种方法,使用推挽输出方式。当mcu输出高电平的时候,相当于mcu内部使端口直接连接vcc,这时候如果从机i2c设备输出为0,相当于短路,容易烧坏从机i2c端口。
而且,采用第一种方法时,从机i2c设备工作电压可以小于mcu工作电压,因为我们输出1时实际上相当于由外部上拉,只需要把外部上拉电压设置为与从机工作电压一致就可以了。
一周热门 更多>