В настоящее время связь I2C стала одним из наиболее часто используемых методов подключения нескольких устройств к микроконтроллеру, такому как Arduino. Он ТСА9548А — это 2-канальный расширитель шины I8C, который решает одну из наиболее распространенных проблем этого типа соединений: конфликт адресов I2C. Эта статья поможет вам понять, как работает этот расширитель и как его можно интегрировать в свои проекты Arduino.
Если вы когда-либо сталкивались с устройствами, которые используют один и тот же адрес на шине I2C, вы знаете, насколько неприятной может быть попытка связаться с ними, не вызывая конфликтов. С использованием ТСА9548А, мы можем избежать этих проблем и увеличить количество устройств, подключенных к одной шине I2C. Давайте подробно рассмотрим возможности, предлагаемые этим мультиплексором.
Что такое TCA9548A?
El ТСА9548А — это 2-канальный расширитель шины I8C, разработанный специально для таких устройств, как Arduino. Его основная функция — обеспечить подключение нескольких шин к одной шине I2C, что делает его фундаментальным элементом для эффективного управления связью с несколькими устройствами. Его можно даже сравнить с мультиплексором, но он разработан специально для связи I2C.
Это устройство имеет вход шины I2C, состоящий из двух линий, SDA (данные) и SCL (тактовые часы), подключенных к 8 независимым выходам, каждый из которых имеет соответствующие SDA и SCL. Это позволяет микроконтроллер обменивается данными с 8 устройствами, выбирая, с кем взаимодействовать в каждый момент.
Кроме того, TCA9548A обычно используется для управления устройствами, которые имеют один и тот же адрес I2C, что характерно для некоторых датчиков и дисплеев, которые не позволяют изменять свой адрес. С помощью этого мультиплексора вы можете активировать канал и общаться с устройством, не мешая другим каналам.
Преимущества и особенности
Среди наиболее важных преимуществ ТСА9548А Имеется возможность работы с шинами I2C разного уровня напряжения без необходимости использования логических адаптеров. Это позволяет связь с устройствами, работающими при напряжении 1.8В, 2.5В, 3.3В и 5В, что расширяет возможности интеграции в различные проекты.
Еще одной ключевой особенностью является то, что мультиплексором можно управлять непосредственно с входной шины I2C, что упрощает работу с микроконтроллером. Его рабочее напряжение варьируется от 1.65 В до 5.5 В, он поддерживает шины I2C с частотой до 400 кГц, что делает его пригодным для различных устройств.
Подключение и конфигурация
Подключить TCA9548A довольно просто.. Вам нужно только подключить входную шину к линиям SDA и SCL Arduino вместе с соответствующими контактами питания (например, GND и 5 В). На другом конце вы можете подключить до 8 устройств I2C, каждое на своих каналах с SDA и SCL.
Интересной особенностью является то, что вы можете изменить адрес I2C TCA9548A с 0x70 на 0x77, используя контакты A0, A1 и A2. Это полезно, если вам нужно использовать более одного мультиплексора в одном проекте. Кроме того, если по какой-то причине вам необходимо перезагрузить мультиплексор, вы можете сделать это, установив LOW на выводе RST, который по умолчанию настроен на подтягивание.
Важно иметь в виду, что по мере увеличения длины кабелей или сложности подключаемых устройств может возникнуть необходимость добавления подтягивающих резисторов для обеспечения корректной передачи данных по шине I2C.
Пример кода для сканирования устройств I2C
Прежде чем взаимодействовать с устройствами, подключенными к ТСА9548А, сначала важно убедиться, что мультиплексор определен правильно. Для этого можно выполнить сканирование шины I2C. Ниже мы покажем базовый пример обнаружения самого мультиплексора на шине.
#include "Wire.h"
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("Escaneando bus I2C...");
for (byte address = 8; address <= 119; address++) {
Wire.beginTransmission(address);
byte error = Wire.endTransmission();
if (error == 0) {
Serial.print("Encontrado dispositivo en dirección 0x");
Serial.println(address, HEX);
}
}
Serial.println("Escaneo finalizado");
}
void loop() {
delay(1000);
}
Приведенный выше код сканирует возможные адреса шины I2C в поисках ТСА9548А или другие подключенные устройства. После того, как мультиплексор определен, можно переходить к выбору канала, который необходимо активировать.
Выбор канала TCA9548A
После того, как мы настроили и обнаружили мультиплексор, нам нужно выбрать правильный канал для связи с нужным устройством. Это можно легко сделать, записав байт, который активирует конкретный канал. Вот пример того, как выбрать канал:
#define TCAADDR 0x70
void tcaselect(uint8_t i) {
if (i > 7) return;
Wire.beginTransmission(TCAADDR);
Wire.write(1 << i);
Wire.endTransmission();
}
void setup() {
Wire.begin();
Serial.begin(115200);
for (uint8_t t=0; t<8; t++) {
tcaselect(t);
Serial.print("Escaneando salida ");
Serial.println(t);
}
}
С помощью этого кода вы можете выбирать и взаимодействовать с любым из устройств, подключенных к ТСА9548А, по одному. Помните, что вы также можете изменить код для сканирования выходов каждого канала в поисках дополнительных устройств.
El ТСА9548А — отличный инструмент для расширения возможностей шины I2C в ваших проектах Arduino, позволяющий эффективно и просто подключать несколько устройств с одним и тем же адресом или разными уровнями напряжения.