I²C (Inter-Integrated Circuit) Haberleşme Protokolü

I²C (Inter-Integrated Circuit) Haberleşme Protokolü

I2C Protokolü ve Mikrodenetleyicilerle Kullanımı:

I2C Nedir?

I2C (Inter-Integrated Circuit), Philips Semiconductor (şu anda NXP Semiconductors) tarafından geliştirilen bir seri haberleşme protokolüdür. İki telli bir sistem kullanarak çoklu cihaz bağlantısına olanak tanır. Ana bileşenleri, bir Master (ana) ve bir veya birden fazla Slave (köle) cihazdır.

I2C Temel Özellikleri:

1. Veri Hattı (SDA): I2C üzerinde veri iletimi için kullanılan iki telli sistemdeki biridir.

2. Saat Hattı (SCL): I2C üzerindeki ikinci tel olan saat sinyalini taşır. Bu sinyal, verilerin senkronize bir şekilde iletilmesini sağlar.

3. Master-Slave İlişkisi: I2C protokolü, bir ana (Master) cihazın bir veya birden fazla köle (Slave) cihazı kontrol etmesine dayanır. Master, haberleşmeyi başlatır ve sonlandırır.

4. Start ve Stop Durumları: I2C iletişimi, başlamak için bir “Start” durumu ve bitirmek için bir “Stop” durumu ile başlar ve biter.

5. 7-Bitlik ve 10-Bitlik Adresleme: Her I2C cihazına benzersiz bir adres atanır. 7-bit veya 10-bit adresleme seçenekleri mevcuttur.

6. Veri İletimi: Veri, başlatma durumundan sonra adres ve ardından veri byte’leriyle gönderilir. Her byte, Slave tarafından bir onaylama (ACK) sinyali ile teyit edilir.

Mikrodenetleyicilerde I2C Kullanımı:

1. Kütüphane Kullanımı: Birçok mikrodenetleyici platformu, I2C protokolünü kolayca kullanmak için kütüphaneler sağlar.

2. I2C Başlatma:
I2C ile haberleşmeye başlamak için, mikrodenetleyici kodunda `Wire.begin()` komutu kullanılır.

3. Master ve Slave Modları:
Mikrodenetleyici, Master veya Slave olarak çalışabilir. Master, iletişimi kontrol eden ana cihazdır. Slave ise Master’ın komutlarına yanıt veren cihazdır.

4. Adresleme:
I2C iletişiminde her cihazın benzersiz bir adresi vardır. Adres, `Wire.beginTransmission()` ve `Wire.requestFrom()` gibi fonksiyonlarda belirtilir.

5. Veri İletimi:
Master, `Wire.write()` ile veri gönderir. Slave, gelen veriyi `Wire.onReceive()` veya `Wire.onRequest()` gibi kesme servis rutinleri ile alır.

6. I2C İletişim Sonlandırma:
İletişimi sonlandırmak için Master `Wire.endTransmission()` kullanır.

I2C protokolü, mikrodenetleyicilerde birçok uygulama için kullanılır. Sensörler, EEPROM (Electrically Erasable Programmable Read-Only Memory), ekranlar ve diğer periferik cihazlar gibi birçok entegre devre, I2C protokolünü kullanarak mikrodenetleyicilerle iletişim kurar. Bu, geniş bir uygulama yelpazesi sunan güçlü bir haberleşme protokolüdür.

Efendi (Master Cihaz)

#include <Wire.h>
void setup() {
  Wire.begin();
  Serial.begin(9600);
}
void loop() {
  ackomutugonder(0x01);
  ackomutugonder(0x02);
  delay(500);
  kapatkomutugonder(0x01);
  kapatkomutugonder(0x02);
  cevapal(0x01);
  cevapal(0x02);
  Serial.println();
  delay(500);
}
void cevapal(int cihazadresi) {
  Wire.requestFrom(cihazadresi, 7);
  char gelen;
  while (Wire.available()) {
    gelen = Wire.read();
    Serial.print(gelen);
  }
  Serial.println();
}
void ackomutugonder(int cihazadresi) {
  Wire.beginTransmission(cihazadresi);
  Wire.write("1");
  Wire.endTransmission();
}
void kapatkomutugonder(int cihazadresi) {
  Wire.beginTransmission(cihazadresi);
  Wire.write("0");
  Wire.endTransmission();
}

0x01 Adresindeki Slave/Köle Cihaz (Uno)

#include <Wire.h>
int LED = 13;
void setup() {
  Wire.begin(0x01);
  Wire.onRequest(cevapgonder);
  Wire.onReceive(alinanveri);
  pinMode(LED, OUTPUT);
}
void loop() {
 
}
void alinanveri(int veri) {
  char gelen;
  while (Wire.available()) {
    gelen = Wire.read();
  }
  if (gelen == '1')
    digitalWrite(LED, HIGH);
  else if (gelen == '0')
    digitalWrite(LED, LOW);
}
void cevapgonder() {
  Wire.write("UNO, OK");
}

