Other Parts Discussed in Thread: PCF8575, TXS0102, TMP75, INA226
专家您好:
我这边使用PCF8574RGYR 做I/O扩展,我们使用I2C配置写。我们想要P0 P1 P3输出高电平,我们数据写了0B.
我们发现如下问题,这几个口在我I2C写完的时候高电平了一小会,然后又拉低下去了,高电平大概维持了100us左右,请问是什么原因? 如何解决?
如下图:粉色是PCF8574RGYR 的 SDA,黄色是P0输出
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,黄色P0输出下拉了,SDA的时序对吗?写完PCF8574的地址之后有收到ACK信号吗?
因为您这里的波形看不到clock信号,所以想确认下I2C时序正常吗?
并且麻烦附上电路看下。
您好,是这样的,如果要P0,P1 和P3输出高电平的话,这款器件是不支持restart重复启动命令,因此当地址之后写第一次数据之后,需要发送stop 命令,然后再向写第一个数据比如P0一样,地址之后写P1. 否则的话,直接写两次数据,只有第一个字节的数据才能被应用到输出。
如果上述时序没问题, 请确认是否上电时序没问题,SCL和SDA的上拉电阻值为多少?
您好,我找了下资料,这个时序应该是PCF8575的时序copy过来的,所以有些错误。
就像我上面所说的,8574 应该是在其地址后的每个字节输出其内容,而8575和这个时序是对应的,它是在地址后的每两个字节输出其内容。
所以如果您需要P0,P1和P3输出高电平,那么需要写完P0之后收到ACK信号之后,再写地址+P1+ACK+address+P3+ACK+Stop。
是的,
Sart+7bit slave address+R/W+data 0000001+ACK+slave address+data 00000010+ACK+slave address+data 00100000+ACK+Stop
有几点和您确认下:
1. 还是要看下I2C的SCLK和SDA的时序,看下start信号是否没问题,因为当clock为高,SDA由高到低变化,说明start信号开始、如果start起始条件不满足的话,会影响到ACK信号。
2. P3这里输出使用的示波器测试的,如果I2C的时序没问题,,我担心由于测量的不稳定性导致,所以建议用万用表测量下P3引脚的电压。
3. 写P3只拉高一会儿,电平就拉低了,尝试改用其他命令验证下是否同样结果,比如P2,P4或者P5.
4.确认下Figure24的上电时序是否满足。
我看了下您的时序,不是P port的问题啊,是写完地址之后,在第九个clock时,ACK信号没有被完全拉低,后面的data是没问题的,00000010.
另外,SCL和SDA的上拉电阻取值为33ohm吗?您可以看下数据手册P17部分介绍的上拉阻值计算的方法,并且给给出了上拉阻值的最大最小范围,3.3V供电的话,最小也为1Kohm左右,最大电容依据I2C最大容性负载400pF,分别给出了在100K和400Khz速率的最大值。所以建议更改上拉阻值再试试,比如4.7Kohm。
您好,上拉33ohm和TXS0102 内部上拉10Kohm并联后,总阻值变得也很小,上拉电阻值的大小直接影响Vol的值。
Vol=Vcc-Iol*Rup.上拉电阻越小,Vol越大,导致SDA无法将其拉低,所以可以看到有个尖峰电压。换成0hm电阻,虽然不是高频,但是也
我认为问题的原因应该在这里,您这里是只写了一个数据P2,如果您写第二个字节,应该也会在同样的地方出现尖峰,并且尖峰和这个一样,在SCL信号对齐。通常, 这是由于接收器拉低线路的速度较慢,可能有多种原因。 线路上的电容,器件正忙于处理等。 只有当主从之间有一个切换 (发送器发送数据、然后它让接收器将线路拉低) 时、才会产生此噪声,所以我认为即使换上0ohm电阻相当于一个电容,也会产生这个尖峰。
能否直接将PCF8574的SCL,SDA直接和TXS0102接,跳过这个上拉,只使用内部集成了10Kohm试试。
起始可以看到,即使有这个尖峰,但是后面的数据是没问题的,不影响通讯。
您好,那可以这样验证下,看下TMP75的I2C 的SDA是否也在ACK信号这里出现尖峰。
因为这个尖峰,可以通过增大上拉电阻从而减小Vol或者增大容性负载的方法应该得到改善,但是TXS0102的上拉10K无法调节,所以要么使用其他电平转换器件,通过外部上拉调节阻值,要么是验证下总线上的其他器件I2C时序是否正常。 根据您的描述,我认为接上TMP75,验证TMP75的时序是否正常。