DS18B20 - 10m Leitung, Position des Widerstandes

Gast #6302993
Lesenswert?

Hallo,

ich betreibe einen DS18B20 Temperatursensor an einer 10m langen 
"Telefonleitung"

Man soll ja zwischen dem Daten-Pin und VDD einen 4,9kOhm Widerstand 
einbringen. Ist es wichtig an welcher Seite der Leitung der Widerstand 
angebracht wird (direkt am Sensor oder am Arduino)?

Vielen Dank
Gast #6303022
Lesenswert?

Hallo,

der 4,7k Widerstand ist der Abschlusswiderstand des 1-Wire Bus. Er 
gehört bei so langen Leitungen an den Arduino.

Der 1-Wire Bus soll bis zu 100m Länge verkraften. Du bist mit deinen 10m 
also voll innerhalb der Spezifikation. Sollte also klappen. ;)

Salu Hans
#6304439
Lesenswert?

Hallo,

ich habe den Pullup auf der Platine am Sensor Steckeranschluss sitzen. 
Die Sensoren sind nicht parasitär versorgt, deren Keramik Kondensatoren 
habe ich direkt am Sensor platziert/angelötet. Leitungslänge ist bei mir 
ca. 5m, darauf sitzen verteilt 4 solcher Sensoren, Kabel ist einfaches 
Netzwerkkabel.
Gast #6860735
Lesenswert?

Moin, ich versuche mich gerade auch mit dem Sensor und ähnlicher 
Kabellänge.

Mein Problem dabei mit "Telefonkabel". Ich komme mit den 4,7k nicht aus. 
Diese sind auf dem Device fest verbaut. Ich habe jetzt 4,7k (original 
verbaut) und 1k Paralel was ~830ohm gibt, und funktioniert. Spannung ist 
~3,5V.

mit 2,2k Paralel lief es nicht...

vielleicht kann mir jemand diese Berechnung erläutern?

https://www.maximintegrated.com/en/design/technical-documents/tutorials/4/4255.html#:~:text=The%20most%20common%20VOL,responding%20with%20a%20logic%200.
#6860751
Lesenswert?

Hat dein Sensor eine separate Stromversorgung, oder wird er über die 
Datenleitung versorgt (parasitär)? Wenn Letzteres, dann reicht es nicht 
aus, die Datenleitung während der Messung nur über einen Widerstand 
hochzuziehen. Sie muss aktiv versorgt werden. Bei den meisten 
Controllern kann man das per Programmierung des 1-Wire I/O Pins 
erreichen, aber nicht bei 8051&Co.

Wenn das nicht geschieht, würde es deine Situation erklären. Der DS18x20 
braucht in dieser Zeit nämlich offiziell mindestens 1,5 mA.

Es gibt ausserdem einen Zusammenhang zwischen Pullup und Zeitverhalten. 
Wenn das 1-Wire Programm dem Bus zu wenig Zeit lässt, um die Leitung 
über den Widerstand wieder auf High zu kriegen. Das dauert umso länger, 
je grösser der Widerstand und je länger die Leitung ist.
#6860895
Lesenswert?

Mr.T schrieb:
> Moin, ich versuche mich gerade auch mit dem Sensor und ähnlicher
> Kabellänge.
>
> Mein Problem dabei mit "Telefonkabel". Ich komme mit den 4,7k nicht aus.
> Diese sind auf dem Device fest verbaut. Ich habe jetzt 4,7k (original
> verbaut) und 1k Paralel was ~830ohm gibt, und funktioniert. Spannung ist
> ~3,5V.

Arg niedrig. Offizielle sollte der minimal 1,2k sein, damit max. 4mA 
Pull Down Strom benötigt werden. Bei 10m braucht man das aber eher 
nicht.

> mit 2,2k Paralel lief es nicht...

Das kann viele Ursachen haben. Schlechte Software, Störeinkopplungen, 
instabile Stromversorgung am DS1820.

> vielleicht kann mir jemand diese Berechnung erläutern?
>
> 
https://www.maximintegrated.com/en/design/technical-documents/tutorials/4/4255.html#:~:text=The%20most%20common%20VOL,responding%20with%20a%20logic%200.

Beitrag "Re: Onewire + DS18x20 Library"

