В наши дни I2C комуникацията се превърна в един от най-използваните методи за свързване на множество устройства към микроконтролер като Arduino. той TCA9548A е 2-канален разширител на I8C шина, който решава един от най-често срещаните проблеми при този тип връзки: конфликтът на I2C адреси. Тази статия ще ви помогне да разберете как работи този разширител и как можете да го интегрирате във вашите Arduino проекти.
Ако някога сте срещали устройства, които споделят един и същ адрес в I2C шината, знаете колко разочароващо може да бъде да се опитвате да комуникирате с тях, без да причинявате конфликти. С използването на TCA9548A, можем да избегнем тези проблеми и да разширим броя на устройствата, свързани към една I2C шина. Нека разгледаме подробно възможностите, предлагани от този мултиплексор.
Какво е TCA9548A?
El TCA9548A е 2-канален разширител на I8C шина, разработен специално за устройства като Arduino. Основната му функция е да позволи свързването на няколко шини към една I2C шина, което я прави основен елемент за ефективно управление на комуникацията с няколко устройства. Може дори да се сравни с мултиплексор, но проектиран специално за I2C комуникация.
Това устройство има вход на I2C шина, състоящ се от две линии, SDA (данни) и SCL (часовник), свързани към 8 независими изхода, всеки със съответните си SDA и SCL. Това позволява микроконтролерът комуникира с до 8 устройства, като избирате с кой да взаимодействате във всеки един момент.
Освен това е обичайно да се използва TCA9548A за управление на устройства, които споделят един и същ I2C адрес, нещо обичайно при определени сензори и дисплеи, които не позволяват промяна на адреса им. С този мултиплексор можете да активирате канал и да комуникирате с устройство, без да пречите на други канали.
Предимства и акценти
Сред най-важните предимства на TCA9548A Има възможност за работа с I2C шини с различни нива на напрежение без необходимост от използване на логически адаптери. Това позволява на комуникация с устройства, работещи на 1.8V, 2.5V, 3.3V и 5V, което разширява възможностите за интеграция в различни проекти.
Друга ключова характеристика е, че мултиплексорът може да се управлява директно от I2C входната шина, което го прави много лесен за работа от микроконтролера. Работното му напрежение варира от 1.65 V до 5.5 V и поддържа I2C шини с честоти до 400 kHz, което го прави подходящ за различни устройства.
Conexión y конфигурация
Свързването на TCA9548A е доста просто. Трябва само да свържете входната шина към SDA и SCL линиите на Arduino, заедно със съответните захранващи щифтове (GND и 5V, например). От другата страна можете да свържете до 8 I2C устройства, всяко на съответните си канали със SDA и SCL.
Интересна особеност е, че можете да промените I2C адреса на TCA9548A от 0x70 до 0x77, като използвате щифтове A0, A1 и A2. Това е полезно, ако трябва да използвате повече от един мултиплексор в един и същи проект. Също така, ако по някаква причина трябва да нулирате мултиплексора, можете да го направите, като настроите RST пина LOW, който е настроен на изтегляне по подразбиране.
От съществено значение е да се има предвид, че с увеличаване на дължината на кабелите или сложността на свързаните устройства може да се наложи добавянето на съпротивления за изтегляне, за да се осигури правилното предаване на данни по I2C шината.
Примерен код за сканиране на I2C устройства
Преди да взаимодействате с устройства, свързани към TCA9548A, първо е важно да се гарантира, че мултиплексорът е разпознат правилно. За да направите това, можете да извършите сканиране на 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 шината, търсейки TCA9548A или други свързани устройства. След като мултиплексорът бъде идентифициран, можете да продължите да избирате канала, който трябва да активирате.
Избор на канал на 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);
}
}
С този код можете да изберете и да взаимодействате с всяко от устройствата, свързани към TCA9548A, един по един. Не забравяйте, че можете също да промените кода, за да сканирате изходите на всеки канал, търсейки допълнителни устройства.
El TCA9548A е отличен инструмент за разширяване на възможностите на I2C шината във вашите Arduino проекти, позволявайки ви да свържете множество устройства с един и същи адрес или различни нива на напрежение по ефективен и лесен начин.