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.

PCF8574: PCF8574RGYR 输出问题

Part Number: PCF8574
Other Parts Discussed in Thread: PCF8575, TXS0102, TMP75, INA226

专家您好:

             我这边使用PCF8574RGYR 做I/O扩展,我们使用I2C配置写。我们想要P0 P1 P3输出高电平,我们数据写了0B.

我们发现如下问题,这几个口在我I2C写完的时候高电平了一小会,然后又拉低下去了,高电平大概维持了100us左右,请问是什么原因? 如何解决?

如下图:粉色是PCF8574RGYR 的 SDA,黄色是P0输出

  • 您好,黄色P0输出下拉了,SDA的时序对吗?写完PCF8574的地址之后有收到ACK信号吗?

    因为您这里的波形看不到clock信号,所以想确认下I2C时序正常吗?

    并且麻烦附上电路看下。

  • 您好,I2C的时序我核对了一下datasheet是对的,我看是需要写2次数据。我写的数据是0B,希望是P0 P1 P3输出高电平。

    每次P0等输出短暂的高都是在数据应答之前一个短暂的时刻,SDA ack之后P0等输出就拉回低了。

    就是P0等输出我写第一次数据后第1个ack之前一个短暂时间是拉高,然后ack的同时拉低。写第二次数据也是这样子,数据后第1个ack之前一个短暂时间是拉高,然后ack的同时拉低。

  • 您好,是这样的,如果要P0,P1 和P3输出高电平的话,这款器件是不支持restart重复启动命令,因此当地址之后写第一次数据之后,需要发送stop 命令,然后再向写第一个数据比如P0一样,地址之后写P1. 否则的话,直接写两次数据,只有第一个字节的数据才能被应用到输出。

    如果上述时序没问题, 请确认是否上电时序没问题,SCL和SDA的上拉电阻值为多少?

  • 请问是不是这样子,我要P0,P1 和P3输出高电平。

    要写3次数据,这样子写?

    如下图:

  • 您好,我找了下资料,这个时序应该是PCF8575的时序copy过来的,所以有些错误。

    就像我上面所说的,8574 应该是在其地址后的每个字节输出其内容,而8575和这个时序是对应的,它是在地址后的每两个字节输出其内容。

    所以如果您需要P0,P1和P3输出高电平,那么需要写完P0之后收到ACK信号之后,再写地址+P1+ACK+address+P3+ACK+Stop。

  • 那是不是我这边是样子?

    写地址+写data是01+ack(P0)  再写地址+写data是02+ack(P1)  再写地址+写data是80+ack(P3)+stop  ?

  • 是的,

    Sart+7bit slave address+R/W+data 0000001+ACK+slave address+data 00000010+ACK+slave address+data 00100000+ACK+Stop 

  • 我这边刚试了只写P3,时序是

    Sart+ addressW+data 00001000+ACK+STOP

    也是发现P3只拉高一小会,上图我给的图就是黄色的线变成只有一个竖条了。

  • 有几点和您确认下:

    1. 还是要看下I2C的SCLK和SDA的时序,看下start信号是否没问题,因为当clock为高,SDA由高到低变化,说明start信号开始、如果start起始条件不满足的话,会影响到ACK信号。

    2.  P3这里输出使用的示波器测试的,如果I2C的时序没问题,,我担心由于测量的不稳定性导致,所以建议用万用表测量下P3引脚的电压。

    3. 写P3只拉高一会儿,电平就拉低了,尝试改用其他命令验证下是否同样结果,比如P2,P4或者P5.

    4.确认下Figure24的上电时序是否满足。

  • 您好,

    1.I2C时序如下图: 黄色是SCK,粉色是SDA,地址选择了0100100(R/W)

    2.我这次测了P1,所以我的数据DATA是写02,输出后做了一个电阻分压到1.8V的

    拉高和DATA的关系如下:

    3.我这次是用P2做实验,也试了其它路,也是一样

    维持大约100us,万用表就是测到0V

    4.上电时序应该是好的,这路电源我们就上电就直接上电了,中间电源是不会掉的。 应该不涉及二次复位的问题。

    原理图如下:

  • 我看了下您的时序,不是P port的问题啊,是写完地址之后,在第九个clock时,ACK信号没有被完全拉低,后面的data是没问题的,00000010.

    另外,SCL和SDA的上拉电阻取值为33ohm吗?您可以看下数据手册P17部分介绍的上拉阻值计算的方法,并且给给出了上拉阻值的最大最小范围,3.3V供电的话,最小也为1Kohm左右,最大电容依据I2C最大容性负载400pF,分别给出了在100K和400Khz速率的最大值。所以建议更改上拉阻值再试试,比如4.7Kohm。 

  • 上拉电阻是10k来的。

    我们的DSP的I2C是1.8V的,用了一片TXS0102来转换为3.3V,TXS0102里面是内置10k上拉的。33Ω是为了方便引线的电阻,换成过0Ω,现象也是一样的

  • 您好,上拉33ohm和TXS0102 内部上拉10Kohm并联后,总阻值变得也很小,上拉电阻值的大小直接影响Vol的值。

    Vol=Vcc-Iol*Rup.上拉电阻越小,Vol越大,导致SDA无法将其拉低,所以可以看到有个尖峰电压。换成0hm电阻,虽然不是高频,但是也

    我认为问题的原因应该在这里,您这里是只写了一个数据P2,如果您写第二个字节,应该也会在同样的地方出现尖峰,并且尖峰和这个一样,在SCL信号对齐。通常, 这是由于接收器拉低线路的速度较慢,可能有多种原因。 线路上的电容,器件正忙于处理等。 只有当主从之间有一个切换 (发送器发送数据、然后它让接收器将线路拉低) 时、才会产生此噪声,所以我认为即使换上0ohm电阻相当于一个电容,也会产生这个尖峰。

    能否直接将PCF8574的SCL,SDA直接和TXS0102接,跳过这个上拉,只使用内部集成了10Kohm试试。

    起始可以看到,即使有这个尖峰,但是后面的数据是没问题的,不影响通讯。 

  • 我们的上拉不是33Ω,一直是用的TXS0102 内部上拉的10kΩ哦。

    那个你看到的33Ω现在是换成了0Ω的,串联在SDA和SCL上的,不是上拉,是用来调试时候可以断开和连接需要访问的器件来用的。

  • 总线上挂接了几个PCF8574?

  • 总线上只挂了1片PCF8574,还有TMP75和INA226,但是我调试这个的时候都断开了。

  • 您好,那可以这样验证下,看下TMP75的I2C 的SDA是否也在ACK信号这里出现尖峰。 

    因为这个尖峰,可以通过增大上拉电阻从而减小Vol或者增大容性负载的方法应该得到改善,但是TXS0102的上拉10K无法调节,所以要么使用其他电平转换器件,通过外部上拉调节阻值,要么是验证下总线上的其他器件I2C时序是否正常。 根据您的描述,我认为接上TMP75,验证TMP75的时序是否正常。

  • 好的,我这边试试另外两个器件是否正常

  • 嗯,等着您的反馈。