Falsche Temperaturwerte von 1Wire Sensoren
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.
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Felix H.,
die Versorgung von 9 Sensoren im parasitären Betrieb über einen passiven PullUp von 3.3kOhm ist sehr ungünstig. Ein einziger Sensor zieht - hauptsächlich während der internen A/D-Wandlung - typisch 1mA bis maximal 1.5mA. Da der Sensor für einen sicheren Betrieb mindestens 3V Versorgungsspannung sehen möchte, ist das eigentlich unter diesen Umständen schon nicht zu schaffen. Obwohl es in der Praxis mit einem einzigen Sensor und 4.7kOhm PullUp i.d.R. problemlos funktioniert.
Als Abhilfe kannst du mal versuchen den PullUp bis zur Schmerzgrenze der Sensoren zu verkleinern.
Das sind Rpu= (Vcc-Vio)/IL= (5V-0.4V)/4mA= 1.15kOhm, also 1.2kOhm.
Falls das nicht reicht, mußt du die Temperaturwandlung für jeden Sensor einzeln starten und dabei natürlich die Wandlungsdauer berücksichtigen.
Zitat:
Als Kabel verwende ich Cat5e S/FTP Verlegekabel.
Hier solltest du ein verdrilltes Aderpaar verwenden. Hast du das?
Zitat:
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.
Finde ich sehr erstaunlich, hat dieses Netzwerk vergleichbare Rahmenbedingungen?
Im Anhang ein Auszug der elektrischen Betriebsparameter des DS18B20 aus dem Dallas-Datenblatt kopiert.
screwdriver