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

Başlatan ercan_wrc, 22 Mart 2011, 00:17:24

ercan_wrc

22 Mart 2011, 00:17:24 Son düzenlenme: 22 Mart 2011, 00:33:30 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

Kod Seç

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,$406996000'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_Pin1, [$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_Pin1, [$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) >> ' 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




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.