Ds1820 sıcaklık sensoru kullananlar

Başlatan teslaa, 16 Şubat 2006, 14:34:25

teslaa

ds1820 ile sıcaklıgı ölçüp lcd ye yazdırıyorum.    ds1820 için internetteki tüm buldugum semalarda  ds1820 den  pic e giden uc arasına 4.7K baglamamı söylüyor.  semayı bu adreste upload ettim
http://img46.imageshack.us/my.php?image=021620061419083qa.jpg

fakat burada 4.7K  kullanınca sıcaklık hava sıcalıgına gore 6-7 derece yuksek cıkıyor. fakat burada 4.7K  yerine 330ohm takınca sıcaklık gercek hava sıcaklıgına daha yakın gorunuyor, ve 4.7K takılı oluncaki degere gore 6-7 asagı iniyor. Gercege en yakın degeri elde edebilmekl için buraya takmam gereken direnc ne olması konusundaki fikirlerini paylaşırsanız sevinirim

mustafacan

direncin toleransını,kullandığın pcb ise yolların direncini ve eğer varsa kablonun dirençlerini hesap etmişsindir umarım
Keşfedilecek çok teknoloji var. Boş Vaktim Yok!

teslaa

breadboard kullanıyorum, ds1820 ve 4.7K boarda baglı iken ds1820 nin orta bacagı ile +5 arasındaki direnc 4.8K olarak olcuyorum. Buradaiki 0.1 fazlalık direncle elde ettiggim deger 6-7 derece hatalı fakat 4.7K yı cıkarıp 330ohm gibi kucuk bir direnc baglı iken elde ettigim degerin gercege daha yakın olmasını olmasını anlayamadım

sezgin05

DS1820 OnWire bir ısı sensörüdür.Yani Data pininden voltaj değil Pulse şeklinde sinyal alırsınız.Dolayısıyla buradaki PullUp direnci çok fazla bir etki yapmıyor.Sadece bu pin sistem tarafından kullanılmadığında +5Volt görmesini sağlıyor.Isıdeğeri gönderilceği zaman ise dirençten gelen 5 volt GND ye çekilmek suretiyle Kare dalga oluşturuluyor.PullUp direnci belli aralıklarda değiştirilebilir.Örneğin 4K7 Olmazda 10 K.Yada 3K3 yapılabilir.Ama 330 ohm yaptığınızda entegre bu bacaktaki 5 voltu GND ye çekemeceyeceği için yanlış sonuçlar verir....

ftsahin

Yazdığın kodda hata olabilir. Bununla ilgili Pbpro ve Proton'da yazılmış örnekler var. Değişik örnekleri denedin mi?

teslaa

ftsahin; farklı ornekler denedim ama sorun devam etmişti
sezgin05; 330ohm kullanmamın yanlış sonuclar doguracagını ayrıntılı olarak acıkladıgın için teşekkürler. 4.7K yerine 3.3K koydum degerler daha dogru ve gercege yakın.

sezgin05

Benced PullUp direnç değeri ile değilde sensöeün yeri ile oyna.Örneğin  bulunduğu yer 7805 e veya ısı yayan bir devre elemanına yakınsa yerini değiştir.Yok eğer kablo ile devrenin dışına aldıysan ve çok uzun kablo kullanıyorsan blendajlı kabloyu dene (Örneğin stereo kulaklık kablosu)...

oziant

aynı problem benimde başıma gelmişti
direnc degerini 1 k altına düşürme
kullandıgın kablo mesafesi ile ilgili bir sorun

hassasiyeti cok güzel sensörün ben memnunum
kolay gelsin
MPLAB 5.62 ASM PROPİC 2

stlg

Sevgili teslaa

Arkadasım sezgin05 arkadasımızın soylediklerine aynen katılıyorum bu tur
pullup direnclerini ben pıc girişlerinde 4k7 yada 10k kullanıyorum yani bu algılayıcıda bu direnc ısıyı belirleyici bir eleman değil ya yazılımla ilgili bir sorun var yada tamamen ısı kaynaklarına yakın monte edilmiş blendajlı bir kablo ile fazla uzaklastırmadan kutunun dısına bu elemanı bosluga sarkıtman kolay gelsin

  ALLAHA EMANET OLUNUZ
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

ise

ds1820 nin içindeki pulldown mosfet 100 ohmdur ve akım değeri max 1.5 miliamper olarak belirtiliyor. ideal direnç 4k7 olarak belirlenmiş. ds1820 pdf sinde parasite power bölümünü dikkatli okumanızı tavsiye ederim. ısı sorununuz sanırım yazılımdan ileri geliyor 220 ohm kadar indirdim ısıda bir değişiklik görmedim.. programını detaylı olarak incelemelisin... iyi çalışmalar

