Aynı I2C adresine sahip birden fazla cihazın (örneğin aynı I2C adresini kullanan birden fazla 0.96 inç OLED ekranın) tek bir mikrokontrolcüye bağlanması gerektiğinde adres çakışması sorunu yaşanır. TCA9548A I2C Multiplexer (Çoklayıcı) entegresi, tek bir I2C kanalını 8 ayrı bağımsız I2C kanalına bölerek aynı adrese sahip birden fazla ekranın veya sensörün aynı anda kullanılmasını sağlar.

Görseldeki devre şemasına göre mikrokontrolcü, TCA9548A çoklayıcı ve OLED ekranlar arasındaki bağlantı haritası şu şekildedir:
| Bileşen / Hat | TCA9548A Terminali | Mikrokontrolcü / Ekran Karşılığı | Açıklama / Kablo Rengi |
|---|---|---|---|
| Ana I2C & Güç (Mikrokontrolcü) | VIN | VCC (5V / 3.3V) | Güç Beslemesi (Kırmızı Kablo) |
| GND | GND | Toprak Hattı (Siyah Kablo) | |
| SDA | MCU SDA Pini | Ana I2C Veri Hattı | |
| SCL | MCU SCL Pini | Ana I2C Saat Sinyali | |
| OLED Ekran Kanalları (Örnek) | SD0 / SC0 (Kanal 0) | 1. OLED (SDA / SCK) | Birinci Ekran Bağlantısı |
| SD1 / SC1 (Kanal 1) | 2. OLED (SDA / SCK) | İkinci Ekran Bağlantısı |
0x70 I2C adresine sahiptir. Kod içerisinden hangi kanala veri gönderileceği seçilerek aynı adrese sahip birden fazla OLED ekrana ayrı ayrı veri yazılabilir.
Aşağıdaki C++ kodu, TCA9548A üzerindeki kanalları değiştirerek farklı OLED ekranlara ayrı ayrı metin yazdırmayı sağlar:
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// TCA9548A I2C Adresi
#define TCA_ADDR 0x70
// OLED Ekran Ölçüleri
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// TCA9548A ilgili kanalını seçme fonksiyonu
void tcaSelect(uint8_t bus) {
if (bus > 7) return;
Wire.beginTransmission(TCA_ADDR);
Wire.write(1 << bus);
Wire.endTransmission();
}
void setup() {
Serial.begin(115200);
Wire.begin();
delay(100);
// 1. Ekranı Yapılandır (Kanal 0)
tcaSelect(0);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("Kanal 0 OLED Bulunamadı!");
while(1);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Ekran 1 (Kanal 0)");
display.display();
// 2. Ekranı Yapılandır (Kanal 1)
tcaSelect(1);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("Kanal 1 OLED Bulunamadı!");
while(1);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Ekran 2 (Kanal 1)");
display.display();
}
void loop() {
// İhtiyaca göre kanallar arası geçiş yapılarak ekranlar güncellenebilir
delay(1000);
}
Henüz yorum yapılmamış. İlk yorumu siz yapın!