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:多层多路复用器-代码

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1492374/tca9548a-multiple-layers-of-multiplexers---code

器件型号:TCA9548A

工具与软件:

您好、我尝试从18个 IMU 中读取数据。 IMU 都具有相同的地址、因此我使用的是 TCA9548A。 在我的设置中、我需要一个初级多路复用器和三个次级多路复用器。 次级多路复用器将连接在初级多路复用器的通道0、1和2上。 我的第一个次级多路复用器将连接8个 IMU。 我的第二个次级多路复用器将连接8个 IMU。 我的第三个次级多路复用器将连接2个 IMU。 我遇到了 Arduino 代码问题、可以单独与每个 IMU 进行对话。 我可以听到 IMU 1-8的声音、但不能听到9-18的声音。 这是我的代码的简介和设置环路。 我的问题是、我如何请求初级多路复用器上的通道1、然后次级多路复用器上的通道3从 IMU 12读取数据? 谢谢!  

#include
#include
#include

#define PRIMARY_TCA_ADDR 0x70 //第一个多路复用器的地址
#define SECONDARY_TCA_ADDR1 0x71 //第二级多路复用器1的地址
#define SECONDARY_TCA_ADDR2 0x72 //第二级多路复用器2的地址
#define SECONDARY_TCA_ADDR3 0x73 //二级多路复用器3的地址

Adafruit_BNO055 BNO = Adafruit_BNO055 (55、0x28)

//用于选择多路复用器上的通道
void selectChannel (uint8_t tca_addruint8_t channel)
   Wire.beginTransmission(tca_addr);
   wire.write (1 << channel)//通过位转换选择通道
   Wire.endTransmission ();
}

void setup(){
   Serial.begin(115200);
   Wire.begin();

   //初始化所有 IMU
   //在主多路复用器上通过通道0、1、2进行循环
   对于(int primary = 0;primary < 3;primary++)
     selectChannel (PRIMARY_TCA_ADDR、PRIMARY)
     delay(10)

     uint8_t secondary_tca_addr_temp;
     if (PRIMARY = 0)SECONDARY_TCA_ADDR_temp = SECONDARY_TCA_ADDR1;
     否则、如果(PRIMARY = 1)SECONDARY_TCA_ADDR_temp = SECONDARY_TCA_ADDR2;
     否则、如果(PRIMARY = 2)SECONDARY_TCA_ADDR_temp = SECONDARY_TCA_ADDR3;

     //循环通过辅助多路复用器上的所有通道
     对于(int secondary = 0;secondary < 8;secondary ++)
        //跳过通道未在最后一个多路复用器上使用
        如果((主要=2)&&(次要>1))
          休息
        }

        selectChannel (secondary_tca_addr_temp、secondary)
        delay (20)//留出 I2C 器件唤醒的时间

        如果(!bno.begin ()){
          serial.print ("IMU ")serial.print (primary * 8 + secondary + 1)
          serial.println ("未检测到。")
          delay(10)
        }
        否则
          bno.setExtCrystalUse(true);//使用外部晶体以获得更高的精度
          serial.print ("IMU ")serial.print (primary * 8 + secondary + 1)
          serial.println ("检测到。")
        }
     }
   }
}

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

    请展示原理图。

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

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

    Alexis、您好

    这 对我自己和 Clemen 来说是一个很好的概念性图像、但您是否碰巧拥有应用中使用的上拉电压和上拉电阻器的此版本?

    就细节而言、这种看起来有点像这样的东西会很有帮助

    此致、

    Kameron

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

    根据您的说明、MUX1和 MUX2可以正常工作、但 MUX3和 MUX4无法正常工作。 因此、某些细节可能是错误的。