TCA9548A

Adafruit · TCA9548A I2C Multiplexer, PID 2717, версия без STEMMA QT

Разделение I²C на восемь ветвей, в том числе для устройств с одинаковыми адресами.

Автор: SLDV LAB

Опубликовано · Обновлено

СложностьСредне
Проекты с компонентом

О МОДУЛЕ

Что делает TCA9548A I2C Multiplexer, PID 2717, версия без STEMMA QT

TCA9548A подключает выбранные ветви I²C к общей стороне SDA/SCL. Датчики с одинаковым адресом размещают на разных ветвях и включают по одному. Сам адрес датчика не меняется; переключатель задаёт видимую часть шины.

Разрешено включать несколько каналов одновременно, но адресные конфликты и суммарная ёмкость тогда возвращаются. Каждой используемой стороне нужны правильно рассчитанные подтяжки. Возможность согласования разных напряжений зависит от VCC и уровня проходного ключа по datasheet; произвольное смешивание 5 В и 1,8 В недопустимо без расчёта. Пример использует одну 5-вольтовую систему.

После подачи питания все ветви отключены. RESET позволяет отключить зависшую ветвь аппаратно, однако в простом примере он лишь подтянут вверх. Рассматривается Adafruit PID 2717 без STEMMA QT. На этой плате RST подтянут вверх, A0–A2 вниз; у выходных SD/SC собственных подтяжек нет. Не переносите эти особенности на похожие модули.

Плата Adafruit TCA9548A, изделие 2717.

TCA9548A. Фото: lady ada / Adafruit. Оригинал: https://learn.adafruit.com/assets/27695 . Лицензия фотографии: CC BY-SA 3.0, https://creativecommons.org/licenses/by-sa/3.0/ . Изменения: Удалён исходный фон вокруг платы; очищены видимые просветы отверстий с сохранением металлических стенок. Пропорциональное масштабирование, размещение на предоставленном фоне и JPEG-сжатие. Геометрия, маркировка и видимые детали не перерисовывались. Для готовой обложки выполнено цветоуправляемое преобразование Adobe RGB в sRGB; исходные RGB-значения и профиль сохранены в прозрачном PNG. Адаптация фотографии распространяется по той же лицензии. Плата Adafruit TCA9548A, изделие 2717.

Схема распиновки

Авторская распиновка SLDV LAB: Adafruit 2717, TCA9548A без STEMMA QT. Сторона компонентов; VIN вверху слева. Оба ряда читаются сверху вниз. Для других ревизий и плат требуется отдельная проверка.

Источники: 1, 2. Авторская схема SLDV LAB по фактам документации.

Характеристики

Ветвей I²C
8
Адреса чипа
0x70–0x77, определяются A0–A2
Предельная частота I²C чипа
400 кГц
Интерфейс
I²C
Питание модуля
Adafruit PID 2717: Vin 3–5 В по руководству платы; в примере Vin и подтяжки I²C 5 В, логика Uno R3 5 В.

ПРАКТИКА

Подключение

Контакт модуляКонтакт платыНазначение
Vin5VAdafruit PID 2717; питание по руководству платы, логика Uno R3 5 В.
GNDGNDОбщая земля.
SDAA4 / SDAОдин и тот же сигнал Uno R3; подтяжки к питанию модуля.
SCLA5 / SCLПорядок контактов на модуле определять по маркировке, не по положению.
A0 / A1 / A2Не подключатьНа Adafruit PID 2717 штатно подтянуты к GND, адрес 0x70.
RSTНе подключатьНа Adafruit PID 2717 штатно подтянут вверх; краткий LOW выполняет сброс.
SD0 / SC0SDA / SCL устройства ветви 0В примере устройство ветви на 5 В; SD0/SC0 нужны подтяжки к 5 В, например 4,7 кОм, если их нет у устройства.

Подходит для Arduino. Выберите контакты по документации своей платы.

ВАШ ПРОЕКТ · ВАШ ДАТЧИК

Интегрируйте модуль с ChatGPT

Скопируйте запрос в ChatGPT. Укажите свою плату и среду разработки — получите подключение и код для своего проекта.

Помоги интегрировать TCA9548A. Сначала уточни точную плату модуля, контроллер, среду, питание и задачу. Проверь схему, логические уровни и маркировку контактов; затем дай согласованные подключение, зависимости и полный минимальный пример с обработкой ошибок. Объясни безопасную первичную проверку и ожидаемый результат. Не включай одновременно ветви с конфликтующими адресами; проверь отдельные подтяжки и общий адрес самого мультиплексора.

Библиотеки

Установите библиотеку для своей среды и откройте пример из её документации.

Что именно прописать

Плата и ядро
Arduino Uno R3; Arduino AVR Boards 1.8.6

Распиновка относится к ATmega328P Uno R3; не Uno R4 и не ESP32.

Адрес
0x70

A0–A2 соединены с GND.

Выбор ветви
Wire.write(1U << channel)

Однобайтовая маска; channel от 0 до 7.

Частота шины
100000

Wire.setClock(100000); все узлы должны поддерживать этот режим.

Arduino: полный сканер восьми ветвей

cpp
#include <Wire.h>
const uint8_t MUX = 0x70;
bool selectMask(uint8_t mask) {
  Wire.beginTransmission(MUX);
  Wire.write(mask);
  return Wire.endTransmission() == 0;
}
void setup() {
  Serial.begin(115200);
  Wire.begin();
  Wire.setClock(100000);
  Wire.setWireTimeout(25000, true);
  if (!selectMask(0)) { Serial.println("TCA9548A not found"); return; }
  for (uint8_t channel = 0; channel < 8; ++channel) {
    if (!selectMask(uint8_t(1U << channel))) {
      Serial.println("Channel selection failed");
      break;
    }
    Serial.print("Channel "); Serial.println(channel);
    for (uint8_t address = 8; address < 120; ++address) {
      if (address == MUX) continue;
      Wire.beginTransmission(address);
      uint8_t error = Wire.endTransmission();
      if (error == 0) { Serial.print("  0x"); Serial.println(address, HEX); }
      else if (error != 2) { Serial.print("Bus error: "); Serial.println(error); }
    }
  }
  if (!selectMask(0)) Serial.println("Cannot disable channels; check RESET");
}
void loop() {}

Полный скетч для Uno R3, Wire из Arduino AVR Boards 1.8.6. Сверены beginTransmission, request API и setWireTimeout; аппаратных тестов и компиляции не было. Устройства на общей стороне видны при сканировании каждой ветви; не путайте их с восемью копиями датчика.

Проекты с этим компонентом

Все проекты

Связанные проекты пока не опубликованы.

Связанные материалы и компоненты