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
> - 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!
> 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
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.
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
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.
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.
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.
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.
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
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ß.
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.
(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!
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.
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.
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. ;-)
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.
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
@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.
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.
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
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).
(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.
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).
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.
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.
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.
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.
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.
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)
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. ;-)
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
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?
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.
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.
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
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)
(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.
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.
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???
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.
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.
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.
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.
(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.
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.