Wenn alles paßt, kommt man mit OneWire DEUTLICH weiter und kann deutlich 
mehr Kabelkapazität verkraften. In dem Thread wurde das diskutiert, eine 
normale Stromversorgung des Sensor + 100nF am Sensor brachten einen 
stabilen Betrieb.

https://www.mikrocontroller.net/topic/goto_post/4597883
Gast #6860917
Lesenswert?

erstmal Danke für die Antworten!

Mein Device ist ein gekaufter LoRa Dragino Sensor.

https://www.dragino.com/products/temperature-humidity-sensor/item/168-lsn50v2-d20.html

https://www.dragino.com/downloads/index.php?dir=LoRa_End_Node/LSN50v2-D20/

an der Software kann, will ich aktuell, nicht soviel machen. Aber die 
Länge des Kabels im Original reicht eben nicht. Ich war wohl etwas 
leichtgläubig was die schriftlichen Möglichkeiten von 1-Wire angeht, 
beziehungsweise nicht im Thema wie abhängig es von der Implementierung 
ist.

Es sind auch keine 100m sondern wirklich nur 10m, ich werde mal 
versuchen mit dem Oszilloskop (leider nur ein "kleines") zu messen wie 
das Signal aussieht. Am Device und am Sensor. Und mal schauen ob ich 
noch Cat5 Kabel finde, es sollte aber ja auf der Strecke mit dem 
"Telefonkabel" gehen.

Versorgt wird der Sensor über das Dragino Device +/-/Data, gemessen habe 
ich dort die 3,5V. Das Kabel ist nicht fest verlegt, sondern liegt 
aktuell erst aufgerollt dann abgerollt auf dem Tisch. Keine großen 
Ströme und Geräte in der nähe. Mit dem Oszi habe ich mal kurz am Device 
gemessen und keine gravierenden Unterschiede erkannt, also es sah noch 
sehr Rechteckig mit 4,7k aus.

Sensoren habe ich zwei unterschiedliche, beide funktionieren am kurzen 
Kabel, am langen nicht.
#6860928
Lesenswert?

Hmm, was noch so ein Problem ist, wenn man OneWire mit einem normalen IO 
Pin eines Controllers macht, sind Signalreflektionen. Bei LOW schaltet 
der zu schnell und "hart". Schalte mal 50-100 Ohm in Reihe zwischen dein 
IO-Pin des Controllers und die Datenleitung.
Gast #6860965
Lesenswert?

Hallo,
ich hab mal am Sensor gemessen. Gelb ist die Linie mit 4,7k und Parallel 
1k, also die ~830ohm. Weiß sind nur die 4,7k, was nicht funktioniert.

Gerade beim zweiten Pegel sieht man ja einen deutlichen unterschied. Ich 
versuche es dann mal mit Cat5 Kabel.

Zur Software, da wollte ich halt bei der original Dragino bleiben und 
nicht dran rum fuhrwerken, auch wenn das anscheinend geht.
Angehängte Dateien:
#6860979
Lesenswert?

Mr.T schrieb:
> Hallo,
> ich hab mal am Sensor gemessen. Gelb ist die Linie mit 4,7k und Parallel
> 1k, also die ~830ohm. Weiß sind nur die 4,7k, was nicht funktioniert.

Das ist einiges nicht ganz sauber. Der linke Puls hat eine sehr steile, 
steigende Flanke. Das kann nicht sein, wenn alle Busteilnehmer Open 
Drain sind. Denn diese Flanke macht nur der Pull-Up Widerstand. Wie es 
scheint, treibt aber der Master, der Dragino den Pegel aktiv nach HIGH. 
Ebenso am Ende der rechten, steigenden Flanke.

Also mal wieder die 1001 unsaubere Onewire Implementierung. Hmmm. 
Vermutlich ist auch die Datenerfassung, sprich der Abtastzeitpunkt eher 
ungünstig.

> Gerade beim zweiten Pegel sieht man ja einen deutlichen unterschied.

Ja, aber an sich sehen beide Signale OK aus.

> Ich
> versuche es dann mal mit Cat5 Kabel.

Tu das, aber das wird vermutlich nicht viel bringen. Das Problem sind 
nicht Störungen, sondern falsche Timings in der Software.

