TCA9548A: I2C Adres Çakışması Çözüm Rehberi

TCA9548A, 8 kanallı I2C çoklayıcıdır. Aynı I2C adresine sahip birden fazla sensörü Arduino / ESP32 / ESP8266 ile kullanma sorununu çözer.
I2C Adres Kısıtlaması Sorunu
I2C (Inter-Integrated Circuit), mikrodenetleyicilerde (Arduino, ESP32) sadece iki kablo (SDA ve SCL) kullanarak birden fazla cihazla konuşmayı sağlayan, son derece verimli bir haberleşme protokolüdür.
Ancak I2C’nin büyük bir kısıtlaması vardır: Her cihazın benzersiz bir adresi olmalıdır. Bazı popüler sensörlerin (Örn: BME280, MPU6050, bazı LCD’ler) sabit bir adresi (veya sadece 2 seçenekli adresi) vardır. Eğer projenizde aynı adrese sahip iki adet BME280 kullanmak isterseniz, Arduino hangi sensörle konuştuğunu ayırt edemez ve adres çakışması yaşarsınız.
İşte TCA9548A I2C Çoklayıcı modülü bu problemi çözmek için tasarlanmıştır.
TCA9548A Çalışma Prensibi: Sanal Buslar Oluşturma
TCA9548A, adeta bir telefon santrali veya bir ağ yönlendiricisi (Hub) gibi çalışır. Temel amacı, tek bir I2C hattını alıp, sekiz ayrı ve bağımsız I2C hattına bölmektir.
- Ana Bus: TCA9548A’nın bir tarafı (SDA ve SCL), doğrudan Arduino’nun ana I2C hattına bağlanır.
- Sekiz Alt Kanal: Diğer tarafta ise 8 adet tamamen izole edilmiş I2C kanalı (SC0/SD0’dan SC7/SD7’ye kadar) bulunur.
- Adresleme: Arduino, TCA9548A’ya hangi kanalı (0’dan 7’ye kadar) açması gerektiğini söyler. TCA9548A, bu komutu aldıktan sonra, istenen kanalı aktif hale getirir ve diğer 7 kanalı devre dışı bırakır.
- İzolasyon: Bu sayede, aynı adrese sahip olan sensörlerinizi (örn: BME280/0x76) Kanal 0’a ve Kanal 1’e bağlayabilirsiniz. Arduino, önce Kanal 0’ı açar, BME280-Kanal 0 ile konuşur, sonra Kanal 0’ı kapatır ve Kanal 1’i açarak BME280-Kanal 1 ile konuşur.
Bu sistem, aynı I2C hattı üzerinde 64 farklı adrese sahip (8 kanal * 8 adres) cihaz kullanabilmenize olanak tanır.
TCA9548A Teknik Özellikler ve Bağlantı
TCA9548A’nın Kendi Adresi: Çoklayıcının da Arduino ile konuşabilmesi için kendi bir I2C adresine ihtiyacı vardır. TCA9548A’nın bu adresi, modül üzerindeki A0, A1 ve A2 pinleri ile belirlenir. Bu pinler GND’ye veya VCC’ye bağlanarak 8 farklı adresten (0x70’ten 0x77’ye kadar) biri seçilebilir.
Bağlantı Şeması:
| TCA9548A Pini | Arduino Pini | Fonksiyon |
| VCC | 3.3V / 5V | Güç Girişi (Çoğu Modül 5V Toleranslıdır) |
| GND | GND | Toprak |
| SDA | Arduino SDA (A4) | Ana I2C Veri |
| SCL | Arduino SCL (A5) | Ana I2C Saat |
| A0, A1, A2 | GND/VCC | TCA9548A’nın Kendi Adresi (örn: 0x70) |
| SCx/SDx (x=0-7) | Sensör SCL/SDA | Sensör Bağlantıları |
Yazılım: TCA9548A’yı kontrol etmek için özel bir kütüphane kullanmak gerekir (örneğin Adafruit TCA9548A kütüphanesi). Bu kütüphane, Wire.beginTransmission(adres) komutundan önce tca.selectChannel(kanal_numarası) komutunu kullanmanızı sağlar.
TCA9548A Kullanım Alanları ve Avantajları
Avantajları:
- Adres Çözümü: Adres çakışması olan tüm projeler için tek ve en kolay çözüm.
- Pin Tasarrufu: Birden fazla aynı sensörü kullanmak için her birine ayrı analog/dijital pin kullanma zorunluluğunu ortadan kaldırır.
- Gürültü İzolasyonu: Aktif olmayan kanalları kapatarak, o kanal üzerindeki elektriksel gürültü ve sinyal bozukluklarının ana bus’a karışmasını engeller.
Kullanım Alanları:
- Geniş Sensör Dizileri: Aynı tipte 10-15 adet sıcaklık, nem veya basınç sensörünün kullanıldığı büyük ölçekli izleme sistemleri.
- Robotik: Bir robotun farklı yerlerine monte edilmiş MPU6050 jiroskop/ivmeölçerleri tek bir Arduino ile kontrol etme.
- Hata Ayıklama: Arızalı sensörleri, o kanalı kapatarak devreden izole etme.
ESP32 (Arduino IDE) Örnek Kodu
Gerekli Kütüphane: TCA9548A için yok. BME280 için “Adafruit BME280” kütüphanesini gerektirir.
//muratdonmez.com.tr
#include <Wire.h>
#include <Adafruit_Sensor.h> // BME280 için
#include <Adafruit_BME280.h> // BME280 için
#define TCA_ADDRESS 0x70 // Çoklayıcının I2C adresi
Adafruit_BME280 bme1; // 1. Sensör (Kanal 0'a bağlı)
Adafruit_BME280 bme2; // 2. Sensör (Kanal 1'e bağlı)
// Çoklayıcıda kanal seçmek için yardımcı fonksiyon
void tcaSelect(uint8_t kanal) {
if (kanal > 7) return;
Wire.beginTransmission(TCA_ADDRESS);
Wire.write(1 << kanal); // Kanalı seç
Wire.endTransmission();
}
void setup() {
Wire.begin();
Serial.begin(115200);
Serial.println("I2C Çoklayıcı Testi (2x BME280 ile)");
tcaSelect(0); // Kanal 0'ı aç
Serial.println("Kanal 0'daki sensör başlatılıyor...");
if (!bme1.begin(0x76)) { // Adres 0x76
Serial.println("Kanal 0'da BME280 bulunamadı!");
}
tcaSelect(1); // Kanal 1'i aç
Serial.println("Kanal 1'deki sensör başlatılıyor...");
if (!bme2.begin(0x76)) { // Yine aynı adres (0x76)
Serial.println("Kanal 1'de BME280 bulunamadı!");
}
}
void loop() {
Serial.println("--------------------");
tcaSelect(0); // Kanal 0'ı seç
Serial.print("[Kanal 0] Sıcaklık: ");
Serial.print(bme1.readTemperature());
Serial.println(" *C");
tcaSelect(1); // Kanal 1'i seç
Serial.print("[Kanal 1] Sıcaklık: ");
Serial.print(bme2.readTemperature());
Serial.println(" *C");
delay(2000);
}
Eğer akıllı ev, IOT projeleri ile ilgili sorularınız veya yapmak istediğiniz bir projeniz varsa, yedek alma ve yedekten dönme planınız veya felaket kurtarma planınız yoksa, işletmeniz için nasıl bir Sunucu, Bilgisayar veya Kesintisiz Güç Kaynağı seçmeniz gerektiğini bilmiyorsanız danışmanlık hizmetlerimden faydalanmak isterseniz bana WhatsApp üzerinden ulaşabilirsiniz.
İlgili Yazılar
- DS18B20 (Dijital Sıcaklık Sensörü)
- DHT11 / DHT22: Doğru Sıcaklık ve Nem Sensörünü Seçme Rehberi
- BME280: 3’ü 1 Arada Yüksek Hassasiyetli Ortam Sensörü
- BME680: Evinizdeki Havayı Kapsamlı Analiz Edin
- BMP388 ve BMP180: İrtifa ve Basınç Sensör Rehberi
- BH1750 Dijital Işık Sensörü: Lüx (Lux) Ölçer Rehberi
- TDS Sensörü: Su Kalitesi ve PPM Ölçer Rehberi
- Anemometre: Rüzgar Hızı Sensörü Nedir, Nasıl Çalışır?
Sık Sorulan Sorular
- TCA9548A nedir ve ne işe yarar?
TCA9548A, bir I2C Çoklayıcı (Multiplexer) çipidir. Tek bir I2C veri hattını, 8 adede kadar bağımsız I2C kanalına bölerek aynı adrese sahip birden fazla sensörün tek bir mikrodenetleyici tarafından kullanılmasını sağlar. - TCA9548A’yı kullanmanın temel nedeni nedir?
Temel neden, I2C adres çakışmasıdır. Aynı adrese sahip iki sensörü doğrudan aynı I2C hattına bağlayamazsınız. TCA9548A, bu sensörleri farklı sanal kanallara izole ederek çakışmayı önler. - TCA9548A’nın kendi I2C adresi var mıdır?
Evet. TCA9548A’nın kendisinin de Arduino ile konuşabilmesi için bir adresi vardır. A0, A1, A2 pinlerinin bağlantısına göre bu adres 0x70’ten 0x77’ye kadar ayarlanabilir. - Bir kanala bağladığım cihazın adresi ne olmalı?
Kanal 0’a bağladığınız sensörün adresi, ana I2C hattındaki diğer hiçbir sensörle çakışmadığı sürece herhangi bir adres olabilir. TCA9548A, kanalları izole ettiği için, Kanal 0’daki cihazın adresi ile Kanal 1’deki cihazın adresi aynı olabilir. - Çoklayıcıda aynı anda birden fazla kanal açık olabilir mi?
TCA9548A, genellikle tek bir kanalı izole etme prensibiyle çalışır. Ancak, verileri karıştırmamaya dikkat ederek bazı modellerde aynı anda birden fazla kanalın etkinleştirilmesi mümkündür (örneğin, tüm cihazlara aynı anda bir reset komutu göndermek için).






Henüz yorum yapılmamış.