I2C bus hattının (DS1307) kopuk olduğunu nasıl anlarım

Başlatan OG, 17 Temmuz 2018, 08:31:44

OG

I2CIn komutu ile DS1307 okurken,
RTC'nin bus hattı kopuk olsa bile okuma komutundan dönüş oluyor.

1 saniyeyi geçgin bir aralıkta okuyup fark varmı diye kontrol etmek mümkün.
Ancak bu usül gereksiz bir zaman kaybına sebep oluyor.
"Dönen saniye bilgilerinde değişiklik olmuşmu" gibi kontroller dışında
DS1307 ye bağlantının kopuk olma durumunu anlama imkanı varmıdır?
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Tagli

Hat kopuksa ACK gelmemesi lazım. Proton'u hiç bilmiyorum ama muhtemelen ilgili register'dan okunarak kontrol edilebilir. Örneğin PIC16F886'da SSPCON2'nin ACKSTAT biti bu işi yapıyor. Eğer 1 olarak kalmışsa ACK gelmemiş demektir. Hat kopuksa daha ilk adresleme sırasında bu hatayı verecektir. Ama elbette, sağlıklı bir hatta var olmayan bir cihaza erişmeye çalışmak da aynı sonucu verir. Yani hat mı kopuk, yoksa cihazda mı sorun var kesin olarak anlaşılamaz sanırım.
Gökçe Tağlıoğlu

ÜC

Data pini  PORTA.2 de

TRISA.2=0 
PORTA.2=0     
DelayUS 500         
TRISA.2=1       
DelayUS 100     

Eğer sensör çalışıyorsa data pinini 0 yapar

OG

LOW yapmasını ne kadar süre takip etsek yeterlidir, 1 bit süresi yeterlimidir?
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ÜC

Pini giriş yaptıktan sonra 100us bekleyip okuma yapıyorum bu süreyi deneme ile bulmuştum , eğer ne kadar süre lowda tutuyor diye soruyorsanız ben okuyup hemen çıktığım için hiç ihtiyac duymadım süreyi bilmiyorum.

OptimusPrime

#5
Pini cikis yap, aşağı cek, sonra birak oda aşşağı çeksin, cekerse hat saglam, cekmezse vay basimiza gelenler. Pekde hos bir çözüm degil. Bugun calisir yarin calismaz nem artar sicaklik azalir ruzgar ters eser basina bela olur. En temizi i2c modulunun hata bitlerini kontrol etmek @Tagli nin de önerdiği gibi. Tek satırda hem de hızlı bir sekilde bu isi çözer.
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

Kabil ATICI

Burada okuma esnasında benim bildiğim, pic ack verir. (Tek istisnası cip id kodundan sonra gelen ACK'dır. Bunu DS1307 verir.)Yazma esnasında da DS1307.
Tabi sıralı okuma yapılacaksa, ilk olarak 0x00 adresi yazılıp sonra okuma yapılacağından id adresinden sonraki gelen ACK kontrolu  yapılabilir (bu ds1307'den gelir).
ambar7

Tagli

Doğru, okuma sırasında gelen byte'lar için ACK master cihaz (PIC) tarafından üretilir. Ama ilk adreslemeye, yani master'dan gönderilen slave adresine (7 bit adres + R/W biti) slave cihaz ACK gönderir. ACK yoksa, o adrese sahip bir slave cihaz yok/bozuk veya hat kopuk sonucuna varılabilir.
Gökçe Tağlıoğlu