Forum: Mikrocontroller und Digitale Elektronik 1-wire, onewire - Lesefehler bei längerer Leitung


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Josef S. (spitzlbergerj)


Lesenswert?

Ich habe das Projekt CaravanPi (https://www.caravanpi.de/ oder 
https://github.com/spitzlbergerj/CaravanPi) entwickelt. Dabei verwende 
ich 1-wire für die Temperaturfühler im Kühlschrank und leider habe ich 
damit immer wieder so meine Probleme. Es will einfach nicht stabil 
funktionieren.

Was habe ich gebaut:
- CaravanPi Platine mit drei Kontakten für die 1-wire-Fühler (+3V3, GND 
und GPIO18)
- auf der Platine ist ein PullUp 47k zwischen GPIO 18 und +3V3 verbaut
- Cat-6 Kabel von diesen drei Anschlüssen mit ca. 5 m bis zu einem 
Verteiler
- drei Temperatur Sensoren DS18B20 mit ca. 1 m Kabel bis zum Verteiler
  siehe hierzu auch 
https://github.com/spitzlbergerj/CaravanPi/wiki/Temperatur-Sensoren-installieren 
sowie die Folgeseiten
- Python Skripte zum Verschieben der Daten aus den 
/sys/bus/w1/devices/28-*/w1_slave Dateien in Werte Verzeichnisse

Was passiert:

das läuft mal gut, mal nicht. Eben leider nicht dauerhaft stabil. Ich 
bekomme in den /sys/bus/w1/devices/28-*/w1_slave Dateien seltsame Werte 
wie z.B.
1
50 05 4b 46 7f ff 0c 10 1c : crc=1c YES
2
50 05 4b 46 7f ff 0c 10 1c t=85000

oder auch
1
00 00 00 00 00 00 00 00 00 : crc=00 YES
2
00 00 00 00 00 00 00 00 00 t=0

Ich möchte dem nun endgültig auf die Spur kommen und habe auf meinem 
Testaufbau nachfolgendes ausprobiert:
- einen DS18B20 direkt an die Klemme der CaravanPi Platine

-->   funktioniert einwandfrei


- sehr kurzes Kabel (15 cm) an die Platinenklemmen und Wago Klemmen am 
Ende
- daran 1,2 oder 3 DS18B20

--> 1 Sensor: funktioniert einwandfrei

--> 2 Sensoren: funktionieren einwandfrei

--> 3 Sensoren: alle drei funktionieren nicht mehr oder zwei 
funktionieren und einer liefert 85°C oder …

Ich habe die Sensoren durchgetauscht, statt WAGO Klemmen alles sauber 
verlötet, um Kontaktprobleme auszuschließen usw. Ich kann einfach kein 
Muster des Fehlers entdecken. Und dann funktioniert es mal ein paar 
Stunden und dann wieder nicht.

Hier im Forum hat @Falk B. beim Thema Verkabelung 1-Wire-Netzwerk einen 
Reihenwiderstand erwähnt. Ich bin leider ein Elektronik-Laie und habe 
das daher nicht verstanden. Kann mir das helfen?

Vielen Dank für jede Hilfe. Und jetzt schon Entschuldigung, wenn ich 
trotz bereits intensiver Suche hier die Antworten doch im Forum hätte 
finden können ....

Grüße
Sepp

von EAF (Gast)


Lesenswert?

Josef S. schrieb:
> ein PullUp 47k

Was sagt den die OneWire Doku zu dem Widerstand?

von Hans B. (Gast)


Lesenswert?

>    - auf der Platine ist ein PullUp 47k

Auf der verlinkten Seite steht:
Using w1-gpio on the Raspberry Pi typically needs a 4.7 kΩ pull-up 
resistor

Wert des pullup prüfen!

von Olaf (Gast)


Lesenswert?

> Ich habe das Projekt CaravanPi (https://www.caravanpi.de/ oder
> https://github.com/spitzlbergerj/CaravanPi) entwickelt.

Sag lieber "gebastelt"

> - auf der Platine ist ein PullUp 47k zwischen GPIO 18 und +3V3 verbaut
> - Cat-6 Kabel von diesen drei Anschlüssen mit ca. 5 m bis zu einem
> Verteiler

Du hast ein ungeeignetes hochohmiges Interface in einer besonders fuer
ihre SToerungen bekannte Umgebung entwickelt. Mach es also so es
Autohersteller machen. Entweder dumme Analoguebertragung, oder robuste 
differentielle Datenbusse.

Olaf

von Falk B. (falk)


Lesenswert?

Josef S. schrieb:

> - CaravanPi Platine mit drei Kontakten für die 1-wire-Fühler (+3V3, GND
> und GPIO18)
> - auf der Platine ist ein PullUp 47k zwischen GPIO 18 und +3V3 verbaut

Zu hochohmig. OneWire will so 1-4mA sehen, macht an 3,3V  ca. 1-3,3k.

> - Cat-6 Kabel von diesen drei Anschlüssen mit ca. 5 m bis zu einem
> Verteiler

Naja, kann man machen, dabei muss man aber aufpassen. Für Das 
Datensignal + GND ein verdrilltes Adrenpaar nutzen. Den Schirm an beiden 
Enden der Leitung kurz an GND anschließen.

> - einen DS18B20 direkt an die Klemme der CaravanPi Platine
>
> -->   funktioniert einwandfrei

Schon mal gut, d.h. dein Sensor ist kein Fake ;-)

> - sehr kurzes Kabel (15 cm) an die Platinenklemmen und Wago Klemmen am
> Ende
> - daran 1,2 oder 3 DS18B20

Zeig mal ein Bild davon.

> --> 1 Sensor: funktioniert einwandfrei
>
> --> 2 Sensoren: funktionieren einwandfrei
>
> --> 3 Sensoren: alle drei funktionieren nicht mehr oder zwei
> funktionieren und einer liefert 85°C oder …

Hmm.

Was man noch machen sollte. Wenn man normale IOs von Mikrocontrollern 
für sowas nutzt, kann es passieren, daß die aktive HIGH-LOW Flanke zu 
schnell ist und dann bei längeren Leitungen Signalstörungen entstehen, 
an denen sich die ICs verschlucken. Abhilfe bringt hier ein Widerstand 
von 33-100 Ohm, nah am OneWire Master. Der wirkt als Serienterminirung.

von Josef S. (spitzlbergerj)


Lesenswert?

Hi,
erstmal danke für eure Hinweise. Die arbeite ich jetzt mal ab.

Das mit dem zu großen Widerstand ist natürlich blöd. Da hab ich im 
Platinendesign dann wohl einen Widerstandswert falsch übertragen.

Ich melde mich, wenn ich weiter bin

Viele Grüße

Sepp

von Wolfgang (Gast)


Lesenswert?

Olaf schrieb:
> Mach es also so es Autohersteller machen. Entweder dumme
> Analoguebertragung, oder robuste differentielle Datenbusse.

Die Autohersteller machen da recht wenig. Die bekommen die ganze 
Elektronik von Zulieferern. Für langsame Übertragung wird dort z.B. LIN 
verwendet - weder analog noch differentiell.

von Robert (Gast)


Lesenswert?

und wer braucht so etwas?

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Robert schrieb:
> und wer braucht so etwas?

Du nicht, andere aber schon.

von ...3 (Gast)


Lesenswert?

Wolfgang schrieb:
> Olaf schrieb:
>> Mach es also so es Autohersteller machen. Entweder dumme
>> Analoguebertragung, oder robuste differentielle Datenbusse.
>
> Die Autohersteller machen da recht wenig. Die bekommen die ganze
> Elektronik von Zulieferern. Für langsame Übertragung wird dort z.B. LIN
> verwendet - weder analog noch differentiell.

Kommt drauf an. Heutezutage ist eher PSI5 oder SENT für Sensoren beliebt 
bzw. die erste Wahl, nicht LIN. Differentiell nicht, analog schon eher.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Josef S. schrieb:
> Ich möchte dem nun endgültig auf die Spur kommen und habe auf meinem
> Testaufbau nachfolgendes ausprobiert
Hast du schon mal mit einem Oszilloskop die Signalqualität kontrolliert 
und mit den Anforderungen aus dem Datenblatt verglichen? Wenn die 
nämlich nicht stimmt und/oder Störungen auf dem Signal sind, dann kannst 
du softwaremäßig viel herumfrickeln, es wird trotzdem nicht stabil.

von Peter D. (peda)


Lesenswert?

Josef S. schrieb:
> --> 3 Sensoren: alle drei funktionieren nicht mehr oder zwei
> funktionieren und einer liefert 85°C oder …

Eine Möglichkeit wäre, jedem Sensor sein eigenes 1-Wire zu spendieren, 
wenn man noch 2 Portpins übrig hat.

von Frank K. (fchk)


Lesenswert?

Josef S. schrieb:

> Das mit dem zu großen Widerstand ist natürlich blöd. Da hab ich im
> Platinendesign dann wohl einen Widerstandswert falsch übertragen.

Na ja, die 4.7k Pullup stehen auch im originalen Datenblatt, waren dort 
aber für 5V-Betrieb gedacht.

Was Du auch machen kannst:

https://www.maximintegrated.com/en/products/interface/controllers-expanders/DS2482-800.html

Das ist ein I2C-1wire Master, den Du dan den I2C von Deinem Pi 
anschließt. Der hat 8 einzelne 1wire-Ports. An jeden kannst Du dann 
einen Sensor anschließen.

Vorteil 1: Dadurch, dass nur ein Sensor an einem Port dran ist, weißt Du 
aufgrund der Verkabelung auch gleich, wo der Sensor ist, ohne die ID des 
Bausteins zu kennen.
Vorteil 2: Die Last auf jedem Bus ist kleiner, d.h. das sollte dann auch 
mit längeren Kabeln besser funktionieren.
Vorteil 3: Die AD-Wandlung braucht ja immer einige Zeit. Wenn jeder 
Sensor auf seinem eigenen Bus ist, kannst Du das Abfragen 
paralleliseren, weil sich da nichts gegenseitig stört.

fchk

von Peter D. (peda)


Lesenswert?

Frank K. schrieb:
> Vorteil 3: Die AD-Wandlung braucht ja immer einige Zeit. Wenn jeder
> Sensor auf seinem eigenen Bus ist, kannst Du das Abfragen
> paralleliseren, weil sich da nichts gegenseitig stört.

Schneller wird dadurch nichts, man muß immer die 750ms abwarten.
3 Messungen starten, 750ms warten, 3 Ergebnisse auslesen.
Nur das Auslesen geht einen Tick schneller, da man nicht adressieren 
muß.

von (prx) A. K. (prx)


Lesenswert?

Zu häufige Messung heizt den Sensor.

von Peter D. (peda)


Lesenswert?

(prx) A. K. schrieb:
> Zu häufige Messung heizt den Sensor.

Ich warte daher immer 10s.

von Falk B. (falk)


Lesenswert?

Frank K. schrieb:
> Was Du auch machen kannst:

Man kann (SOLLTE!) auch einfach mal einige Dinge grundlegend richtig 
machen. Dann funktionieren die auch! Da muss man nicht gleich zum 
Workaround oder Overengineering greifen. Nur weil ein Laie etwas beim 
ersten Anlauf versemmelt, muss man nicht Himmel nd Hölle in Bewegung 
setzten, um das Problem zu lösen.

von Falk B. (falk)


Lesenswert?

(prx) A. K. schrieb:
> Zu häufige Messung heizt den Sensor.

Diese ultimativ wichtige Information ist sicher essentiell, um die 
Probleme des OPs zu lösen . . .

Nachts ist es kälter als draußen!

von (prx) A. K. (prx)


Lesenswert?

Falk B. schrieb:
> Diese ultimativ wichtige Information ist sicher essentiell, um die
> Probleme des OPs zu lösen . . .

War eine Reaktion auf die Beiträge direkt davor, nicht auf das Problem 
des Threads. Ansonsten heisst es abwarten bis er den 47K Widerstand 
ersetzt hat.

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Hans B. schrieb:
> typically needs a 4.7 kΩ

komisch, dieses "typical" bezieht sich auf 5V mit 1mA, an 3,3V ist es 
keine schlechte Idee auch die 1mA mindestens beizubehalten.

Erstens muss auch die Kabelkapzität umgeladen werden und sollte nicht zu 
lange dauern um die Flanken nicht zu vermatschen, ergo mehr C mehr 
Strom!
Tau = R x C

Zweitens lassen sich mit mehr Strom besser die Pegel einhalten, ratet 
mal warum die Stromschleife von 20mA am POTS so viele Jahrzehnte gut 
funktionierte.

https://de.wikipedia.org/wiki/Plain_Old_Telephone_Service

Natürlich ist 1A auch keine Lösung, man muss schon die Portleistung 
beachten, ferner ist es sinnvoll CRC zu machen und Fehlertemperaturen 
nicht anzuzeigen, 85°C, 125°C sind Fehlermeldungen, wenn die Temperatur 
stimmt hat man andere Probleme im Kühlschrank oder Caravan.

von (prx) A. K. (prx)


Lesenswert?

Joachim B. schrieb:
> komisch, dieses "typical" bezieht sich auf 5V mit 1mA, an 3,3V ist es
> keine schlechte Idee auch die 1mA mindestens beizubehalten.

Ich hoffe, dass er Widerstände nicht einzeln bestellt. ;-)

