V dnešní době se I2C komunikace stala jednou z nejpoužívanějších metod pro připojení více zařízení k mikrokontroléru, jako je Arduino. On TCA9548A je 2kanálový extender sběrnice I8C, který řeší jeden z nejčastějších problémů tohoto typu připojení: konflikt adres I2C. Tento článek vám pomůže pochopit, jak tento extender funguje a jak jej můžete integrovat do svých projektů Arduino.
Pokud jste se někdy setkali se zařízeními, která sdílejí stejnou adresu na sběrnici I2C, víte, jak frustrující může být pokus s nimi komunikovat, aniž by došlo ke konfliktům. S použitím TCA9548A, můžeme se těmto problémům vyhnout a rozšířit počet zařízení připojených k jedné I2C sběrnici. Podívejme se podrobně na možnosti, které tento multiplexer nabízí.
Co je TCA9548A?
El TCA9548A je 2kanálový I8C bus extender vyvinutý speciálně pro zařízení jako je Arduino. Jeho hlavní funkcí je umožnit připojení několika sběrnic k jedné I2C sběrnici, což z něj činí základní prvek pro efektivní řízení komunikace s několika zařízeními. Dal by se dokonce přirovnat k multiplexeru, ale navržený speciálně pro I2C komunikaci.
Toto zařízení má vstup I2C sběrnice sestávající ze dvou linek, SDA (data) a SCL (hodiny), připojených k 8 nezávislým výstupům, z nichž každý má odpovídající SDA a SCL. To umožňuje mikrokontrolér komunikuje až s 8 zařízeními, výběr, se kterým budete v každém okamžiku komunikovat.
Kromě toho je běžné používat TCA9548A ke správě zařízení, která sdílejí stejnou I2C adresu, což je běžné u určitých senzorů a displejů, které neumožňují změnu jejich adresy. S tímto multiplexerem můžete aktivovat kanál a komunikovat se zařízením, aniž byste rušili ostatní kanály.
Výhody a přednosti
Mezi nejdůležitější výhody TCA9548A Je zde možnost pracovat s I2C sběrnicemi různých napěťových úrovní bez nutnosti použití logických adaptérů. To umožňuje komunikace se zařízeními pracujícími při 1.8V, 2.5V, 3.3V a 5V, která rozšiřuje možnosti integrace v různých projektech.
Další klíčovou vlastností je, že multiplexer lze ovládat přímo ze vstupní sběrnice I2C, což velmi usnadňuje ovládání z mikrokontroléru. Jeho provozní napětí se pohybuje od 1.65 V do 5.5 V a podporuje sběrnice I2C s frekvencemi až 400 kHz, díky čemuž je vhodný pro různá zařízení.
Připojení a konfigurace
Připojení TCA9548A je celkem jednoduché. Stačí pouze připojit vstupní sběrnici k linkám SDA a SCL Arduina spolu s odpovídajícími napájecími kolíky (například GND a 5V). Na druhém konci můžete připojit až 8 I2C zařízení, každé na svých příslušných kanálech s SDA a SCL.
Zajímavou funkcí je, že můžete upravit I2C adresu TCA9548A z 0x70 na 0x77 pomocí pinů A0, A1 a A2. To je užitečné, pokud potřebujete použít více než jeden multiplexer ve stejném projektu. Také, pokud z nějakého důvodu potřebujete resetovat multiplexer, můžete tak učinit nastavením RST pinu LOW, který je standardně nastaven na pull-up.
Je nezbytné mít na paměti, že s rostoucí délkou kabelů nebo složitostí připojených zařízení může být nutné přidat pull-up rezistory pro zajištění správného přenosu dat na I2C sběrnici.
Příklad kódu pro skenování I2C zařízení
Před interakcí se zařízeními připojenými k TCA9548A, je nejprve důležité zajistit, aby byl multiplexer správně detekován. Chcete-li to provést, můžete provést skenování sběrnice I2C. Níže uvádíme základní příklad pro detekci samotného multiplexeru na sběrnici.
#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);
}
Výše uvedený kód skenuje možné adresy sběrnice I2C a hledá TCA9548A nebo jiných připojených zařízení. Jakmile je multiplexor identifikován, můžete pokračovat ve výběru kanálu, který potřebujete aktivovat.
Výběr kanálu TCA9548A
Jakmile máme multiplexer nakonfigurován a detekován, musíme vybrat správný kanál pro komunikaci s požadovaným zařízením. To lze snadno provést zápisem bajtu, který aktivuje konkrétní kanál. Zde je příklad, jak vybrat kanál:
#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);
}
}
Pomocí tohoto kódu můžete vybrat a pracovat s jakýmkoli zařízením připojeným k TCA9548A, jeden po druhém. Pamatujte, že můžete také upravit kód pro skenování výstupů každého kanálu a hledat další zařízení.
El TCA9548A je vynikající nástroj pro rozšíření možností sběrnice I2C ve vašich projektech Arduino, který vám umožní připojit více zařízení se stejnou adresou nebo různými úrovněmi napětí efektivním a jednoduchým způsobem.