Bu Şema ve Koddaki Sıkıntı Nedir? (DS18B20)

Başlatan ercan_wrc, 21 Mart 2011, 21:17:24

ercan_wrc

Arkadaşlar devreme 3 adet DS18B20 sensör ekliyorum fakat bir türlü sensör ölçümü yapamadım.
şema ve kodu gönderiyorum sorunu anlayan olur ve yardımcı olursa sevirim..Saygılar

Device 16F877A
XTAL 4 'the internal oscilator is 8mhz

ADIN_RES = 10'10 bit resolution
Declare ADIN_TAD FRC'RC OSC chosen 
Declare ADIN_STIME 50'allow 50us time

Declare LCD_INTERFACE 4
Declare LCD_DTPIN PORTB.4
Declare LCD_ENPIN PORTB.3
'DECLARE LCD_RWPIN PORTB.2
Declare LCD_RSPIN PORTB.2
Declare LCD_LINES 4

TRISA=255
PORTA=0
TRISC=255
PORTC=0
TRISD=0
PORTD=255
TRISE=255
PORTE=0

'***********Özel Karakter Tanımlamaları
Print $FE,$40, 6, 9, 9, 6, 0, 0, 0, 0 'Derece İşareti
Print $FE,1

'***********Sensör Tanımlamaları***********
Symbol DQ = PORTE.0
Dim Temp As Word    
Dim CA As Byte      
Dim CPerD As Byte    
Dim ISARET As Byte
Dim OKU As Byte
Symbol AR = "+"
Symbol EK = "-"
Symbol SIF = " "

Dim sicaklik    As Word
Dim Comm_Pin    As	PORTE.0     ' One-wire Data-Pin "DQ" on PortC.0
Dim Busy        As Bit         ' Busy Status-Bit
Dim R_Temp      As	Word        ' RAW Temperature readings
Dim TempC       As Word        ' Temp in deg C
Dim Cold_Bit    As R_Temp.11' Sign-Bit for +/- Temp. 1 = Below 0 deg C
Dim Real_Cold   As 1           ' Define Real_Cold = 1
Dim Deg         As 223         ' Data to display Deg ° symbol
Dim Sign        As Byte        ' +/- sign for temp display
Dim Dummy       As Byte    




basla:

  OWrite Comm_Pin, 1, [$CC, $44]' Skip ROM search & do temp conversion
Bekle:
  ORead Comm_Pin, 4, [Busy]    ' Read busy-bit
  If Busy = 0 Then 
    DelayMS 10
    GoTo Bekle  
  EndIf
  OWrite   Comm_Pin, 1, [$CC, $BE]' Rom Okuma aşamasını pas geç
  ORead    Comm_Pin, 2, [R_Temp.LowByte, R_Temp.HighByte]
  GoSub   Convert_Temp
  Print At 1,1,#sicaklik," ",Deg,"C"
  DelayMS 50
GoTo basla

Convert_Temp:                 ' +32.0 to +257 F 
  If Cold_Bit = Real_Cold Then negatif ' If Cold_Bit = 1, it's below "0" deg C
  Sign  = "+"
  Dummy = 625 * R_Temp      ' Multiply to load internal registers with 32-bit value
  TempC = Div32 10          ' Use Div32 value to calculate precise deg C
  Dummy = 1125 * R_Temp
  TempC  = (R_Temp & $0FF0) >> 4 ' Mask middle 8-bits, shift into lower byte
  sicaklik = TempC
Return

negatif:                      ' Display full range -C to -F conversion
  Sign   = "-"            ' Display - symbol for negative temp
  Dummy  = 640 * ~R_Temp+1' Multiply to load internal registers with 32-bit value
  TempC  = Div32 10000
  sicaklik = 256-TempC
Return


[IMG]http://img4.imageshack.us/img4/2760/balksz3ax.jpg[/img]

omereliusuk

ds18b20'nin dq pinini kendi vcc si ile dirençle birleştir. 18b20'yi yapan böyle yapmış. aksi halde çalışmıyor. direkt kendi +5v ile dirençle birleştir çalışması gerekir. tabi yazdığın kodlarda hata yoksa.
ben de senin gibi ayrı yaptım. baglantıyı başka yerden aldım çalışmadı. ama kendisinden aldığın zaman çalışıyor.