Haberler

TCA9548A I2C Çoklayıcısı ile Birden Fazla I2C Sensörü Nasıl Bağlanır

Bu makalede, I2C Çoklayıcı kullanımı hakkında bilmeniz gereken her şeyi ele alacağım. Aşağıdakileri kapsayacağız:

  • I2C İletişim Protokolü nedir?
  • Neden I2C Çoklayıcı kullanmalıyız?
  • I2C Çoklayıcı nasıl çalışır?
  • I2C Çoklayıcıyı Arduino ile nasıl kullanılır?

Özet: I2C Nedir?

I2C, I-kare-C olarak telaffuz edilir, entegre devreler arası iletişim anlamına gelir. I2C, SPI (Seri Peripheral Arayüzü) ve UART (Evrensel Asenkron Alıcı / Verici) protokollerinin en iyi özelliklerini birleştiren esnek bir çoklu-master, çoklu-slave seri iletişim protokolüdür.

UART ile karşılaştırıldığında, I2C, çevresel cihazlarla daha hızlı ve daha fazla eşzamanlı bağlantıları destekleyebilir. Aynı zamanda, yalnızca iki tel gerektirmesi ve çoklu-master arayüzlerine izin vermesiyle SPI’nin zayıflıklarını da aşar.

Sonuç olarak, I2C, birçok donanım modülünde bulunan çok popüler bir iletişim protokolüdür. Örneğin, I2C iletişimi kullanan bazı popüler Grove modülleri şunlardır:

I2C hakkında daha derinlemesine bilgi edinmek için I2C İletişim Kılavuzumuzu okumayı unutmayın.

I2C ile UART ve SPI gibi diğer protokoller arasındaki farklardan kafanız karıştıysa, bu makaleyi okumanız da faydalı olacaktır; burada her bir iletişim protokolü ve kullanım alanları arasındaki farkları açıklıyoruz. 

Neden I2C Çoklayıcı kullanmalıyız? – I2C Adresleme

I2C, tek bir kontrolcünün (master) birden fazla çevresel cihazla (slave) iletişim kurmasına izin verdiğinden, her mesajın hangi çevresel cihaza ait olduğunu belirlemenin bir yolu olmalıdır. I2C’de bu adresleme ile yapılır. I2C kullanan her cihazın bir I2C adresi vardır.

Kaynak: CircuitBasics

Kontrolcü, iletişim kurmak istediği çevresel cihazın adresini her bağlı çevresel cihaza gönderir. Her çevresel cihaz, alınan adresi kendi adresiyle karşılaştırır ve eşleşme varsa kontrolcüye bir onay biti gönderir. Aksi takdirde, mesaj yok sayılır. Bunun ardından, kontrolcüden çevresel cihaza veri gönderilir ve bu da tekrar onaylanır.

Bu kulağa basit ve anlaşılır geliyor, ancak aynı sistemde iki I2C modülü kullanmak istediğimizde ne olur? Çoğu I2C cihazı sabit bir adrese sahiptir, bu nedenle aynı cihazdan birden fazla kullanmak istiyorsanız, adresleme çakışması ile karşılaşacaksınız.

İşte burada çoklayıcı devreye giriyor!

I2C Çoklayıcı nasıl çalışır?

Bugünkü kılavuz için doğrudan bir örnek olarak, TCA9548A tabanlı Grove 8-Kanal I2C Hub‘a bakacağız. Grove, karmaşık kablolama veya lehimleme gereksinimini ortadan kaldırarak donanım ve elektroniği daha erişilebilir hale getiren standartlaştırılmış, modüler bir prototipleme sistemidir. Bugüne kadar, Grove 300’den fazla uyumlu modül sunarak herkesin her türlü projeyi kolayca inşa etmesini sağlar.

Grove 8-Kanal I2C Hub, TCA9548A I2C Çoklayıcı Çipini kullanır. Adından da anlaşılacağı gibi, 8 farklı kanal ile arayüz oluşturabilir.

Hub’ın kendisi 0x70 I2C adresine sahiptir. Ancak bu adrese veri yazarak, hangi kanalı açmak veya kapatmak istediğimizi anlık olarak seçebiliriz. Çakışan I2C adreslerine sahip cihazları bağladığımızda, verileri iletmeden önce istediğimiz kanalları ayarlayabiliriz. Böylece, belirli bir I2C adresinde teknik olarak yalnızca bir ‘aktif’ cihaz olduğundan, çakışmayı ortadan kaldırmış oluruz.

Arduino IDE ile I2C Çoklayıcı Kullanımı

