-
        

Ergebnis 1 bis 5 von 5

Thema: Sensor Kontrolle DS18s20

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.12.2008
    Ort
    königslutter
    Alter
    27
    Beiträge
    42

    Sensor Kontrolle DS18s20

    Anzeige

    Hallo,

    wie so oft geht es um den DS18s20!

    Ich baue eine Temperaturüberwachung und werde 3-5 Sensoren an eminen Atmega betreiben!

    Mit der Abfrage klappt alles! ** Fast **

    Wenn ich zum testen 3 Sensoren anschließe bekomme ich die richtigen Daten!

    T1 = 20,5 / T2=20,0 / T3=21 === Alles io
    Nur wenn ich jetzt einen Sensor wegnehme(T3)! Weil er z.B. defekt ist oder kabel getrennt wird passiert es.

    Statt z.B. Sensor 3 (T3) seinen wert behält oder 0 steht bekommt er den Wert von Sensor 2 es Antwortet dann einer!

    Das darf nicht sein! (Bei bestimmten Temperaturen wird ein Alerm ausgelöst! schlecht wenn das bei 24° passieren soll und er die Temp. von dem Aussenfühler bekommt im Winter)

    Ich habe schon mehrere Quelltext ausprobiert nur mit allen tritt dieses Problem auf!

    Habe auch die Adressen mal Manuel in ein Array eingetragen oder mit „ Id1(1) = 1wsearchfirst() “
    Bei allen Methoden das gleiche Problem.

    Das Programm schreibe ich in Bascom!

    Mfg
    Sascha

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    kannst Du etwas mehr von deinem Programm zeigen.
    Interessant ist was nach dem Adressieren eines Sensors passiert, denn es muss erkannt werden, ob sich da auch einer drauf gemeldet hat.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    28.12.2008
    Ort
    königslutter
    Alter
    27
    Beiträge
    42
    Das ist ein Code den ich getestet habe... Aber vom Aufbau ist es der gleich wie der den ich geschrieben habe. Berehnung ist anders.


    Code:
    $regfile = "m32def.dat"
    $crystal = 8000000
    
    Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.4 , Db7 = Portd.3 , E = Portb.7 , Rs = Portb.6
    Config Lcd = 16 * 2
    Config Lcdbus = 4
    Cursor Off
    Cls
    
    Config 1wire = Portc.5
    
    Dim T As Integer
    Dim T1 As Integer
    Dim T2 As Integer
    Dim T3 As Integer
    Dim T4 As String * 10
    Dim T5 As String * 10
    Dim T6 As Single
    Dim T7 As Single
    Dim Id1(8) As Byte
    Dim Id2(8) As Byte
    Dim Ar1(9) As Byte
    Dim Ar2(9) As Byte
    Dim I As Byte , Tmp As Byte , Tmp2 As Byte
    
    Dim 1t As Integer
    Dim 1t1 As Integer
    Dim 1t2 As Integer
    Dim 1t3 As Integer
    Dim 1t4 As String * 10
    Dim 1t5 As String * 10
    Dim 1t6 As Single
    Dim 1t7 As Single
    Dim Id3(8) As Byte
    Dim Id4(8) As Byte
    Dim 1ar1(9) As Byte
    Dim 1ar2(9) As Byte
    Dim 1i As Byte , 1tmp As Byte , 1tmp2 As Byte
    
    Id1(1) = 1wsearchfirst()
    Id2(1) = 1wsearchnext()
    Id3(1) = 1wsearchnext()
    Id4(1) = 1wsearchnext()
    
    Print "Print Id1(1)"
    Print ""
    Print Id1(1)
    Print Id1(2)
    Print Id1(3)
    Print Id1(4)
    Print Id1(5)
    Print Id1(6)
    Print Id1(7)
    Print Id1(8)
    Print ""
    
    
    
    Do
    1wreset
    1wwrite &H55
    1wwrite Id1(1) , 8
    1wwrite &H44
    
    Waitms 300
    1wreset
    1wwrite &H55
    1wwrite Id1(1) , 8
    1wwrite &HBE
    Ar1(1) = 1wread(9)
    
    If Ar1(9) = Crc8(ar1(1) , 8) Then
    
       Print "CRC i.o"
    
    Else
    
       Print "CRC Error"
    
    
    End If
    
    Print ""
    
    1wreset
          Tmp = Ar1(1) And 1
          If Tmp = 1 Then Decr Ar1(1)
          T = Makeint(ar1(1) , Ar1(2))
          T = T * 50
          T = T - 25
          T1 = Ar1(8) - Ar1(7)
          T1 = T1 * 100
          T1 = T1 / Ar1(8)
          T = T + T1
          T = T / 10
          T6 = T / 10
          T4 = Fusing(t6 , "#.#")
    
    Waitms 500
    1wreset
    1wwrite &H55
    1wwrite Id2(1) , 8
    1wwrite &H44
    
    Waitms 300
    1wreset
    1wwrite &H55
    1wwrite Id2(1) , 8
    1wwrite &HBE
    Ar2(1) = 1wread(9)
    1wreset
          Tmp2 = Ar2(1) And 1
          If Tmp2 = 1 Then Decr Ar2(1)
          T2 = Makeint(ar2(1) , Ar2(2))
          T2 = T2 * 50
          T2 = T2 - 25
          T3 = Ar2(8) - Ar2(7)
          T3 = T3 * 100
          T3 = T3 / Ar2(8)
          T2 = T2 + T3
          T2 = T2 / 10
          T7 = T2 / 10
          T5 = Fusing(t7 , "#.#")
    
    
    
    1wreset
    1wwrite &H55
    1wwrite Id3(1) , 8
    1wwrite &H44
    
    Waitms 300
    1wreset
    1wwrite &H55
    1wwrite Id3(1) , 8
    1wwrite &HBE
    1ar1(1) = 1wread(9)
    1wreset
          1tmp = 1ar1(1) And 1
          If 1tmp = 1 Then Decr 1ar1(1)
          1t = Makeint(1ar1(1) , 1ar1(2))
          1t = 1t * 50
          1t = 1t - 25
          1t1 = 1ar1(8) - 1ar1(7)
          1t1 = 1t1 * 100
          1t1 = 1t1 / 1ar1(8)
          1t = 1t + 1t1
          1t = 1t / 10
          1t6 = 1t / 10
          1t4 = Fusing(1t6 , "#.#")
    
    Waitms 500
    1wreset
    1wwrite &H55
    1wwrite Id4(1) , 8
    1wwrite &H44
    
    Waitms 300
    1wreset
    1wwrite &H55
    1wwrite Id4(1) , 8
    1wwrite &HBE
    1ar2(1) = 1wread(9)
    1wreset
          1tmp2 = 1ar2(1) And 1
          If 1tmp2 = 1 Then Decr 1ar2(1)
          1t2 = Makeint(1ar2(1) , 1ar2(2))
          1t2 = 1t2 * 50
          1t2 = 1t2 - 25
          1t3 = 1ar2(8) - 1ar2(7)
          1t3 = 1t3 * 100
          1t3 = 1t3 / 1ar2(8)
          1t2 = 1t2 + 1t3
          1t2 = 1t2 / 10
          1t7 = 1t2 / 10
          1t5 = Fusing(1t7 , "#.#")
    
    Locate 1 , 1 : Lcd "T1:" ; T4
    Locate 1 , 10 : Lcd "T2:" ; T5
    Locate 2 , 1 : Lcd "T3:" ; 1t4
    Locate 2 , 10 : Lcd "T4:" ; 1t5
    
    Waitms 500
    
    Loop
    End
    Ich habe wegen der CRC prüfung geguckt aber das ist ja nur zur kontrolle ob die Daten richtig übertragen wurden. So verstehe ich es.

    Ich müssen iwie gucken von welchen Sensor die Daten gekommen sind.

    Muss auch sagen das ich noch sehr neu auf dem Gebiet bin! Aber gbe mir größte mühne auch alle zu verstehen was auf dem 1WireBuss passiert.

    Mfg
    Sascha

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Schon mal im Wiki geschaut bei http://www.roboternetz.de/wissen/ind...com_und_1-Wire ?

    Hier ist beschrieben, wie man Sicher an alle IDs kommt.
    Man kann auch gleich prüfen, ob es sich um den richtigen Sensor handelt.
    Mit Err überprüfen, ob sich überhaupt ein Sensor auf ein 1wsearch... gemeldet hat.

    Zitat Zitat von !*sascha*!
    Ich habe wegen der CRC prüfung geguckt aber das ist ja nur zur kontrolle ob die Daten richtig übertragen wurden. So verstehe ich es.

    Ich müssen iwie gucken von welchen Sensor die Daten gekommen sind.
    CRC sollte man immer verwenden, vor allem wenn irgendwo in der Aufgabe das Wort "Alarm" vorkommt, wie sollte man denn sonst erkennen, ob zB. ein 2. Sensor gerade dazwischengefunkt hat, und statt +24, -17 o.ä. rauskommt !?

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    28.12.2008
    Ort
    königslutter
    Alter
    27
    Beiträge
    42
    vielen Dank!

    Code:
     1wverify Ar(1)                                 ' Gerät mit der SerienNr. aus Ar() auswählen 
        ' Gerät vorhanden 
        If Err = 0 Then
    1wverify habe ich schonmal benutzt, nur kannte die Err Variable nicht...

    Also es geht

Berechtigungen

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