ds18S20 - 1 yerine 32767.0 C gösteriyor sorunu anlayamadım

Başlatan sürücü1047, 28 Kasım 2010, 00:02:04

sürücü1047

Arkadaşlar bu konuda yardımcı olurmusunuz?

şemayı yükleyemedim en kısa zamanda yüklemeye çalışacağım.


  

            'ds1820 sıcaklık 
     
     	Dim command As     Byte            ' Storage for command
		Dim i       As     Byte            ' Storage for loop counter
		Dim temp    As     Word            ' Storage for temperature
		
		Symbol DQ      =     PORTC.0         ' Alias DS1820 data pin
		Symbol DQ_DIR  =     TRISC.0       ' Alias DS1820 data direction pin


        Print At 1,5, "DERECE"      ' 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

        DelayMS 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
        Print At 15,10, Dec (temp >> 1), ".", Dec (temp.0 * 5), "  C"

        GoTo mainloop           ' Do it forever


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

        DelayUS 100             ' Wait > 60us
        If DQ = 1 Then
                Print At 15,10, "DS1820 not present"
                DelayMS 500
                GoTo mainloop   ' Try again
        EndIf
        DelayUS 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
        DelayUS 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)
        DelayUS 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
        DelayUS 60              ' Wait out rest of time slot
        Return



justice_for_all

Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

neural

DQ_DIR = 1 komutu ile ds1820 'nin bağlı olduğu pin sürekli giriş olarak yapılandırılmış. Portc.0 hattına ne yazarsanız yazın trisc.0 = 1 ise sürekli 1 ' de kalacaktır.

iyildirim

C olsa ilgili değişken unsigned (işaretsiz) tanımlanmış  diyeceğim.
ama bunu basic'de nasıl ifade ediliyor bilmiyorum.

Maxim

sensor ds18s20 mi yoksa ds1820 mi? arada ufak farklar olması lazım

neural

Okunan değer negatif ise değerin tersleyeni alınır.  1 eklenir.

sürücü1047

proteusta ds1820 yok oyüzden ds18S20 kullandım. Birde bu komutlar proton ide nin kütüphane komutları
ben onlrı sadece glcd ekrana göre ayarladım. Fakat( - ) dereceyi göstermedi.( + ) derecede gayet iyi çalışıyor.
Resim elemesini beceremediğim için şemayı koyamadım kusura bakmayın.

justice_for_all

Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

sürücü1047

şemayı ekledim similasyonda bu şekilde görünüyor.