Neyse ki, tüm Grove modülleri gibi, Grove 8-Kanal I2C Hub da herhangi bir Arduino uyumlu mikrodenetleyici ile hızlı ve pratik bir şekilde arayüz oluşturmanızı sağlayan bir Arduino yazılım kütüphanesi ile birlikte gelir. Çakışan I2C adreslerine sahip birden fazla modülle arayüz oluşturmak için hub’ı nasıl kontrol edebileceğimize bakalım.

Adım 1: Grove 8 Kanal I2C Hub Kütüphanesini indirin ve yükleyin.

Adım 2: Arduino Sketch’inize Aşağıdaki Kodu Dahil Edin.

#include "TCA9548A.h"
// Eğer yazılım I2C kullanıyorsanız, TCA9548A.h'da SOFTWAREWIRE tanımını açabilirsiniz. 
#ifdef SOFTWAREWIRE
  #include <SoftwareWIRE.h>
  SoftwareWire myWIRE(3, 2);
  TCA9548A<SoftwareWire> TCA;
  #define WIRE myWIRE
#else   
  #include <Wire.h>
  TCA9548A<TwoWire> TCA;
  #define WIRE Wire
#endif

Adım 3: Setup() içinde Grove Hub’daki TCA Çoklayıcısına Bağlantıyı Açın.

TCA.begin(WIRE);

Adım 4: Kodu yazın!

Diyelim ki, 0x38 I2C adresine sahip iki Grove – AHT20 I2C Sıcaklık ve Nem Sensörü kullanmak istiyoruz ve bunları 0 ve 1 numaralı portlara takıyoruz. İşleri kolaylaştırmak için, AHT20 sensörü için Grove kütüphanesini de dahil edelim; bu kütüphaneyi buradan indirebilirsiniz.

#include "AHT20.h"

Ayrıca, her sensörü ayrı ayrı başlatın ve ilgili kanalları açıp kapatmaya dikkat edin.

TCA.openChannel(TCA_CHANNEL_0);
AHT.begin();
TCA.closeChannel(TCA_CHANNEL_0);
TCA.openChannel(TCA_CHANNEL_1);
AHT.begin();
TCA.closeChannel(TCA_CHANNEL_1);

Her sensörden okumaları almak, benzer bir şekilde yapılabilir. Ortaya çıkan kod, her sensörden sıcaklık ve nem okumalarını ardışık olarak seri monitöre okur ve yazdırır. Elbette, bu yöntemi çakışan adreslere sahip diğer Grove I2C sensörlerini kullanmak için kolayca genişletebilirsiniz!

void loop()
{
    float humi1, temp1, humi2, temp2;
 
    // İlk AHT20 Sensörü
    TCA.openChannel(TCA_CHANNEL_0);
    int ret1 = AHT.getSensor(&humi1, &temp1);

    if(ret1)     // AHT20 1'den Veri Alma Başarılı
    {
        Serial.print("nem: ");
        Serial.print(humi1*100);
        Serial.print("%\t sıcaklık: ");
        Serial.println(temp1);
    }
    else
    {
        Serial.println("AHT20 1'den Veri Alma Başarısız");
    }

    TCA.closeChannel(TCA_CHANNEL_0);
    
    // İkinci AHT20 Sensörü
    TCA.openChannel(TCA_CHANNEL_1);
    int ret2 = AHT.getSensor(&humi2, &temp2);

    if(ret2)     // AHT20 2'den Veri Alma Başarılı
    {
        Serial.print("nem: ");
        Serial.print(humi2*100);
        Serial.print("%\t sıcaklık: ");
        Serial.println(temp2);
    }
    else
    {
        Serial.println("AHT20 2'den Veri Alma Başarısız");
    }

    TCA.closeChannel(TCA_CHANNEL_1);
 
    delay(100);
}

Özet

Bu, I2C çoklayıcılar konusundaki eğitimimizi sonlandırıyor! Gördüğünüz gibi, Grove 8-Kanal I2C Çoklayıcı ve birkaç ek kod satırı ile yalnızca I2C adres çakışmalarını çözmekle kalmıyor, aynı zamanda aynı I2C adresine sahip birden fazla sensörü de kolayca kullanabiliyoruz!

Eğer sadece çoklayıcı özellikleri olmayan bir I2C hub arıyorsanız, Grove I2C Hub (6 Port) veya Grove I2C Hub 4 portlu versiyonu ihtiyaçlarınıza daha uygun olabilir.

Bir Arduino kartı mı arıyorsunuz? Kapsamlı bir inceleme ve karşılaştırma için Arduino Alım Rehberimizi kontrol edin! Alternatif olarak, daha fazla Grove modülü keşfetmek için Seeed Online Store‘u ziyaret edebilirsiniz.

İletişim protokolleri hakkında daha fazla bilgi edinmek istiyorsanız, aşağıdaki diğer rehberlerimizi okumayı unutmayın.

Leave a Reply

Your email address will not be published. Required fields are marked *