-
        

Ergebnis 1 bis 7 von 7

Thema: DALLAS Sensor

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    17.01.2009
    Ort
    ILLINGEN
    Alter
    59
    Beiträge
    21

    DALLAS Sensor

    Anzeige

    Hallo,
    Hab mir ein kleines Windowsprogramm erstellt,
    das die Temperaturen von zwei 1Wire Sensoren
    ausliest, die über RS232 vom AVR geschickt werden.

    Wenn ich nun die Sensoren berühre, kommen die
    Daten nicht mehr richtig an. Könnt ihr mal auf meinen
    Code schauen, ob das so richtig ist bzw. ob man was
    optimieren/ändern muß.
    Code:
    ' Beispiel für das myAVR Board 1 & 2 mit LCD und 1wire Temperatursensoren an Pin 5 von Port C
    ' Zwei 1wire Temperatursensoren DS1820
    $regfile = "m8def.dat"
    $crystal = 3686400
    $baud = 9600
    
    ' Pin für 1wire Schnittstelle festlegen, Schnittstelle wird von Bascom durch Software realisiert
    Config 1wire = Portc.5
    
    Dim Dsid1(8) As Byte
    Dim Dsid2(8) As Byte
    Dim I As Byte
    Dim Nr As Byte
    Dim Sc(9) As Byte
    Dim T As Integer
    Dim T1 As Integer
    Dim T2 As String * 7
    Dim Ts As Integer
    Dim T3 As String * 17
    
    ' Ersten angeschlossenen DS1820 finden und Adresse auslesen
    Dsid1(1) = 1wsearchfirst()
    Waitms 100
     ' Zweiten DS1820 suchen und Adresse auslesen
    Dsid2(1) = 1wsearchnext()
    Waitms 100
    
    'Thermostat - Ts = Schalttemperatur x 10
    Ts = 2500
    
    Do
     ' Alle angeschlossenen DS1820 zum Messen veranlassen
     1wreset
     1wwrite &HCC
     1wwrite &H44
     Waitus 200
     ' Den ersten Sensor auswählen
     1wverify Dsid1(1)
     ' Kommando READ SCRATCHPAD
     1wwrite &HBE
     Sc(1) = 1wread(9)
     If Sc(9) = Crc8(sc(1) , 8) Then
      ' Genauere Temperaturberechnung auf 0,1 °C
      I = Sc(1) And 1
      If I = 1 Then Decr Sc(1)
      T = Makeint(sc(1) , Sc(2))
      T = T * 50
      T = T - 25
      T1 = Sc(8) - Sc(7)
      T1 = T1 * 100
      T1 = T1 / Sc(8)
      T = T + T1
      T = T / 10
      T2 = Str(t)
      ' Temperatur in 0,1 Grad Schritten ausgeben
      T3 = Format(t2 , "+00.0") + " C" + "|"
     End If
     'Waitms 500
     ' Ausgabe alle 0,5 Sekunden
     ' Den zweiten Sensor auswählen
     1wverify Dsid2(1)
     ' Kommando READ SCRATCHPAD
     1wwrite &HBE
     Sc(1) = 1wread(9)
     If Sc(9) = Crc8(sc(1) , 8) Then
      ' Genauere Temperaturberechnung auf 0,1 °C
      I = Sc(1) And 1
      If I = 1 Then Decr Sc(1)
      T = Makeint(sc(1) , Sc(2))
      T = T * 50
      T = T - 25
      T1 = Sc(8) - Sc(7)
      T1 = T1 * 100
      T1 = T1 / Sc(8)
      T = T + T1
      T = T / 10
      T2 = Str(t)
      ' Temperatur in 0,1 Grad Schritten ausgeben
      T3 = T3 + Format(t2 , "+00.0") + " C"
      Print T3
      T3 = Space(17)
     End If
     ' Ausgabe alle 0,5 Sekunden
     Waitms 100
    Loop
    End
    Das ist die Debug-ausgabe in meinem Windows-
    programm. Wie man sieht, kommt zwischendurch
    auch mal Daten - Salat :

    Code:
    +24.0 C|+24.0 C
    
    +24.0 C|+24.0 C
    
    +24.0 C|+24.1 C
    
    +24.0 C|+24.1 C
    
    +24.0 C|+24.1 C
    
    +24.0 C|+24.1 C
    
    +24.0 C|+24.0 C
    
    +24.0 C|+24.0 C
    
    +24.0 C|+24.0 C
    
    +24.0 C|+24.0 C
    
    +24.0 C|+24.1 C
    
    +24.0 C|+24.1 C
    
    +85.0 C|+24.1 C
    
    +85.0 C|+24.1 C
    
    +85.0 C|+24.3 C
    
    +85.0 C|+24.3 C
    
    +24.3 C|+24.3 C
    
    +24.3 C|+24.3 C
    
    +24.3 C|+25.2 C
    
    +24.3 C|+25.2 C
    
    +25.3 C|+25.2 C
    
    +25.3 C|+25.2 C
    
    +25.3 C|+26.3 C
    
    +25.3 C|+26.3 C
    
    +26.3 C|+26.3 C
    
    +26.3 C|+26.3 C
    
    +26.3 C|+27.0 C
    
    +26.3 C|+27.0 C
    
    +27.1 C|+27.0 C
    
    +27.1 C|+27.0 C
    
    +27.1 C|+27.7 C
    
    +27.1 C|+27.7 C
    
    +27.7 C|+27.7 C
    
    +27.7 C|+27.7 C
    
    +27.7 C|+28.2 C
    
    +27.7 C|+28.2 C
    
    +28.2 C|+28.2 C
    
    +28.2 C|+28.2 C
    
    +28.2 C|+28.6 C
    
    +28.2 C|+28.6 C
    
    +28.6 C|+28.6 C
    
    +28.6 C|+28.6 C
    
    +28.6 C|+29.0 C
    
    +28.6 C|+29.0 C
    
    +28.8 C|+29.0 C
    
    +28.8 C|+29.0 C
    
    +28.8 C|+29.3 C
    
    +28.8 C|+29.3 C
    
    +29.2 C|+29.3 C
    
    +29.2 C|+29.3 C
    
    +29.2 C|+29.2 C
    
    +29.2 C|+29.2 C
    
    +28.8 C|+29.2 C
    
    +28.8 C|+29.2 C
    
    +28.8 C|+29.0 C
    
    +28.8 C|+29.0 C
    
    +28.6 C|+29.0 C
    
    +28.6 C|+29.0 C
    
    +28.6 C|+28.8 C
    
    +28.6 C|+28.8 C
    
    +28.4 C|+28.8 C
    
    +28.4 C|+28.8 C
    
    +27.0 C|+27.1 C
    
    +27.0 C|+27.1 C
    
    +26.9 C|+27.1 C
    
    +26.9 C|+27.1 C
    
    +26.9 C|+27.0 C
    
    +26.9 C|+27.0 C
    
    +26.8 C|+27.0 C
    
    +26.8 C|+27.0 C
    
    +26.8 C|+26.9 C
    
    +26.8 C|+26.9 C
    
    +85.0 C|+26.9 C
    
    +85.0 C|+26.9 C
    
    +26.8 C|+26.8 C
    
                     
    +26.8 C
    +85.0 C|
    +26.8 C
    +85.0 C|
    +26.8 C
    +85.0 C|
    +27.0 C
    +85.0 C|
    +27.0 C
    +26.8 C|
    +27.0 C
    +26.8 C|
    +27.0 C
    +26.8 C|
    +27.5 C
    +26.8 C|
    +27.5 C
    +27.6 C|
    +27.5 C
    +27.6 C|
    +27.5 C
    +27.6 C|
    +28.2 C
    +27.6 C|
    +28.2 C
    +28.3 C|
    +28.2 C
    +28.3 C|
    +28.2 C
    +28.3 C|
    +28.8 C
    +28.3 C|
    +28.8 C
    +28.8 C|
    +28.8 C
    +28.8 C|
    +28.8 C
    +28.8 C|
    +29.3 C
            
             +29.3 C 
    +85.0 C|+29.3 C 
    +85.0 C|+29.3 C 
    +85.0 C|+29.6 C 
    +29.3 C|+29.6 C 
    +29.3 C|+29.6 C 
    +29.3 C|+29.6 C 
    +29.3 C|+29.5 C 
    +29.2 C|+29.5 C 
    +29.2 C|+29.5 C 
    +29.2 C|+29.5 C 
    +29.2 C|+29.3 C 
    +29.0 C|+29.3 C

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    938
    Hallo H.Brill.

    Wenn die Lesefehler durch das Berühren des Sensors ausgelöst werden, dann solltest du das Problem auch beim Sensor suchen. Eine zuverlässige Signalübertragung ist das A und O der Elektronik.
    Also: Wackelkontakte suchen, Versorgungsspannung prüfen, ggf. besser Filtern/puffern. Wenn das Problem dann noch immer besteht, kann man sich mal über Timing-Fragen der Software Gedanken machen - vielleicht läuft da was "auf Kante". Aber wie schon gesagt: Das riecht nach einem Hardwareproblem deiner Meßmimik.

    Gruß
    Christian.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    17.01.2009
    Ort
    ILLINGEN
    Alter
    59
    Beiträge
    21
    Hat sich erledigt.
    Anscheinend war das Meßinterval
    zu kurz. Habs jetzt auf 1000 MS
    erhöht und schon funktioniert es.

    Alle Sekunde ist für mich mehr
    als ausreichend.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    938
    Hat sich erledigt.
    Ganz sicher? Was bedeutet dein Meßintervall? Wird jetzt seltener abgefragt oder ist das Timing verlangsamt (war es vorher außerhalb der Spezifikation?) oder verschwinden die Fehlübertragungen in der Mittelung über alle Werte aus 1000ms?
    Kann deine Maßnahme tatsächlich das Problem "springende Meßwerte bei Berührung mit der Hand" gelöst haben? Eine Mittelwertbildung zur Entrauschung des Meßwertes bei digitalisierten Analogsignalen ist ja durchaus legitim, aber bei einem digital übertragenen Signal würde ich derart große Abweichungen nicht hinnehmen wollen.
    Mir ist noch aufgefallen, daß der Müll immer auf 85,0°C lautet; das sieht nach Meßbereichsgrenze aus und damit nach Hardwarefehler.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    17.01.2009
    Ort
    ILLINGEN
    Alter
    59
    Beiträge
    21
    Ist ja schon eigenartig.
    Habe nach jedem Print 1 Sekunde eingefügt.
    Hat also mit dem Timing des Sensors nichts
    zu tun, sondern nur mit der RS232 bzw. meinem
    Programm.

    Die 85.0 C kommen bei Temperaturerhöhung
    immer noch. Mein Bruder hat auch 2 solcher
    Sensoren und hatte mir letzte Woche schon
    gesagt, daß dies normal wäre. Ich denke doch,
    daß er das Datenblatt, das ich nicht habe, gelesen
    hat. Der ist auch der Elektroniker bei uns im Hause,
    der mir auch manche Sachen lötet.

    Wenns micht stört, kann ichs ja noch rausfiltern.
    Anbei auch mal das Programm.
    Angehängte Dateien Angehängte Dateien

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Zwischen Meßwert anfordern und Messwert abholen sollte bei 1 Draht Betrieb die Zeit nicht zu kurz sein. 700mS laufen bei mir zuverlässig.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    17.01.2009
    Ort
    ILLINGEN
    Alter
    59
    Beiträge
    21
    Hab die 700ms mal zwischen Anfordern
    und Abholen gesetzt und in der Tat, die
    85.0 C kommen nicht mehr.

    Danke nochmals für die Unterstützung.

Berechtigungen

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