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.

[参考译文] TCA9548A:在同一 I2C 总线上使用多个 TCA9548A、但通信是怪异的。

Guru**** 1956055 points
Other Parts Discussed in Thread: TCA9548A, LM36011
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/946303/tca9548a-using-multiple-tca9548a-on-the-same-i2c-bus-but-communication-is-weird

器件型号:TCA9548A
主题中讨论的其他器件: LM36011

您好!

在我的设计中、我使用两个 TCA9548A 连接到 Arduino UC 的同一 I2C 总线、并将8个 LM36011 LED 驱动器连接到每个 TCA9548A。 所有 LM36011 LED 驱动器都具有相同的 I2C 地址。  

我使用 A2-A0引脚设置了唯一的 I2C 地址、因此它们具有不同的地址、例如、一个是0x70、另一个是0x71。  

当我使用 Wire.h 库调用0x70器件的 CH1时会发生奇怪的情况、0x71中的某些通道也在响应、但0x70中的所有其他通道都保持安静(这是预期的)。  

我使用的代码如下所示。

  1. #include "Wire.h"
  2. extern "C"{
  3. #include "utility/twi.h"  
  4.  
  5. #define TCAADDR_A 0x70
  6. #define TCAADDR_B 0x71
  7. void tcaselect (uint8_t i){
  8. 如果(I > 7)返回;
  9. Wire.beginTransmission(TCAADDR_A);
  10. Wire.write (1 << I);
  11. wire.endTransmission ();
  12. void tcaselect (uint8_t i){
  13. 如果(I > 7)返回;
  14. Wire.beginTransmission(TCAADDR_B);
  15. Wire.write (1 << I);
  16. wire.endTransmission ();

从0x71器件响应的通道似乎是随机的、它因电路板而异。  

一定会有问题、但我不太理解为什么会发生。 可以帮帮你吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我认为您缺少分号:

    "

    1. void tcaselect (uint8_t i){
    2. 如果(I > 7)返回;
    3. Wire.beginTransmission(TCAADDR_A);
    4. Wire.write (1 << I);
    5. Wire.endTransmission ();}//我认为,除非您尝试包括其他函数(同名?)

    "

    我怀疑您可能只是将其复制错误地粘贴到论坛中、这可能不是原因。

    我们可以通过查看 SDA/SCL 线路的范围来尝试查看问题是否在 I2C 侧。 您是否能够获取此内容的范围?

    如果我们查看 I2C 总线的方框图和器件原理图、也会有所帮助。

    谢谢、

    -Bobby

x 出现错误。请重试或与管理员联系。