> Zur Software, da wollte ich halt bei der original Dragino bleiben und
> nicht dran rum fuhrwerken, auch wenn das anscheinend geht.

Tja, probiers aus.
Gast #6860995
Lesenswert?

Danke für die Hilfe, ich schau mal ob ich in der Software was finden 
kann...

Anbei noch ein Anhang vom Auslesevorgang, ich trigger den mit einem 
Reset des Device. Ich hab es noch mit 1,5k Parallel versucht, wären dann 
~1,2k aber damit gehts leider auch nicht...
Angehängte Dateien:
Gast #6861017
Lesenswert?

Ergänzend noch, wenn ich dich richtig verstanden habe zieht der Dragino 
den Pegel beim Linken Puls Hoch. Beim rechten erkennt man das erst der 
Sensor das Signal hochziehen will, dann der Dragino nach "zu kurzer" 
Zeit (weiße Linie) den Pegel anhebt? Bei der Gelben wird der High Pegel 
ja früher erreicht, bei gleichem "start".

Beitrag "Re: DS18B20 Problem Telfonkabel 4 polig"

Deine Bilder mit 4,7k sehen dennoch steiler aus. Wurde da am Master oder 
an den Sensoren gemessen?

Danke und Grüße.
#6861076
Lesenswert?

Mr.T schrieb:
> Danke für die Hilfe, ich schau mal ob ich in der Software was finden
> kann...
>
> Anbei noch ein Anhang vom Auslesevorgang, ich trigger den mit einem
> Reset des Device.

Da sieht man nicht viel.

> Ich hab es noch mit 1,5k Parallel versucht, wären dann
> ~1,2k aber damit gehts leider auch nicht...

Dann ist was grundlegend faul. Funktioniert der Sensor mit einem kurzen 
Kabel, so 1m und weniger? Mal eine Zwischenlöänge probiert, so 3, 5, 8m?
Beitrag #6861082 wurde von einem Moderator gelöscht.
Gast #6861099
Lesenswert?

Falk B. schrieb:
> Dann ist was grundlegend faul. Funktioniert der Sensor mit einem kurzen
> Kabel, so 1m und weniger? Mal eine Zwischenlöänge probiert, so 3, 5, 8m?

Ja mit kurzem Kabel geht es auch ohne weiteren Widerstand. So werden die 
Teile ja auch ausgeliefert.

Zwischenlängen muss ich noch mal Probieren, aber ich denke da gibt es 
halt ähnlich wie beim Widerstand nen Wert wo es dann Funktioniert.

https://github.com/dragino/Lora/blob/master/LSN50/v2.0/LoRa%20ST%20Sensor%20Node%20v2.0.sch.pdf

Das ist der Schaltplan, ich hab die Widerstandswerte gemessen und laut 
Plan sind am Pin auch 4,7k an PB3.

Ich befürchte das ist dann wirklich ein Stück software...

https://github.com/dragino/LoRa_STM32/issues/13

Das problem ist auch so eine Geschichte...

https://github.com/dragino/LoRa_STM32/blob/master/STM32CubeExpansion_LRWAN/Drivers/BSP/Components/ds18b20/ds18b20.c

Da scheint es recht viel Timing zu geben :/
#6861105
Lesenswert?

Yup, da ist es: DS18B20_Mode_Out_PP. Mit GPIO_MODE_OUTPUT_PP als Ausgang 
programmiert zieht die Leitung aktiv hoch. Auch GPIO_SPEED_FREQ_HIGH ist 
nicht unbedingt die allerbeste Idee.

Den Delay-Code würde ich als "mutig" bezeichnen. Unkalibrierte Schleifen 
reagieren bei solchen Prozessoren stark auf die kleinste Änderung.
#6861108
Lesenswert?

Martin schrieb:
> Man soll ja zwischen dem Daten-Pin und VDD einen 4,9kOhm Widerstand
> einbringen

sagt wer?
Ich sage das ist spannungs- und längen-abhängig weil für die nötigen 
steilen Schaltflanken die Kabelkapazität und der Umladestrom zuständig 
ist.
Ich habe hier 6 Sensoren an 5V auf 72m verteilt und der Pullup ist 1,8k 
am µC.