0x02 Adresindeki Slave/Köle Cihaz (Mega 2560)

#include <Wire.h>
int LED = 13;
void setup() {
  Wire.begin(0x02);
  Wire.onRequest(cevapgonder);
  Wire.onReceive(alinanveri);
  pinMode(LED, OUTPUT);
}
void loop() {
  
}
void alinanveri(int veri) {
  char gelen;
  while (Wire.available()) {
    gelen = Wire.read();
  }
  if (gelen == '1')
    digitalWrite(LED, HIGH);
  else if (gelen == '0')
    digitalWrite(LED, LOW);
}
void cevapgonder() {
  Wire.write("MEGA,OK");
}

I2C Olarak Bağlanan Farklı Türdeki Cihazların Adreslerini Öğrenme

#include <Wire.h>
void setup() {
  Wire.begin();
  Serial.begin(9600);
}
void loop() {
  byte hata, adres;
  int cihaz;
  Serial.println("I2C Adresler Taraniyor...");
  cihaz = 0;
  for (adres = 1; adres < 127; adres++) {
    Wire.beginTransmission(adres);
    hata = Wire.endTransmission();
    if (hata == 0) {
      Serial.print("I2C Cihaz bulundu || Adres === 0x");
      if (adres < 16)
        Serial.print("0");
      Serial.print(adres, HEX);
      cihaz++;
      Serial.println();
    } else if (hata == 4) {
      Serial.print("Hata 0x");
      if (adres < 16)
        Serial.print("0");
      Serial.println(adres, HEX);
    }
  }
  if (cihaz == 0) {
    Serial.println("Cihaz Bulunamadı");
    Serial.println();
  } else {
    Serial.println("Cihaz Bulma Tamamlandi");
    Serial.println();
  }
  delay(10000);
}

I2C Protokolü ve Mikrodenetleyicilerle Kullanımı:

I2C Nedir?

I2C (Inter-Integrated Circuit), Philips Semiconductor (şu anda NXP Semiconductors) tarafından geliştirilen bir seri haberleşme protokolüdür. İki telli bir sistem kullanarak çoklu cihaz bağlantısına olanak tanır. Ana bileşenleri, bir Master (ana) ve bir veya birden fazla Slave (köle) cihazdır.

I2C Temel Özellikleri:

1. Veri Hattı (SDA): I2C üzerinde veri iletimi için kullanılan iki telli sistemdeki biridir.

2. Saat Hattı (SCL): I2C üzerindeki ikinci tel olan saat sinyalini taşır. Bu sinyal, verilerin senkronize bir şekilde iletilmesini sağlar.

3. Master-Slave İlişkisi: I2C protokolü, bir ana (Master) cihazın bir veya birden fazla köle (Slave) cihazı kontrol etmesine dayanır. Master, haberleşmeyi başlatır ve sonlandırır.

4. Start ve Stop Durumları: I2C iletişimi, başlamak için bir “Start” durumu ve bitirmek için bir “Stop” durumu ile başlar ve biter.

5. 7-Bitlik ve 10-Bitlik Adresleme: Her I2C cihazına benzersiz bir adres atanır. 7-bit veya 10-bit adresleme seçenekleri mevcuttur.

6. Veri İletimi: Veri, başlatma durumundan sonra adres ve ardından veri byte’leriyle gönderilir. Her byte, Slave tarafından bir onaylama (ACK) sinyali ile teyit edilir.

Mikrodenetleyicilerde I2C Kullanımı:

1. Kütüphane Kullanımı: Birçok mikrodenetleyici platformu, I2C protokolünü kolayca kullanmak için kütüphaneler sağlar.

2. I2C Başlatma:
I2C ile haberleşmeye başlamak için, mikrodenetleyici kodunda `Wire.begin()` komutu kullanılır.

3. Master ve Slave Modları:
Mikrodenetleyici, Master veya Slave olarak çalışabilir. Master, iletişimi kontrol eden ana cihazdır. Slave ise Master’ın komutlarına yanıt veren cihazdır.

4. Adresleme:
I2C iletişiminde her cihazın benzersiz bir adresi vardır. Adres, `Wire.beginTransmission()` ve `Wire.requestFrom()` gibi fonksiyonlarda belirtilir.

5. Veri İletimi:
Master, `Wire.write()` ile veri gönderir. Slave, gelen veriyi `Wire.onReceive()` veya `Wire.onRequest()` gibi kesme servis rutinleri ile alır.

6. I2C İletişim Sonlandırma:
İletişimi sonlandırmak için Master `Wire.endTransmission()` kullanır.

I2C protokolü, mikrodenetleyicilerde birçok uygulama için kullanılır. Sensörler, EEPROM (Electrically Erasable Programmable Read-Only Memory), ekranlar ve diğer periferik cihazlar gibi birçok entegre devre, I2C protokolünü kullanarak mikrodenetleyicilerle iletişim kurar. Bu, geniş bir uygulama yelpazesi sunan güçlü bir haberleşme protokolüdür.

Yorumlar kapalı.

nurullahozkan@outlook.com.tr