PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Falsche Temperaturwerte von 1Wire Sensoren



Felix H.
01.10.2010, 16:59
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:


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.

screwdriver
02.10.2010, 08:25
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.


Als Kabel verwende ich Cat5e S/FTP Verlegekabel.Hier solltest du ein verdrilltes Aderpaar verwenden. Hast du das?


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

Felix H.
02.10.2010, 09:49
Hi,

ok das mit dem kleineren Widerstand werde ich versuchen. Sollte der Fehler dann aber nicht sofort auftreten und nich erst nach 2 Tagen?

ich verwende ein verdrilltes Aderpaar für Masse und Signalleitung.

Bei dem zweiten Bus gehe ich vom µC in zwei Richtungen. Einmal 10 Meter und am Ende 4 Sensoren und dann nochmal vom µC aus 4 Meter und an deren Ende die übrigen 11 Sensoren. Der Pullup ist hier auch direkt am µC angebracht.

Gruß
Felix

Edit: Kann ich eigentlich auch Parasite Power und "Normale" Stromversorgung auf einem Bus mischen? Wenn ja, wie verhält sich das mit dem Pullup? Bleibt der dann trotzdem drin?

wkrug
02.10.2010, 10:37
Kann ich eigentlich auch Parasite Power und "Normale" Stromversorgung auf einem Bus mischen?
Soweit ich das im Kopf habe wird von Dallas vorgeschlagen einen PNP Transistor in die Datenleitung gegen +5V zu legen um während der Wandlung die Sensoren mit Strom zu versorgen.

Das war für mich ein Grund auf Parasite Power zu verzichten.

Ich würd da lieber noch mal einen Draht opfern und eine vernünftige Stromversorgung zu den Sensoren führen - Gerade, wenn es so viele sind.

screwdriver
02.10.2010, 10:49
Soweit ich das im Kopf habe wird von Dallas vorgeschlagen einen PNP Transistor in die Datenleitung gegen +5V zu legen um während der Wandlung die Sensoren mit Strom zu versorgen.

Das war für mich ein Grund auf Parasite Power zu verzichten.

Ich würd da lieber noch mal einen Draht opfern und eine vernünftige Stromversorgung zu den Sensoren führen - Gerade, wenn es so viele sind.
Sehe ich natürlich ganz genau so. Aber den Versuch mit dem stärkeren PullUp wird ich doch noch erstmal probieren, weils weniger aufwändig ist.


...ok das mit dem kleineren Widerstand werde ich versuchen. Sollte der Fehler dann aber nicht sofort auftreten und nich erst nach 2 Tagen?Im Prinzip hast du da Recht. Ich habe allerdings die Erfahrung gemacht, dass so sporadisch auftretende Fehler oftmals mit der Versorgungsspannung zusammenhängen - und die kommt bei deinen DS18B20 nunmal über den PullUp.


Kann ich eigentlich auch Parasite Power und "Normale" Stromversorgung auf einem Bus mischen? Wenn ja, wie verhält sich das mit dem Pullup? Bleibt der dann trotzdem drin?Ja, man kann beide Versorgungsarten mischen. Der PullUp bleibt wie er ist. Für ihn gilt es trotzdem die Spezifikationen (siehe meinen ersten Post) einzuhalten.

screwdriver

Felix H.
02.10.2010, 12:03
Hi,

erstmal danke für die Infos. Ich werde das dann mischen denke ich. Eventuell den Pullup auch auf mehrere Widerstände aufteilen und an verschiedene Stellen in der Leitung setzen.

Gruß

screwdriver
02.10.2010, 12:17
erstmal danke für die Infos. Ich werde das dann mischen denke ich. Eventuell den Pullup auch auf mehrere Widerstände aufteilen und an verschiedene Stellen in der Leitung setzen. Versuch doch erstmal den stärkeren PullUp!
Den PullUp bitte nur einmal am AVR setzen - du vergrößerst sonst nur die aufgespannte Induktionsfläche für Störeinstrahlung.
Beim Vermischen der Versorgungsarten ist natürlich bei verwendung eines aktiven PullUp besondere Vorsicht geboten!

Mahlzeit,

screwdriver

Felix H.
02.10.2010, 16:44
Hi,

ich hab jetz erstmal einen kleineren Pullup reingemacht. Wie ich eben feststellte, kommt nun auch der gleiche Fehler bei der zweiten Verdrahtung^^ Wird sich nun zeigen, ob es was bringt.

hardware.bas
23.11.2010, 21:02
Ich hatte dasselbe Problem mit den "85 Grad". Da ich für die Datenübertragung ein ein eigenes Protokoll mit Zwischenspeicherung
anwenden musste (1wire geht nicht so lang, wie man es sich wünscht),
bin ich auf Nummer Sicher gegangen und habe den Prüfsummencheck
mit einbezogen. Die ab und zu auftretenden "85Grad" würden korrekt
übertragen, da dier Prüfsummencheck korrekt war. Daher kanns an
der Übertragung nicht liegen, der PullUp ist eh ziemlich unkritisch.
Der Fehler hat sich dann gegeben, wo ich dem DS18B20 etwas mehr
Zeit nach der Initialisierung zum Messen gegeben habe. VG Micha

hardware.bas
12.12.2010, 16:38
Das Problem mit den 85 Grad, trat weiterhin häufig auf, wenn der DS18B20
erstmalig eine Messung macht. Beheben konnte ich das Problem nur, wenn
der bzw. die Sensoren als Erstes "einen auf die Mütze" kriegen, also erstmal
eine Messprozedur, ohne diese zu nutzen, machen lassen. VG Micha