DS18B20 ile haberleşme konusunda kendi kodlarımı yadım, Ancak ara sıra 2 derecelik farklılıklarla okuyor.
Örneğin sıcaklık 21.2 derece iken birden 23.2 okuyup, bir sonraki okumada tekrar doğru olan 21.2 yi okuyor. Bu hatayı saatte 2-3 kezden fazla yapmadığı için kodda hata olmadığını, sensörün bozuk olabileceğini düşünmüştüm ancak taktığım yeni sensörde aynı hatayı yapınca datasını biraz daha kurcalamayı düşündüm.
Datasında Harici beslemeden bahsediyor (İngilizcemin hiç iyi olmadığını belirteyim), eğer kartın beslemesinden faydalanılacaksa 1 ve 3 nolu pinlerin Şaseye bağlanmasından bahsediyor ancak resimdeki elemanın ne olduğunu anlayamadım.
void SicaklikOku(void) { unsigned char sayac, bitlertam, bitleronda; unsigned int sicaklik, bitler; DS18B20_PinYon = 0; Tekrar: if ( DS18B20_init()==1 ) goto Tekrar; DS18B20_Yaz(0xCC); DS18B20_Yaz(0x44); DelayMs(250); DelayMs(250); DelayMs(250); if ( DS18B20_init()==1 ) goto Tekrar; DS18B20_Yaz(0xCC); DS18B20_Yaz(0xBE); sicaklik=DS18B20_Oku(); bitler=1; bitlertam=1; bitleronda=1; OrtamSicaklik=0; OrtamSicaklikOnda=0; for (sayac=0;sayac<12;sayac++) { if (sayac<4) { if (sicaklik&bitler) OrtamSicaklikOnda=OrtamSicaklikOnda|bitleronda; bitleronda=bitleronda<<1; } else { if (sicaklik&bitler) OrtamSicaklik=OrtamSicaklik|bitlertam; bitlertam=bitlertam<<1; } bitler=bitler<<1; } OrtamSicaklikOnda = (OrtamSicaklikOnda * 625) / 1000; }
Datasındaki şema :
Bu bir mosfet transistör. Normal beslemenin yanında sadece data hattıyla yapılan bir besleme seçeneği de var. Pull-up direnci üstünden içerde şarj olan bir kondansatör ve buna dayalı bir besleme sistemi var. Ama bazı durumlarda gereken yüksek akım yüzünden gerilim çöküyor. Durumlar şunlar: Analog-dijital dönüştürme işlemi ve copy-to-scratchpad. Bu durumlarda kılavuzda belirtilene göre komut uygulandıktan en geç 10 mikro saniye sonra Vpu gerilimini işlem süresince direkt uygulamak gerekiyor. Bunlarla uğraşmaya gerek yok ikinci devreyi kurarsın normal besleme ile kullanırsın.
Okuma hatası için ben olsaydım hızı düşürürdüm veya hattı (sallıyorum) 50-100 ohmluk dirençlerle sonlandırırdım veya pull-up direncinin değerini değiştirirdim veya hattan sıfıra 20 pF kondansatör atardım veya ekranlı kablo kullanırdım, birini birkaçını veya en kötü ihtimalle hepsini birlikte denerdim
quote:
Orjinalden alıntı: Liu Kang
Bu bir mosfet transistör. Normal beslemenin yanında sadece data hattıyla yapılan bir besleme seçeneği de var. Pull-up direnci üstünden içerde şarj olan bir kondansatör ve buna dayalı bir besleme sistemi var. Ama bazı durumlarda gereken yüksek akım yüzünden gerilim çöküyor. Durumlar şunlar: Analog-dijital dönüştürme işlemi ve copy-to-scratchpad. Bu durumlarda kılavuzda belirtilene göre komut uygulandıktan en geç 10 mikro saniye sonra Vpu gerilimini işlem süresince direkt uygulamak gerekiyor. Bunlarla uğraşmaya gerek yok ikinci devreyi kurarsın normal besleme ile kullanırsın.
Okuma hatası için ben olsaydım hızı düşürürdüm veya hattı (sallıyorum) 50-100 ohmluk dirençlerle sonlandırırdım veya pull-up direncinin değerini değiştirirdim veya hattan sıfıra 20 pF kondansatör atardım veya ekranlı kablo kullanırdım, birini birkaçını veya en kötü ihtimalle hepsini birlikte denerdim
Mesajımı yazdıktan sonra 4K7 yerine Pullup direncini 10K ile değiştirdim. Şimdilik bir sorun yok. Ayrıca sensör plaket üzerinde. Dolayısı ile ekranlı kablo kullanma ihtimalim yok. Ancak sonlandırma direnci ve 20pf kapasite teklifleriniz için çok teşekkür ederim.