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ı?
(https://i.ibb.co/9sShfBM/IIC-SHT31.png) (https://ibb.co/9sShfBM)
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
}
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!