Site icon Ercan Koçlar

I2C İletişim Protokolü ve MikroC Kütüphanesi

I2C_kapak

I2C_kapak

This post is also available in: English




1- I2C Nedir ?

Olumlu Yanları  Olumsuz Yanları
Esnektir, sistem içerisinde bir çok slave ve master/slave parça ekeleyerek istediğiniz gibi geliştirebilirsiniz.  Parça adresleri üretilirken tanımlandıkları için adres çakışması yaşanabilir
Adrese dayalı seçim yapar , yani fazladan bir CS ( chip select) pinine ihtiyacınız yoktur.  Diğer paralel iletişim sistemlerine göre hızları sınırlıdır
Bağlantı sadedir, birden fazla parçada kullansanız sadece 2 hat üzerinden bağlantı kurulur  Bazı durumlarda çok fazla pull-up direnci koymak PCB lerde alan sıkıntısına yol açabilir
Hata tespit sistemi olan ACK ve NACK bulunur. Böylece yapılan işlemin doğru olup olmadığı anlaşılır.(ileride anlatılacak)
Hız gözetmeksizin bu protokole sahip tüm parçalar ile çalışır

2- I2C Protokolünün Amacı

3- I2C Protokolü İçin Gerekli Yapının Oluşturulması

I2C protokolünün şematik olarak çalışma sistemi

4- I2C Protokolü Nasıl Çalışır ?

4A- I2C “START”  İletişim Başlangıç İşareti

I2C Protokolü START işaretinin gönderilmesi

4B- I2C Adres ve İşlem İşareti

I2C Protokolünde ADRES 7 bittir.  8.bit ise yazma (0) yada okuma (1) yapılacağını bildirir.

4C – I2C “DATA”  Veri Transferi

I2C Protokolünde Veriler 8 bit olarak gönderilir ardından gelen 9. bit ise ACK/NACK verisini içerir.

4D- I2C “STOP” İletişim Durdurma İşareti

I2C Protokolü STOP işaretinin gönderilmesi

4E- I2C Onay İşareti (ACK – NACK)

I2C Protokolünde bütün bir iletişim
I2C Protokolünün osiloskopta görüntüsü

I2C Protokolü Sonuç


I2C MikroC Kütüphanesi

1- I2C Fonksiyonları

 

 I2C_ILETISIM_BASLAT Fonksiyonu

Fonksiyon : void I2C_ILETISIM_BASLAT()

Amacı : I2C iletişimini başlatır aynı zamanda restart yerinede kullanılır

Parametreler : Bulunmuyor

Kullanım Şekli :

I2C_ILETISIM_BASLAT();//I2C iletişimini başlatır

Geri Bildirim : Void tipinde olduğundan geriye herhangi bir değer döndürmez

 

– I2C_ILETISIM_DURDUR Fonksiyonu

Fonksiyon : void I2C_ILETISIM_DURDUR()

Amacı : İletişimi sonlandırır

Parametre : Bulunmuyor

Kullanım Şekli :

void I2C_ILETISIM_DURDUR()//iletişimi her durumda sonlandırır

Geri Bildirim : Void tipinden olduğundan geriye herhangi bir değer döndürmez

 

– I2C_VERI_YAZ Fonksiyonu

Fonksiyon : unsigned char I2C_VERI_YAZ(unsigned char veri)

Amacı : Bağlantı kurulan parçaya 8bit veri gönderir

Parametre :

Kullanım Şekli :

I2C_VERI_YAZ(0b01010101)//veri yazma ve iletişimdeki slave cihazın register adresleri bu fonksiyon ile yollanır

Geri Bildirim :

 

– I2C_VERI_OKU Fonksiyonu

Fonksiyon : unsigned char I2C_VERI_OKU(unsigned char sonlandir)

Amacı : Bağlantı kurulan parçadan 8 bit veri okur

Parametre :

Kullanım Şekli:

I2C_VERI_OKU(1);// bir kez okuma yapılır ve okuma işlemi sonlandırılır

Geri Bildirim:

 