von Max M. (Gast)


Lesenswert?

Hans B. schrieb:
> Using w1-gpio on the Raspberry Pi typically needs a 4.7 kΩ pull-up
> resistor

typically = kurze on board PCB Verbindung mit geringer Kapazität.

Da aber hier der IIC mal wieder als Feldbuss vergewaltigt wird:
Pull-ups so klein wie der Raspi noch sicher treiben kann + kleinste 
mögliche Geschwindigkeit auf dem Bus.

von (prx) A. K. (prx)


Lesenswert?

Max M. schrieb:
> typically = kurze on board PCB Verbindung mit geringer Kapazität.

Nicht bei 1-Wire, der wird oft auf längere Distanzen eingesetzt. Ich 
habe bei einer 5V Versorgung 5,1k verwendet, mit zig Metern Kabel. Hätte 
auch weniger sein dürfen, stimmt, funktioniert aber seit bald 2 
Jahrzehnten.

> Da aber hier der IIC mal wieder als Feldbuss vergewaltigt wird

I2C = IIC = TWI = 2-Wire. Hier gehts um 1-Wire. Gut, die Anzahl Kabel 
machts nicht aus, aber I2C ist eigentlich wirklich nur für kurze 
Verbindungen gedacht, so circa geräteintern. 1-Wire darf mehr.

