XC8 ile SHT31 okuma sorunu ( yazılımsal IIC)

Başlatan elektroacemi, 02 Aralık 2022, 18:26:19

elektroacemi

Merhaba Arkadaşlar.

XC8 ile yazılımsal IIC ile SHT31 okumayı bir türlü beceremedim. Proteus üzerinde SHT31 olmadığı için aynı yazılım ile (gerekli adres ve komut düzenlemesi ile) SHT21 ile denedim okuma yaptı. Gerçek devrede SHT31 okumaya çalıştığımda IIC start komutundan sonra SHT31 SDA hattını lojik1 e çekmeye zorluyor. Osiloskop görüntüsü ektedir. Sorun hakkında fikri olan var mı?



serkan

#1
Bu örneği inceleyin ben okuma yapmadan kullanıyorum
Okumada SDA giriş yapılır.

void i2c_yaz( unsigned char byte ){    
  unsigned char temp=byte;char b;
  char j;
    for(j = 0; j<8; ++j ){
   __delay_us(1);
    if( (temp&0x80) == 0x80 )
    SDA=1;  //port A1 de
    else
    SDA=0;  //port A1 de
    temp <<=1;
    __delay_us(1);
    SCL = 1;
    __delay_us(1);
    SCL = 0;
    } 
  TRISA1 = 1;//SDA giris
  __delay_us(1);
  SCL = 1;    ////port A0 de
  __delay_us(1);
  SCL = 0;
  __delay_us(1);
  SCL = 1;
  __delay_us(1);
  SCL = 0;
  b=SDA; //if (b==1)  i2c_oku();Burada okuma yapilip bitince SDA cikis yapiliyor
  TRISA1 = 0;//SDA  cıkıs
}

JOKERAS

I2C Slave cihazların Data hatları Yüksek empedanstır.
Data hattı Low'a düşüyor olsa bu anlaşılabilir açıklanabilir bir durum.
Dolayısı ile Data hatlarını High yapabilecek bir durumları yok.
Her şartta Data hattını High yapıyorsa Sensör bozulmuş olabilir.

Data-Clock hatlarını High'da tutacak olan Master bile değil,tek yapı Pull-Up dirençleri.

Proteus üzerinde denemeler çok yanıltıcı olabiliyor!