lamaPLC: TCA9548A (HW617); Low-Voltage 8-Channel I²C Switch Module

TCA9548A (HW617) The TCA9548A device features eight bidirectional switches that can be controlled via the I²C bus. The upstream SCL/SDA pair connects to eight downstream channels. Any individual channel or combination of channels can be selected based on the contents of the programmable control register. These downstream channels help resolve I²C target address conflicts. For example, if eight identical digital temperature sensors are required in the application, one sensor can be connected to each channel: 0-7.

TCA9548A (HW617)

Technical data

  • 1-to-8 Bidirectional translating switches
  • I²C Bus and SMBus compatible
  • Active-low reset input
  • Three address pins, allowing up to eight TCA9548A devices on the I²C bus
  • Channel selection through an I2C Bus, in any combination
  • Power up with all switch channels deselected
  • Low RON switches
  • Allows voltage-level translation between 1.8V, 2.5V, 3.3V, and 5V buses
  • No glitch on power up
  • Supports hot insertion
  • Low standby current
  • Operating power-supply voltage range of 1.65 to 5.5 V
  • 5-V Tolerant inputs
  • 0 to 400kHz Clock frequency
  • Latch-up performance exceeds 100mA per JESD 78, class II

Device Address

TCA9548A (HW617) Device Address The last bit of the target address defines the operation (read or write) to be performed. When it is high (1), a read is selected, while a low (0) selects a write operation. Shows the TCA9548A address reference: TCA9548A (HW617) Device Address

Arduino

To call the module, you only need the “wire” library. The code below scans the module, for example:

/**
 * TCA9548 I2CScanner.ino -- I2C bus scanner for Arduino
 *
 * Based on https://playground.arduino.cc/Main/I2cScanner/
 *
 */
 
#include "Wire.h"
 
#define TCAADDR 0x70
 
void tcaselect(uint8_t i) {
  if (i > 7) return;
 
  Wire.beginTransmission(TCAADDR);
  Wire.write(1 << i);
  Wire.endTransmission();  
}
 
 
// standard Arduino setup()
void setup()
{
    while (!Serial);
    delay(1000);
 
    Wire.begin();
 
    Serial.begin(115200);
    Serial.println("\nTCAScanner ready!");
 
    for (uint8_t t=0; t<8; t++) {
      tcaselect(t);
      Serial.print("TCA Port #"); Serial.println(t);
 
      for (uint8_t addr = 0; addr<=127; addr++) {
        if (addr == TCAADDR) continue;
 
        Wire.beginTransmission(addr);
        if (!Wire.endTransmission()) {
          Serial.print("Found I2C 0x");  Serial.println(addr,HEX);
        }
      }
    }
    Serial.println("\ndone");
}
 
void loop() 
{
}

More codes on the Adafruit website: https://learn.adafruit.com/adafruit-tca9548a-1-to-8-i2c-multiplexer-breakout/arduino-wiring-and-test

Source

I²C topics on lamaPLC

PageDateTags
2025/05/31 21:56, , , , , , ,
2025/05/31 21:32, , , , , , , ,
2025/11/21 23:07, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
2023/07/01 15:29, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
2025/11/22 20:33, , , ,
2025/09/23 19:08, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
2025/10/09 21:58, , , , , ,
2025/11/13 21:54, , , ,
2025/11/22 18:20, , , , , ,
2025/10/09 16:03, , , ,




This page has been accessed for: Today: 1, Until now: 13