https://www.maximintegrated.com/en/design/technical-documents/tutorials/1/148.html

: Bearbeitet durch User
von S. Landolt (Gast)


Lesenswert?

> Pull-ups so klein wie der Raspi noch sicher treiben kann

Was sagt der Sensor dazu?

von (prx) A. K. (prx)


Lesenswert?

S. Landolt schrieb:
> Was sagt der Sensor dazu?

4mA. Mit sinkendem Strom steigt die Anstiegszeit, aber die ist bei 
1-Wire nicht allzu kritisch.

: Bearbeitet durch User
von PC-Freak (Gast)


Lesenswert?

@Josef

Sind die Sensoren im Parasit-Mode?
Oder mit sep. Spannung (5V)?

Wenn (hoffentlich) mit separater Spannungsversorgung, dann beim ersten 
und beim letzten Sensor in der Kette einen 10 uF Kondi auf +Ub und Gnd 
spendieren.

Ich habe hier ca. 20 Sensoren, und keinerlei Ausfälle.

Im parasite - Mode gibt es hin und wieder Probleme. Und dann entfällt 
der PullUp Widerstand bei 3-Draht.

von (prx) A. K. (prx)


Lesenswert?

PC-Freak schrieb:
> Und dann entfällt der PullUp Widerstand bei 3-Draht.

Autsch! Es entfällt die Umschaltung auf aktiven Pullup während der 
Messung. Der Widerstand muss bleiben.

von Josef S. (spitzlbergerj)


Lesenswert?

Hallo alle,

Ganz herzlichen Dank euch allen für die vielen ernstgemeinten Hinweise. 
Wie schon beschrieben, bin ich eigentlich Elektronik Laie (mit Software 
tu ich mich leichter ;-) ). Daher brauch ich jetzt eine kleine Weile bis 
ich alles nachvollziehen kann.

Inzwischen ist auch klar, dass ich im testaufbau noch einen 4k7 
Widerstand hatte und mich beim übertragen auf den Schaltplan 
verschrieben habe, was zum falschen Widerstand auf der Platine geführt 
hat. Blöd ...

Einige SMD Widerstände in der richtigen Größenordnung kleiner gleich 4k7 
hab ich bestellt, so dass ich den Widerstand austauschen kann. Den Rest 
der Tipps werde ich dann auch abarbeiten.

Vielen Dank nochmal.

Zu euren Fragen:

die Sensoren hängen separat an +3V3, also nicht parasitär. Ich könnte 
auch 5V anlegen.

Oszilloskop habe ich noch nicht angelegt. Damit habe ich aber auch noch 
nie gearbeitet und musste mich deshalb erst einlesen.

Grüße
Sepp

: Bearbeitet durch User
von Mikro 7. (mikro77)


Lesenswert?