– I2C_ADRES_GONDER Fonksiyonu

Fonksiyon : unsigned char I2C_ADRES_GONDER(unsigned char adres, unsigned char islem)

Amacı : İletişim kurulacak parçanın adresini gönderim bağlantıyı sağlar, ayrıca yapılacak işlemin yazma yada okuma olup olmadığını belirler

Parametre:

Kullanım Şekli:

I2C_ADRES_GONDER(0b01101000,0);// 7 bit adres gönderildi ve yazma yapılacağı belirtildi
I2C_ADRES_GONDER(0b01101000,1);// 7 bit adres gönderildi ve okuma yapılacağı belirtildi

Geri Bildirim :

 

2- Fonksiyonların Uygulanması

 

2A- Pin Tanımlamasının Yapılması

//I2C Pin Tanımlaması
 sbit I2C_SDA at RA5_bit;
 sbit I2C_SCL at RE0_bit;
 
 sbit I2C_SDA_VERI at LATA5_bit;//27.01.2019 güncellemesi ile eklendi
 sbit I2C_SDA_Direction at TRISA5_bit;
 sbit I2C_SCL_Direction at TRISE0_bit;

 

2B- İletişim Hızının Belirlenmesi

#define I2C_ILETISIM_HIZI Delay_us(10);// iletişim hız ayarlaması

 

2C- I2C Örnek Çalışma

void  main()
{
    unsigned char veri[8];//okunan verilerin yazılması için oluşturulan dizi
    unsigned char txt[5];//okunan değeri GLCD de yazdırmak için çevrim işlemleri için oluşturuldu
    unsigned i =0;//onay kontrol koşulu için eklendi
    ADCON1=13;//PIC in A/D port ayarı
    CMCON=7;//comparatorler kapatıldı

    
    SAP1024_INIT (240,128,6);// sonuçları GLCD de görmek için eklendi


    I2C_ILETISIM_BASLAT();//iletişim başladı
    do{i=I2C_ADRES_GONDER(0b01101000,0);}while(i==0);//adres gönderilir ve onay gelip gelmediği denetlenir
    I2C_VERI_YAZ(0b00000000);//register seçiliyor//ds1307 registeri seçilir
    I2C_VERI_YAZ(0b10000000);//yazma işlemi yapılır
    I2C_VERI_YAZ(0b00000000);//yazma işlemi yapılır
    I2C_VERI_YAZ(0b00000000);//yazma işlemi yapılır
    I2C_VERI_YAZ(0b00000000);//yazma işlemi yapılır
    I2C_VERI_YAZ(0b00000000);//yazma işlemi yapılır
    I2C_VERI_YAZ(0b00000000);//yazma işlemi yapılır
    I2C_VERI_YAZ(0b00000000);//yazma işlemi yapılır
    I2C_ILETISIM_DURDUR();//iletişim durdurulur
    
    //iletişim tekrar başlatılır ve ds1307 aktif hale getirilir
    I2C_ILETISIM_BASLAT();
    I2C_ADRES_GONDER(0b01101000,0);
    I2C_VERI_YAZ(0b00000000);//register seçiliyor
    I2C_VERI_YAZ(0b00000000);
    I2C_ILETISIM_DURDUR();


  // Bu bölümde ds1307 den sürekli saniye verisi ham olarak okunur ve GLCD de yazdırılır
  while(1)
  
  {
    I2C_ILETISIM_BASLAT();
    I2C_ADRES_GONDER(0b01101000,0);
    I2C_VERI_YAZ(0b00000000);//register seçiliyor
    I2C_ILETISIM_DURDUR();
    
    I2C_ILETISIM_BASLAT();
    I2C_ADRES_GONDER(0b01101000,1);
    veri[0]=I2C_VERI_OKU(1);
    I2C_ILETISIM_DURDUR();
    
    ShortToStr(veri[0],txt);
    SAP1024_YAZI_YAZMA(1,1,txt);
    delay_ms(1000);
  }

}

 

Sonuç


Kütüphane Dosyaları

 


Yararlanılan Belgeler


 

Exit mobile version