-
        

Ergebnis 1 bis 3 von 3

Thema: DS18S20 -> 850 Grad Celsius ???

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    36
    Beiträge
    318

    DS18S20 -> 850 Grad Celsius ???

    Anzeige

    Hallo,

    habe einen DS18S20 an Portb.0 meines mega32 hängen. Folgendes Programm gibt mir als Temperatur immer 850 aus:

    Code:
    '--- Controller ---
    $regfile = "m32def.dat"
    $crystal = 16000000
    $baud = 4800
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    
    '--- Grafikroutine ---
    $lib "glcdKS108.lib"
    
    '--- DS18S20 ---
    Config 1wire = Portb.0
    
    '--- Declare Subs ---
    Declare Sub Init
    Declare Sub Convallt
    Declare Function Decigrades(byval Sc(9) As Byte) As Integer
    
    '--- Dims ---
    Dim B As Byte
    Dim W As Word
    Dim Dg As Integer
    Dim Min1 As Integer
    Dim Min2 As Integer
    Dim Max1 As Integer
    Dim Max2 As Integer
    Dim Dsid1(8) As Byte
    Dim Sc(9) As Byte
    
    '--- Grafikdisplay ---
    Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 1 , Ce2 = 0 , Cd = 2 , Rd = 3 , Reset = 4 , Enable = 5
    Cls
    Showpic 0 , 0 , Lcdblank
    
    Setfont Font6x8
    Lcdat 2 , 32 , "Sensorcheck"
    Line(0 , 20) -(128 , 20 ) , 1
    Wait 1
    
    '--- Sensor ---
    Setfont Kayfont5x5
    Dsid1(1) = 1wsearchfirst()
    If Dsid1(8) = Crc8(dsid1(1) , 7) Then
       Lcdat 4 , 2 , "CRC OK Sensor"
       Wait 1
       For B = 1 To 8
          Lcdat 5 , 2 , Hex(dsid1(b))
       Next
    End If
    
    
    '--- Main Hauptprogramm ---
    Main:
     Call Convallt                                              ' "Convert ALL T on the 1w-bus"
      Waitus 200 : Waitus 200 : Waitus 200 : Waitus 200         'if you use 2-wire, could be reduced to 200us
    
      1wverify Dsid1(1)                                         'Issues the "Match ROM "
      Locate 1 , 1
      If Err = 1 Then
        Lcdat 6 , 2 , "Err "                                    'Err = 1 if something is wrong
      Elseif Err = 0 Then                                       'lcd " Sensor found"
        1wwrite &HBE
        Sc(1) = 1wread(9)                                       'read bytes into array
        If Sc(9) = Crc8(sc(1) , 8) Then
           Dg = Decigrades(sc(9))
           Lcdat 7 , 2 , Dg
        End If
      End If
      Wait 1
    Goto Main
    
    
    '--- Temperatur konvertieren ---
    Sub Convallt
       1wreset                                                  ' reset the bus
       1wwrite &HCC                                             ' skip rom
       1wwrite &H44                                             ' Convert T
    End Sub
    
    '--- Funktion zum auslesen des Temperatursensors ---
    Function Decigrades(byval Sc(9) As Byte)
    Dim Tmp As Byte , T As Integer , T1 As Integer
    
       Tmp = Sc(1) And 1                                        ' 0.1C precision
          If Tmp = 1 Then Decr Sc(1)
          T = Makeint(sc(1) , Sc(2))
          'Print Hex(t)
          'Print T
    
          T = T * 50                                            'here we calculate the 1/10 precision like
          T = T - 25                                            'DS18S20 data sheet
          T1 = Sc(8) - Sc(7)
          T1 = T1 * 100
          T1 = T1 / Sc(8)
          T = T + T1
          Decigrades = T / 10
    'As integer, this routine gives T*10, with 1/10 degree precision
    End Function
    
    
    
    '--- Includes ---
    $include "kayfont5x5.font"
    $include "font6x8.font"
    
    
    
    '--- Bilder ---
    Lcdblank:
    $bgf "lcdblank.bgf"
    Die ID bekomme ich angezeigt. Hab 2 DS18S20 ausprobiert. Am Datenausgang habe ich einen 4,7k Pullup. Vielleicht sitz ich ja auch nur auf der Leitung. Vielleicht kann mir ja jemand von Euch helfen.

    mfg Kay

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    36
    Beiträge
    318
    also ich bin jetzt soweit, das ich auf die Hardware tippe. Habe gerade noch 2 andere Codes probiert und ich erhalte immer 850. Aber was kann man Hardwaremäßig falsch machen ? Pullup is dran. +5V und GND is dran.

    mfg Kay

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    36
    Beiträge
    318
    hat sich geklärt. Habe 2 DS18S20P erhalten. Die gehen nur mit Parasite Power. Werde mir morgen mal 2 normale holen.

    mfg Kay

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •