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
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
HBose schrieb:> Hallo,>> der 4,7k Widerstand ist der Abschlusswiderstand des 1-Wire Bus. Er> gehört bei so langen Leitungen an den Arduino.
Doppelt falsch.
1.) Ein ist ein Pull-Up Widerstand, der nix mit einem (HF)-Abschluß ala
Wellenwiderstand zu tun hat.
2.) man kann ihn praktisch ÜBERALL platzieren!
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.
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.
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
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.htmlhttps://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.
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.
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.
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.
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...
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.
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?
Mr.T schrieb:> Deine Bilder mit 4,7k sehen dennoch steiler aus. Wurde da am Master oder> an den Sensoren gemessen?
Ist beides das Gleiche, weich mein Testaufbau nur aus einer 10cm Platine
besteht. Die Buslast wurde durch einen Kondensator künstlich erzeugt.
Mr.T schrieb:> 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
Der Sensor kann das Signal nicht hochziehen, nur der Pullup. Und der
Master darf es nicht, scheint es aber manchmal zu tun.
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.
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)
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.
(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.
Weiter im Text: Wenn der Sensor mit separater Stromversorgung
angeschlossen ist, liefert er einen low-Puls, wenn er fertig ist. Leider
ist zu diesem Zeitpunkt die Leitung aktiv auf high. Also besser nur
parasitär versorgen.
Mr.T schrieb:> um genau zu sein da...
Hübsch über die Welt verteilt. Aber nach Code eines geübten
Controller-Programmierers sieht das sowieso nicht aus. Umständlicher
gehts kaum. Und die Nutzung der HAL für Zeug, wo es auf die Mikrosekunde
ankommt, ist auch nur was für schnelle Prozessoren.
(prx) A. K. schrieb:> Hübsch über die Welt verteilt. Aber nach Code eines geübten> Controller-Programmierers sieht das sowieso nicht aus. Umständlicher> gehts kaum. Und die Nutzung der HAL für Zeug, wo es auf die Mikrosekunde> ankommt, ist auch nur was für schnelle Prozessoren.https://de.wikipedia.org/wiki/Bloatware
(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!
(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.
Torsten S. schrieb:> Fake Chip?
davon gehe ich mal nicht aus, der eine Sensor war beim Dragino dabei.
Die anderen Sensoren sind Anlegesensoren von einem Deutschen Hersteller.
Und ich dachte die Fakes Sensoren funktionieren wenn sie alleine am Bus
hängen?
Such mal etwas hier im Forum, da gabe es einen Faden der mich
erschüttert hat.
Die Chips die man jetzt kaufen kann sind praktisch nur noch Fakes - bis
auf wenige Ausnahmen.
Torsten S. schrieb:> Such mal etwas hier im Forum, da gabe es einen Faden der mich> erschüttert hat.
Mich erschüttert eher deine Übersetzung des Worts "Thread"
Moin,
mir hat es keine ruhe gelassen... ESP32 Dev Device, 4.7k
https://lastminuteengineers.com/multiple-ds18b20-esp32-web-server-tutorial/
Den Code kopiert... und selbst in Stern Topologie kommen die Daten bei
zwei Sensoren... ja auch am langen Telefonkabel. IMHO liegt es wie schon
vermutet am timing im Code.
Danke und Grüße
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