Parasitär versorgt 2-draht (freie Telefondoppelader)
#6861130
Lesenswert?

4 Sensoren mit zig Metern, 100 Ohm Serie, 5 kOhm Pullup, bei 5V, 
parasitär versorgt. Ab und zu stimmt die CRC nicht, was mich angesichts 
der Verdrahtung mit einfachster Leitung quer durchs Haus nicht weiter 
wundert. Ansonsten gab es in anderthalb Jahrzehnten nur Ärger, wenn ein 
Blitz einen Sensor vernichtete.
#6861143
Lesenswert?

(prx) A. K. schrieb:
> Wo/wie sind eigentlich DOUT1_0, DOUT1_1 etc definiert?

Hintergrund: Wenn DOUT1_1 den Pin einfach bloss hochzieht, und zwar 
aktiv, das riskiert man mit dem Code zwischen Reset und Presence m.E. 
einen Signalkonflikt zwischen aktiv high vom Controller und aktiv low 
vom Sensor. Das gibt dann eine nette Sensorheizung ab.

NB: Die Wartezeit von 2µs am Ende von WriteBit ist zwar formal 
ausreichend, aber wenn man den Code auf Open Drain umbaut, ist es für 
eine lange Leitung zu wenig. Die braucht u.U. für die 0=>1 Phase länger.
Gast #6861147
Lesenswert?

(prx) A. K. schrieb:
> Wo/wie sind eigentlich DOUT1_0, DOUT1_1 etc definiert?

In GitHub kann man ja suchen :D... hat bei mir aber auch gedauert :(
1
/* ---------------------------  DS18B20-1 HW definition -------------------------------*/
2
#define DOUT1_CLK_ENABLE()  __HAL_RCC_GPIOB_CLK_ENABLE()
3
#define DOUT1_PORT          GPIOB   
4
#define DOUT1_PIN           GPIO_PIN_3
5
#define DOUT1_READ()        HAL_GPIO_ReadPin(DOUT1_PORT,DOUT1_PIN)
6
#define DOUT1_0             HAL_GPIO_WritePin(DOUT1_PORT,DOUT1_PIN,GPIO_PIN_RESET)
7
#define DOUT1_1             HAL_GPIO_WritePin(DOUT1_PORT,DOUT1_PIN,GPIO_PIN_SET)
#6861184
Lesenswert?

(prx) A. K. schrieb:
> Weiter im Text: Wenn der Sensor mit separater Stromversorgung
> angeschlossen ist, liefert er einen low-Puls, wenn er fertig ist.

Der DS18B20? Nö. Nur wenn man den fragt.

"If the DS18S20 is powered by an external supply, the master can issue 
read-time slots after the Convert T command and the DS18S20 will respond 
by transmitting 0 while the temperature conversion is in progress and 1 
when the conversion is done. In parasite power mode this notification 
technique cannot be used since the bus is pulled high by the strong 
pullup during the conversion."

> Leider
> ist zu diesem Zeitpunkt die Leitung aktiv auf high. Also besser nur
> parasitär versorgen.

NEIN! Das ist nicht nötig! Normale Versorgung geht problemlos!
Gast #6861187
Lesenswert?

(prx) A. K. schrieb:
> Hübsch über die Welt verteilt. Aber nach Code eines geübten
> Controller-Programmierers sieht das sowieso nicht aus.

Jap ich finde es auch sehr unübersichtlich gemacht. Das delay wird auch 
in einer Schleife mit weiterem Zähler abgearbeitet wo mir noch nicht 
klar ist welche zeit nun "750" ist. Ich erkenne beim Starten nicht die 
Reset Zeit :(.

https://www.maximintegrated.com/en/design/technical-documents/app-notes/1/126.html



Hilft aber nichts, das ding habe ich nun.
Beitrag #6861306 wurde von einem Moderator gelöscht.
Gast #7164442
Lesenswert?

Sorry to reply in English.
I've worked with DS18b20's for a long time.
Did anyone notice there are no disable/enable interrupts in the STM 
code?
The timings for 1-wire basically require it.

The best way to use 1-wire over any distance is to use MOSFETS to beef 
up the signal strength.  I've used 200m cables before without any 
difficulty but it also requires 3 FETS and a BJT.

Simon

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren