Hi,

ich habe eine Verdrahtung, bestehend aus 9x DS18b20. Das Problem: Nach etwa 2 Tagen Dauerbetrieb beginnen die Sensoren falsche werte auszugeben. Die zeigen mir alle 85°C an. Nach einigen Stunden geht es dann wieder kurz und dann auch mal nichtmehr. Wie es gerade will.

Das ganze läuft mit 2 Drähten. Also die Stromversorgung über Datenleitung und Pullup Widerstand. Bei dem Widerstand hab ich auch schon 4K7 und 3K3 ausprobiert. Macht keinen Unterschied. Als Kabel verwende ich Cat5e S/FTP Verlegekabel. Die Kabellänge beträgt etwa 2,5 Meter. Alle Verbindungen sind verlötet und mit Schrumpfschlauch versehen.

Ich habe noch eine andere Verdrahtung. Dort beträgt die Kabellänge über 10 Meter mit 15 Sensoren. Das läuft nun seit zwei Tagen ohne Probleme.

Hier mein Programm:

Code:
Temprechnen:

Waitms 50

Disable Interrupts

1wreset
1wwrite &HCC                                                ' skip rom (an alle)
1wwrite &H44

Enable Interrupts

Waitms 750

X = 0

Disable Interrupts

Do

X = X + 1

1wreset

  If X = 1 Then
   1wverify Dsid12(1)                                       'Sensor wählen
  Elseif X = 2 Then
   1wverify Dsid13(1)                                       'Sensor wählen
  Elseif X = 3 Then
   1wverify Dsid16(1)                                       'Sensor wählen
  Elseif X = 4 Then
   1wverify Dsid18(1)                                       'Sensor wählen
  Elseif X = 5 Then
   1wverify Dsid25(1)                                       'Sensor wählen
  Elseif X = 6 Then
   1wverify Dsid26(1)                                       'Sensor wählen
  Elseif X = 7 Then
   1wverify Dsid27(1)                                       'Sensor wählen
  Elseif X = 8 Then
   1wverify Dsid28(1)                                       'Sensor wählen
  Elseif X = 9 Then
   1wverify Dsid29(1)                                       'Sensor wählen
  End If

   1wwrite &HBE                                             'Daten hergeben
   Tempa(1) = 1wread(9)                                     'read bytes into array

   If Tempa(9) = Crc8(tempa(1) , 8) Then
    Celsius = 0
    Celsius = Makeint(tempa(1) , Tempa(2))
    Temperatura = Celsius
    Temperatur1(x) = Temperatura / 16
    Temperatur(x) = Fusing(temperatur1(x) , "###.#")
   End If

   Waitms 20

Loop Until X = 9

Enable Interrupts

Return
Hat jemand eine Idee? Das ganze hängt übrigens an einem Atmega8.