Toplam 4 adet sonuctan sayfa basi 1 ile 4 arasi kadar sonuc gösteriliyor

Konu: MikroC üzerinde I2C protokolü hakkında

  1. #1
    Taze Üye

    Durum
    Çevrimdışı
    Üyelik tarihi
    29 Temmuz 2021
    Mesajlar
    3

    MikroC üzerinde I2C protokolü hakkında

    Merhaba arkadaşlar. Doğru yerde sorduğumdan emin olmamakla birlikte bir şey danışmak istiyorum.

    Ben I2C haberleşmesi hakkında çalışıyordum MikroC üzerinde (Aslında direk MikroC ile alakalı değil). I2C'de slave cihazların adressleri var biliyorsunuz. Buraya kadar tamam. Bazı adresler binari olarak 1 ile başlıyoR (MSB) (mesela ds1307'nin adresi 0xD0 ( 11010000)), bazıları ise 0 ile başlıyor(MSB) ( mesela MLX90614 sıcaklık sensörünün adresi 0x5A (01011010)) .

    Şunu farkettim örnek kodları incelerken kodun adress yazdırma kısmında adress eğer 1 ile başlıyorsa kaydırma (<<) olmuyor, eğer 0 ile başlıyorsa 1 bit sola kaydırılıor (mesela 0x5A<<1 gibi)

    Daha iyi anlatmak açısından;

    I2C2_Wr( 0x5A << 1 ); ---Bu cihaz için kaydırma yapılmış.
    I2C2_Wr( 0xD0 ); ---Bu cihaz için kaydırma yapılmamış.

    Bunlar gibi bir kaç örnek daha gördüm, bu şekil yazılmış kodlar. Örneklerde bunu çıkardım. Fakat bunun teorik açıklaması ne bilen var mı ?
    Konu adı: MikroC üzerinde I2C protokolü hakkında
    Yazan: Derebeyi

  2. #2
    ElemaN - ait Kullanıcı Resmi (Avatar)
    Site Yöneticisi

    Durum
    Çevrimdışı
    Üyelik tarihi
    26 Mart 2008
    Nereden
    İstanbul
    Mesajlar
    5,812
    7. bit ile ilgili değil. 0. bit ile ilgili bu durum.

    0. bit (1) ise okuma,
    0. bit (0) ise yazma.
    Konu adı:
    Yazan: ElemaN

  3. #3
    Taze Üye

    Durum
    Çevrimdışı
    Üyelik tarihi
    29 Temmuz 2021
    Mesajlar
    3
    galiba eksik anlattım. Örnek üzerinden tekrar anlatmaya çalışayım.

    şimdi 0xD0 örneğinde adress yazma komutunda direk I2C2_Wr( 0xD0 ); yazıyoruz. Sonra okuma yapacaksak I2C2_Wr( 0xD1 ); yazıyoruz. (11010000 - 7. biti 1)

    Fakat adresi 0x5A olan sensör için I2C2_Wr( 0x5A << 1 ); komutuyla adress yazıyoruz.
    (01011010 7. biti 0)

    Şimdi bu ikisi arasındaki farkın mantığı ne tam olarak. Birinin 7. biti 1 diğerinin ise 0 .

    Farklı örneklerden gördüğüm kadarıyla 7. biti 1 olan cihazlar için kodda adress yazarken kaydırma yapılmamış. Fakat 7. biti 0 olan cihazlarda kaydırma yapılarak kodda adres yazılmış.


    0x5A (01011010) - Bir bit sola kaydırdıgımız zaman 10110100 elde ediliyor. yani bu cihaz için adres yazma komutunda I2C2_Wr(01011010); yerine I2C2_Wr(10110100); yazıyoruz. Bu sıcaklık sensörünü denedim bu şekilde çalışıyor. Bit kaydırma yapmadığım zaman ise haberleşme yapmıyor. Sensör MLX90614 bu arada


    kodda I2C2_Wr( 0x5A << 1 ); şeklinde yazmadığım zaman çalışmıyor yani. Bunun sebebini merak etmiştim.
    Konu adı:
    Yazan: Derebeyi

  4. #4
    ElemaN - ait Kullanıcı Resmi (Avatar)
    Site Yöneticisi

    Durum
    Çevrimdışı
    Üyelik tarihi
    26 Mart 2008
    Nereden
    İstanbul
    Mesajlar
    5,812
    Kimi üretici 7bit adres veriyor kimi 8 bit olarak veriyor. Datasheete bakmak lazım ya da 2 dk deneme çekip bulacaksın.
    Konu adı:
    Yazan: ElemaN

Yetkileriniz

  • Konu Acma Yetkiniz Yok
  • Cevap Yazma Yetkiniz Yok
  • Eklenti Yükleme Yetkiniz Yok
  • Mesajınızı Değiştirme Yetkiniz Yok
  •