各位大神前辈们,你们有没有使用IO口模拟IIC通信的?PIC32单片机的IIC口不够我用的,所以我想使用模拟的方法实现IIC通信。我用的是RF2和RF3这两个端口,在配置ACK应答,我想用RF2为数据线,想把RF2配置为漏极开路输出,用如下方法配置可以不?还望有经验的前辈指点一二。谢谢!!当然,我也会按照我的方法实验的,尽量不做伸手党。
# define SDA_H PORTFbits.RF2 = 1 # define SDA_L PORTFbits.RF2 = 0 // 数据线 # define ACK_SDA ODCFSET = 0x00000002 # define SCL_H PORTFbits.RF3 = 1 // 时钟线 # define SCL_L PORTFbits.RF3 = 0
如果是模拟的I2C,开漏其实就没有什么意义了,因为这种方式下,通常单片机是主机,不存在多个主机,不会有总线冲突。但是上拉电阻还是需要加的,这是从机设备需要的。
模拟I2C的程序,基本就是通用的,它只需要设置输入输出以及SDA和SCL的时序,其他方面,只要配置好IO状态,正确进行切换就行。
应该没问题,sda和scl都配置为开漏就行,但是总线上要加上拉的
这个程序可以,但是普通IO口刷新速率较慢,不一定能满足通信需求
实际上一个I2C可以接入很多个从机,应该不会不够用吧
先为楼主点个赞,不做伸手党,
模拟IIC 还需要注意 SDA引脚的输入输出切换 可以参考下下面这篇文章 理解一下IO配置相关内容
强仔教你玩PIC32MZ之IO的配置 http://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=445391&fromuid=526124
一、
在I2C中,SDA是数据线,但是数据是有出有进的,那么你的IO口的方向就要在输出数据时设置为输出,读取数据时设置为输入。
二、
什么是I2C口不够用呢?
你要接几个芯片啊?
就算接24系统的EEPROM,有两个地址引脚,你可以通过设置地址引脚,设置不同的从机地址,可以接四片呢
其他的I2C芯片,其地址又是不一样的,完全可以放在同一个总线上的。