teslaa

arkadaslar kullandıgım kodlar PBP nun example klasoru içindeki temp.bas dır. Derledigim ve pic e yukledigim haldeki kodları gonderiyorum. (Cogu yerde ds1820 den gelen uc C portunun 0. ucuna baglanıyor. Ben portA 2. uc kullandım bundan dolayı bir sorun olabilirmi)


Alıntı Yap'------------------------------------------------------------------------------
@ DEVICE pic16F628A                      'işlemci 16F628A                                
@ DEVICE pic16F628A, WDT_ON              'Watch Dog Timer açık
@ DEVICE pic16F628A, PWRT_ON             'Power on Timer açık
@ DEVICE pic16F628A, PROTECT_OFF         'Kod Koruma kapalı
@ DEVICE pic16F628A, MCLR_OFF             'MCLR pini kullanılmıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT
'@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'XT_OSC - HS_OSC -
'------------------------------------------------------------------------------
CMCON=7    '16F628 de komparatör pinleri iptal hepsi giriş çıkış

Define  LCD_DREG        PORTB
Define  LCD_DBIT        4
Define  LCD_RSREG       PORTB
Define  LCD_RSBIT       3
Define  LCD_EREG        PORTB
Define  LCD_EBIT        2


trisb=0
trisa=%00000100


' Allocate variables
command var     byte            ' Storage for command
i       var     byte            ' Storage for loop counter
temp    var     word            ' Storage for temperature
DQ      var     PORTA.2         ' Alias DS1820 data pin
DQ_DIR  var     TRISA.2         ' Alias DS1820 data direction pin


       CMCON=7    '16F628 de komparatör pinleri iptal hepsi giriş çıkış


       Pause 100               ' Wait for LCD to start

       Lcdout $fe, 1, "Temp in degrees C"' Display sign-on message


' Mainloop to read the temperature and display on LCD
mainloop:
       Gosub init1820          ' Init the DS1820

       command = $cc           ' Issue Skip ROM command
       Gosub write1820

       command = $44           ' Start temperature conversion
       Gosub write1820

       Pause 2000      ' Wait 2 seconds for conversion to complete

       Gosub init1820          ' Do another init

       command = $cc           ' Issue Skip ROM command
       Gosub write1820

       command = $be           ' Read the temperature
       Gosub write1820
       Gosub read1820

      ' Display the decimal temperature
       Lcdout $fe, 1, dec (temp >> 1),".",dec(temp.0 * 5)," degrees C"

       Goto mainloop           ' Do it forever


' Initialize DS1820 and check for presence
init1820:
       Low DQ                  ' Set the data pin low to init
       Pauseus 500             ' Wait > 480us
       DQ_DIR = 1       ' Release data pin (set to input for high)

       Pauseus 100             ' Wait > 60us
       If DQ = 1 Then
               Lcdout $fe, 1, "DS1820 not present"
               Pause 500
               Goto mainloop   ' Try again
       Endif
       Pauseus 400             ' Wait for end of presence pulse
       Return


' Write "command" byte to the DS1820
write1820:
       For i = 1 to 8          ' 8 bits to a byte
               If command.0 = 0 Then
                       Gosub write0    ' Write a 0 bit
               Else
                       Gosub write1    ' Write a 1 bit
               Endif
               command = command >> 1  ' Shift to next bit
       Next i
       Return

' Write a 0 bit to the DS1820
write0:
       Low DQ
       Pauseus 60              ' Low for > 60us for 0
       DQ_DIR = 1         ' Release data pin (set to input for high)
       Return

' Write a 1 bit to the DS1820
write1:
       Low DQ                  ' Low for < 15us for 1
@       nop                     ' Delay 1us at 4MHz
       DQ_DIR = 1        ' Release data pin (set to input for high)
       Pauseus 60             ' Use up rest of time slot
       Return


' Read temperature from the DS1820
read1820:
       For i = 1 to 16         ' 16 bits to a word
               temp = temp >> 1        ' Shift down bits
               Gosub readbit   ' Get the bit to the top of temp
       Next i
       Return

' Read a bit from the DS1820
readbit:
       temp.15 = 1             ' Preset read bit to 1
       Low DQ                  ' Start the time slot
@       nop                     ' Delay 1us at 4MHz
       DQ_DIR = 1        ' Release data pin (set to input for high)
       If DQ = 0 Then
               temp.15 = 0     ' Set bit to 0
       Endif
       Pauseus 60              ' Wait out rest of time slot
       Return

       End

baba

ısı duyağın (sensörün) 18B20 olmasın sakın...
ÖĞRENDİKÇE    CAHİLLİĞİM       ARTIYOR.