Der TE nutzt ja den Kernel Support für 1-wire. Die Implementierung dort 
ist recht stabil (1-wire/DS18b20 sind einige Parameter recht weit 
auslegbar) aber der Zugriff ist nicht gerade komfortabel. Sei`s drum.

Funzt bei mir über 20m Kabel mit mehreren Sensoren (Fake und Echte) mit 
4,7k auf nem RPi Zero (habe alte ISDN Kabel misbraucht). Die Fakes 
liefern gelegentlich (ca 2% der Abfragen) keine gültige Antwort oder 
85°C. -- Bei den 20m Kabel braucht das LH ca 3 bis 4us (was meiner 
Implementierung anfangs Probleme bereitet hatte).

von PC-Freak (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Der Widerstand muss bleiben.

Ich habe seit Jahren folgende Schaltung im Dauerbetrieb:
Link:file:///E:/Denkovi/1/USB%20to%20One%20Wire%20interface%20adaptor,%2 
0converter,%20thermometer.htm

Weder auf dem Board, noch in meiner Verkabelung ist da ein 4,7K als 
PullUp verbaut. Ohne jegliche Aussetzer. Manche Leitungen sind bis 20 M. 
Das Einzige sind die 10 uF Kondis zwischen + und -.

Diesen PullUp braucht er meines Wissens nur, im Parasit-Mode, um sich 
zwischen den Messungen 'aufzuladen'.

Auf der Rasphi-Seite ist einer drin, das stimmt.

von (prx) A. K. (prx)


Lesenswert?

PC-Freak schrieb:
> Diesen PullUp braucht er meines Wissens nur, im Parasit-Mode, um sich
> zwischen den Messungen 'aufzuladen'.

Steuert man den 1-Wire korrekt gemäss Anweisung per Open Drain an, gibt 
es ohne Pullup-Widerstand niemanden auf der Leitung, der sie 
hochzieht. Nicht der µC oder RasPi, nicht der DS18B20. Erklär mir bitte, 
wie das funktionieren soll.

Für die Stromversorgung während der Messung liefert der Pullup zu wenig 
Strom, wenn parasitär betrieben. Dann, und nur in der Messphase, 
betreibt man den Portpin mit aktivem internen Pullup (so der hat - beim 
8051 ist das mangels eines solchen internen Pullups etwas 
komplizierter).

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

PC-Freak schrieb:
> Link:file:///E:/Denkovi/1/USB%20to%20One%20Wire%20interface%20adaptor,%2
> 0converter,%20thermometer.htm

Versuchs nochmal, oder schicke deine E-Disk als Anhang mit. ;-)

von PC-Freak (Gast)


Lesenswert?

Bin grad selbst am scheuen.
auf der Seite ist dies aber so erklärt, wie ich es seit Jahren betreibe
Link:https://www.kompf.de/weather/pionewiremini.html

Text:
Den Datenanschluss DQ des DS1820 verbindet man direkt mit dem Anschluss 
GPIO4 der GPIO-Schnittstelle des Raspberry Pi. GND und VDD liegen am 
Masseanschluss GND. Die parasitäre Stromversorgung bewerkstelligt ein 
Widerstand von 4,7 kΩ zwischen dem 3,3 Volt Anschluss 3V3 und GPIO4.
Aktive Speisung (dreiadriges Kabel)

Ich habe nochmal meinen USB Adapter inspiziert. Ergebniss - keine 4,7K 
für den PullUp. Der Data-Pin geht direkt auf einen DS9503P - Pin 1. Auch 
messtechnisch messe ich hier keine 4,7K. Sonder über 4 MOhm gegen +Ub, 
und auch gegen Masse.

Ich betreibe diese Sensoren bisher nur über diese Denkovi USB Adapter. 
Entweder regelt der DS9503P das, aber auch Denkovi hat nichts zu den 4,7 
K geschrieben. Aus dem Datenblatt habe ich damals nur das wegen 
Parasit-Power gelesen, und weil ich das auf 3-Draht gemacht habe, und 
dann diese Adapter, hatte ich nie den 4,7 K vermisst.

von (prx) A. K. (prx)


Lesenswert?

Du solltest versuchen, das Verfahren zu verstehen, mit dem das 1-Wire 
Protokoll arbeitet. Vorzugsweise direkt beim Erfinder Dallas/Maxim.

von (prx) A. K. (prx)


Lesenswert?

PC-Freak schrieb:
> Ich betreibe diese Sensoren bisher nur über diese Denkovi USB Adapter.

Wenn du den hier meinst, der hat mit dem DS2480B einen spezielles 1-Wire 
Treiber-IC drin, das den Job besser erledigt, als ein Widerstand das 
kann, und damit besonders bei langer Leitung im Vorteil ist:
http://denkovi.com/usb-to-one-wire-interface-adaptor-converter-thermometer

von Joachim B. (jar)


Lesenswert?

PC-Freak schrieb:
> uf der Seite ist dies aber so erklärt

es wird viel geschrieben, auch viel Mist!

Die Erde ist eine Scheibe.
Niemand hat die Absicht eine Mauer zu bauen.
Gott erschuf die Welt in 6 Tage.
Die Welt ist 6000 Jahre alt.

Deswegen unterstütze ich als Quelle eher:
https://www.maximintegrated.com/en/design/technical-documents/tutorials/1/1796.html

von (prx) A. K. (prx)


Lesenswert?

Joachim B. schrieb:
> PC-Freak schrieb:
>> uf der Seite ist dies aber so erklärt
>
> es wird viel geschrieben, auch viel Mist!

Kurz überflogen scheint mit die Seite korrekt zu sein. Die Schaltpläne 
sind allerdings miserabel, weil man bei Leitungskreuzungen raten muss, 
ob verbunden oder nicht.

Hat man allerdings die Grundlagen nicht verstanden, kann man auf die 
Idee kommen, mit "Der Parameter pullup=on ist nur bei parasitärer 
Speisung notwendig" sei der Widerstand gemeint. Tatsächlich aber ist 
damit der für parasitäre Messung nötige aktive Pullup im Pin vom RasPi 
gemeint, den der Kernel-Treiber im Linux während der Messphase 
aktiviert.

: Bearbeitet durch User
von PC-Freak (Gast)


Lesenswert?

Ja das sind mene Adapter,wobei Dein Link
Link:file:///E:/Denkovi/1/USB%20to%20One%20Wire%20interface%20adaptor,%2 
0converter,%20thermometer.htm

48$ kostet.

Und meiner
Link: 
file:///E:/Denkovi/1/USB%20to%20One%20Wire%20interface%20adaptor,%20conv 
erter,%20thermometer.htm

23,40 $ kostet.

Den Unterschied sehe ich jetzt nicht wirklich.

Die Adapter haben auch noch einen zuschaltbaren RC-Filter für lange 
Leitungen, und ESD-Schutz.

Ich kann die Teile nur empfehlen.

von (prx) A. K. (prx)


Lesenswert?

PC-Freak schrieb:
> Den Unterschied sehe ich jetzt nicht wirklich.

Du solltest nochmal ganz tief in dich gehen, und den Unterschied 
zwischen
  file:///E:
und
  http://www.mikrocontroller.net
lernen.

von (prx) A. K. (prx)


Lesenswert?

PC-Freak schrieb:
> Ich kann die Teile nur empfehlen.

Es spricht auch nichts dagegen sie zu verwenden. Besonders, wenn man die 
Arbeitsweise des 1-Wire Busses nicht verstanden hat, sondern das Zeug 
einfach nur verwenden will, ohne sich darüber Gedanken machen zu müssen. 
Das ist völlig OK. Nur sollte man auf solcher Grundlage irgendwann 
aufhören, Leuten zu widersprechen, die sie verstanden haben.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

PC-Freak schrieb:
> Sind die Sensoren im Parasit-Mode?
> Oder mit sep. Spannung (5V)?

Welcher Mode wird bei drei Leitungen wohl verwendet ...

Josef S. schrieb:
> - CaravanPi Platine mit drei Kontakten für die 1-wire-Fühler (+3V3, GND
> und GPIO18)

von (prx) A. K. (prx)


Lesenswert?

Wolfgang schrieb:
> Welcher Mode wird bei drei Leitungen wohl verwendet ...

Mich hatte jemand vor Äonen mit massenhaft Drillingsmessleitung aus dem 
Firmenmüll versorgt und bis heute profitiere ich davon. Aussen Masse und 
innen Signal passt prima zum DS18x20 in TO-92, und erspart Sorgen wegen 
Verpolung. Das kann also täuschen. ;-)

von Klaus R. (klara)


Lesenswert?

Hallo,
wurde der 47K Pullup inzwischen durch Werte wie Falk sie vorgeschlagen 
hatte ersetzt?

Falk B. schrieb:
> Zu hochohmig. OneWire will so 1-4mA sehen, macht an 3,3V  ca. 1-3,3k.

Ich meine, 5 m ist für 1 Wire keine große Entfernung. Es muß aber auch 
nicht mit 100 kHz und höher übertragen werden. Das 1 Sensor und auch 
zwei Sensoren laufen und beim dritten Sensor es unstabil wird, deutet 
auf zu hohe Frequenzen hin.

Eine Regel besagt, halbiert man die Übertragungsrate, so verdoppelt sich 
die Reichweite.

Der Kernpunkt ist die Flankensteilheit, bzw. das Verscheifen des 
Rechtecks, des Signals. Mit der Leitungslänge erhöht sich die zu 
schaltende Kapazität. Entweder geht man dann mit dem Pulup herunter oder 
mit der Frequenz.
mfg Klaus

von (prx) A. K. (prx)


Lesenswert?

Klaus R. schrieb:
> Es muß aber auch nicht mit 100 kHz und höher übertragen werden.

Was bei einem Timeslot von mindestens 60µs pro Bit ohnehin nicht so ganz 
einfach ist. 1-Wire mit I2c verwechselt?

von Manfred (Gast)


Lesenswert?

1-Wire hat so 16 kbps, meine ich mal gelernt zu haben.

(prx) A. K. schrieb:
> Tatsächlich aber ist
> damit der für parasitäre Messung nötige aktive Pullup im Pin vom RasPi
> gemeint, den der Kernel-Treiber im Linux während der Messphase
> aktiviert.

Verstehe ich das richtig: Der Pi soll über seinen internen pull-up am 
DQ-Pin Strom liefern? Die liegen doch so im Bereich einiger 10 kOhm, so 
daß da nur µA geliefert werden könnten. Während der Messung auf Output 
High könnte ich mir ja noch vorstellen, da können dann einige wenige mA 
geliefert werden, die ausreichen müßten.

von (prx) A. K. (prx)


Lesenswert?

Manfred schrieb:
> Der Pi soll über seinen internen pull-up am
> DQ-Pin Strom liefern? Die liegen doch so im Bereich einiger 10 kOhm

Ich schrieb von einem aktiven Pullup. Das ist der obere Transistor des 
CMOS-Ausgangs in Push Pull Konfiguration. Der darf bei 1-Wire nur in der 
Messphase bei parasitärer Versorgung aktiviert sein, um dann den Sensor 
mit ausreichend Strom zu versorgen. In allen anderen Phasen darf er 
nicht durchschalten.

Wenn das GPIO-Modul eines µC eine Open Drain Konfiguration vorsieht, 
kann man die direkt verwenden, wobei dann in der parasitäre Messphase 
auf Push Pull Konfiguration umgeschaltet wird. Ohne Open Drain Option, 
etwa bei AVRs, wird der Pin normalerweise nur zwischen Input und 
Output=0 umgeschaltet. Der Zustand Output=1 darf nur in der parasitären 
Messphase zustande kommen.

: Bearbeitet durch User
von Josef S. (spitzlbergerj)


Lesenswert?

Hallo alle,

ich konnte inzwischen den Widerstand von 47k auf 4k7 tauschen. Beim Cat 
6 Kabel habe ich GRD und Data im verdrillten Paar und den Schirm hinten 
und vorne am GRD. Und nun funktioniert es zuverlässig auch über die 
lange Leitung.

Vielen Dank für eure Hilfe

Viele Grüße

Sepp

von s.c.n.r. (Gast)


Lesenswert?

Josef S. schrieb:
> ich konnte inzwischen den Widerstand von 47k auf 4k7 tauschen. ...
> Und nun funktioniert es zuverlässig auch über die lange Leitung.

Diese verfluchten Datenblätter - müssen die immer unbedingt Recht 
behalten?
(DS18B20 Fig.3)

von Zeno (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Kurz überflogen scheint mit die Seite korrekt zu sein.
Nö ist sie leider nicht, denn dort steht wirklich drin:

PC-Freak schrieb:
> Die parasitäre Stromversorgung bewerkstelligt ein
> Widerstand von 4,7 kΩ zwischen dem 3,3 Volt Anschluss 3V3 und GPIO4.
Der Widerstand ist für die parasitäre Speisung eher unwichtig, und nach 
meinem Empfinden dafür auch etwas zu groß bemessen, zumal er beim RasPi 
an die 3,3V gehen muß (max. Eingangsspannung Pi!).
Die 4,7k gelten für 5V womit bei Low 1mA fließen. Um bei 3,3V auch 1mA 
fließen zu lassen wären demzufolge 3,3k passend.
Der DS1820 ist lt. DBl. 
(https://datasheets.maximintegrated.com/en/ds/DS18S20.pdf) für 4mA Strom 
bei Low ausgelegt. Ich würde deshalb den Strom größer als die 1mA 
wählen. Mit einem Pullup um die 2k liegt man da eigentlich gut, der 
funktioniert bei 5V und 3,3V gleichermaßen gut.
Wie man das mit der parasitären Power richtig macht ist im verlinkten 
Dokument auf S.7 beschrieben.

von (prx) A. K. (prx)


Lesenswert?

Zeno schrieb:
>> Die parasitäre Stromversorgung bewerkstelligt ein
>> Widerstand von 4,7 kΩ zwischen dem 3,3 Volt Anschluss 3V3 und GPIO4.
> Der Widerstand ist für die parasitäre Speisung eher unwichtig,

Der Wert leidlich unkritisch, aber drin sein muss er, und nicht zu 
hochohmig Bei parasitärer Speisung ist dieser Widerstand die einzige 
Spannungsversorgung vom 1-Wire Device. Das braucht dabei zwar nicht viel 
Strom und enthält einen Kondensator, um die 0-Phasen im Protokoll zu 
überbrücken, aber garnix ist auf Dauer zu wenig. Die Länge vom Reset 
schafft er, aber wenns in die Millisekunden geht, gibts hinterher 
frische 85°C. Das ist der Wert nach Powerup vom DS18x20 vor der ersten 
Messung.

> Die 4,7k gelten für 5V womit bei Low 1mA fließen. Um bei 3,3V auch 1mA
> fließen zu lassen wären demzufolge 3,3k passend.

Yep.

: Bearbeitet durch User
von Lutz (Gast)


Lesenswert?

Zeno schrieb:
> PC-Freak schrieb:
>> Die parasitäre Stromversorgung bewerkstelligt ein
>> Widerstand von 4,7 kΩ zwischen dem 3,3 Volt Anschluss 3V3 und GPIO4.
> Der Widerstand ist für die parasitäre Speisung eher unwichtig,

Hmmmmm, wo bekommt das Teil denn seine Spannung her, wenn VCC an GND 
hängt? Etwa dem DQ-Pin? Und der bekommt die Spannung woher???

von (prx) A. K. (prx)


Lesenswert?

Zeno schrieb:
> Die 4,7k gelten für 5V womit bei Low 1mA fließen.

Dürfen tun sie, aber die Frage ist doch, ob sie fliessen müssen.

Wenn ich das Datasheet der DS10x20 richtig verstehe, dann liegt der 
Stromverbrauch ausserhalb der Messphase im einstelligen µA-Bereich. Pro 
Device am Bus.

Die Obergrenze des Widerstands definiert sich neben den Ruheströmen 
wesentlich durch das Timing im low=>high Übergang in Abhängigkeit von 
der Kapazität der Verdrahtung und der Pinkapazität aller Sensoren.

Versteh mich nicht falsch: Weniger tuts auch und ist je nach Umgebung 
durchaus sinnvoll. Aber kritisch dürfte das bei ihm nicht sein. Und es 
gibt auch eine Gegenrechnung, denn je höher der Strom ist, den der 
Sensor in den 0-Phasen vom Protokoll zieht, desto höher ist seine 
Eigenerwärmung. Und zwar näherungsweise quadratisch. Auch der 
Störabstand bei Low-Pegel wird bei hohem Strom schlechter.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Zeno schrieb:
> Wie man das mit der parasitären Power richtig macht ist im verlinkten
> Dokument auf S.7 beschrieben.

Wobei der dort dargestellte externe Pullup-Transistor nur bei µCs wie 
8051 nötig ist. Bei dem können die Ports das nicht selbst.

: Bearbeitet durch User
von Gerhard O. (gerhard_)


Lesenswert?

In der AN4206 gibt es nützliche Ratschläge für die Erstellung eines 
1-Wire Masters:

https://pdfserv.maximintegrated.com/en/an/AN4206.pdf

von s.c.n.r. (Gast)


Lesenswert?

Lutz schrieb:
> Hmmmmm, wo bekommt das Teil denn seine Spannung her, wenn VCC an GND
> hängt? Etwa dem DQ-Pin? Und der bekommt die Spannung woher???

Über die einzigen Leitung, die nicht an Gnd liegt - war jetzt nicht sooh 
schwer.

Und falls die wegen des Datensignals vorübergehend nichts liefert, kann 
der interne Kondensator zeigen, wozu er gut ist.
Einfach mal ins Datenblatt gucken (Figure 3). Es ist immer wieder 
erstaunlich, was man da so findet.

von Zeno (Gast)


Lesenswert?

Lutz schrieb:
> Hmmmmm, wo bekommt das Teil denn seine Spannung her, wenn VCC an GND
> hängt? Etwa dem DQ-Pin? Und der bekommt die Spannung woher???

Was meinst Du wohl warum ich das Datasheet verlinkt habe? Dort ist 
beschrieben wie beim DS1820 die parasitäre Speisung zu machen ist.

Bei den anderen 1-Wire Komponenten fließt, sofern keine DS1820 und 
Strongpullup verbaut sind, natürlich die Speisung über diesen Widerstand 
- geht ja nicht anders. Dennoch ist er für die Speisung erst mal nicht 
essentiell. Ohne Datenverkehr auf DQ dürfte er sogar 0Ohm sein - wird ja 
bei Strongpullup auch so gemacht. Ansonsten darf er so klein gemacht 
werden, daß 4mA nicht überschritten werden, das ist der Wert für den 
Maxim einen LOW-Pegel <=0,4V garantiert. Was der Ausganganstransistor 
des DS1820 wirklich strommäßig aushält, dazu schweigt sich Maxim aus. Im 
Datenblatt steht nur, das der Ausgangsfet ein RDSON von 100Ohm hat, was 
dann einen Strom vom 50mA bedeuten würde. Das wird der IC aber nicht 
aushalten. Die Frage ist ob man ihn mit Pullup 0Ohm überhaupt in den 
Datensendemodus versetzen kann, denn der µC müßte dann ja auch die 
Leitung auf LOW ziehen, was ihn bei Pullup 0Ohm mit ziemlicher 
Sicherheit in die ewigen Jagdgründe schickt.

von Zeno (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Dürfen tun sie, aber die Frage ist doch, ob sie fliessen müssen.
Maxim empfiehlt den Pullup nicht größer als 5k zu machen und die werden 
ihre Gründe dafür haben.

Ich habe derzeit 20 DS1820 im Dauereinsatz und habe da um die 2k Pullup 
eingebaut bei 3,3V.
In dem Netz zur Heizungsüberwachung hängen 10 Sensoren über einen 
DS25482 dort habe ich 1,8k Pullup bei 5V drin, allerdings treten dort 
auch größere Leitungslängen auf und da macht sich ein etwas niedriger 
Widerstand besser.

von (prx) A. K. (prx)


Lesenswert?

Zeno schrieb:
> Ohne Datenverkehr auf DQ dürfte er sogar 0Ohm sein

Im 1-Wire Protokoll ist grundsätzlich vorgesehen, dass Slaves bei 
inaktivem Bus ihrerseits spontan DQ runter ziehen dürfen, um ein 
Ereignis zu signalisieren. Ist aber selten anzutreffen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.