Hallo zusammen, in der Appnote 148 (https://www.maximintegrated.com/en/an148) von Maxim habe ich über zuverlässige große 1-wire-Netzwerke gelesen. Nun ist es gerade der Fall, dass ich hier ein "großes" Netzwerk im Haus installieren und dazu die vorhandene strukturierte Verkabelung (UC1500-Kabel von Draka) verwenden möchte. In die Netzwerkdosen sollen jeweils Temperatursensoren gesteckt werden. Deren Kabelenden laufen im Netzwerkschrank zusammen, wo der 1-wire-Master rein soll. Die Kabel sind geschätzt maximal 25-30m lang und an jedem Ende soll wie oben beschrieben jeweils ein 1-wire-Gerät hängen. Es wird je Sensor 3 Steckverbindungen geben (Sensor -> Dose, Patchfeld -> Patchkabel, Patchkabel -> Master), die die Leitungswerte auch beeinflussen dürften. Um nun so ein geswitchtes Netzwerk, wie in der verlinkten Appnote angesprochen, herzustellen, würde da ein logiclevel Mosfet ausreichen, um die einzelnen Geräte auszuwählen? Grob stelle ich mir das wie im angehängten Schaltplan vor. Dabei sind 1-WIRE-SEL1 / 2 logic high, wenn die jeweilige Leitung gewählt wird. 1-WIRE-OUT ist der 1-wire-Port vom Mikrocontroller. Es könnte jetzt natürlich ein anderes als das ausgewählte Gerät den 1-wire-Port low ziehen, aber in der Regel sind die ja still, sofern sie nicht angesprochen wurden. Viele Grüße Christian
:
Bearbeitet durch User
Hallo! Es gibt so etwas auch als IC, nennt sich Analogschalter oder Analogmultiplexer. z.B.4066, 4051 und viele weitere
:
Bearbeitet durch User
Danke! Der 4051 hört sich gut an. Die Widerstandswerte sind zwar etwas schlechter als beim 4066, dafür braucht der 4051 weniger Platz. Der 4066 wiederum hätte den Vorteil, dass man etwas flexibler ist, falls man doch mal mehrere Sensoren gleichzeitig ansprechen möchte. Wenn man eine Kaskade von Schieberegistern davor setzt, braucht man auch für die Auswahl der Ausgänge nicht so viele Pins am Mikrocontroller.
Warum den 1wire-Bus multiplexen statt einfach mehrere Busse, z.B. mit dem DS2482-800 zu erzeugen? Mir erscheint das zuverlässiger, da 1wire ja doch recht empfindlich bzgl. Timing ist und der Durchgangs-Widerstand durch den Multiplexer typisch im Bereich 100 Ohm liegt - das entspricht nicht gerade wenigen Metern Leitungslänge und dürfte in Verbindung mit den Leitungskapazitäten das Leben nicht gerade einfacher machen.
Das war und ist auch eine Möglichkeit, die ich gedanklich noch durcharbeite. Ob der zusätzliche Widerstand problematisch ist, weiß ich nicht. Ich glaube eher nicht, denn in der oben verlinkten Appnote wird unter "Distributed Impedance Matching" vorgeschlagen, bei einem Bus mit mehreren Abzweigungen an den Beginn jedes Zweiges einen 150 Ohm Widerstand zu hängen, um die Reflektion zu reduzieren. In diesem Fall wäre ein Master mit aktivem Pullup laut der Appnote nicht geeignet. Allerdings schreckt mich das Risiko mit dem DS2482 einen Fehlkauf zu machen doch etwas ab. Der Baustein kostet immerhin fast 10 Euro und ich bräuchte wohl 3 davon. Wenn das dann nicht funktioniert, wäre das ärgerlich. Zumindest für den DS2480B steht in der Appnote, dass man einen R-C-Filter einsetzen soll, wenn die Leitungslänge zwischen 10 und 100m liegt. Ob das auch für den DS2482-800 gilt, konnte ich nicht herausfinden. Der DS2482 hat natürlich noch den Charme, dass er sowohl das Übertragen von ganzen Bytes als auch das Ausführen vom Search-ROM-Befehl vereinfacht und man sich über das Timing keine Gedanken mehr machen muss. Laut Maxim erreicht man wie in Appnote 224 (https://www.maximintegrated.com/en/an244 "Advanced 1-Wire Network Driver") beschrieben maximale Leitungslängen (ok, ich bewege mich mit unter 50m definitiv nicht an den Grenzen). Einen ähnlichen Treiber könnte man aber trotzdem in Kombination mit einem Multiplexer verwenden, falls man die Treiberstufe hinter den Multiplexer legt (dementsprechend mehrfach ausführt - die Bauteile sind ja aber nur Kleinigkeiten). Dadurch sollte nur noch die zu lesende Kurve verfälscht werden, weil die ausgewählte Leitung aktiv hoch oder runter gezogen wird.
Ralf D. schrieb: > und der Durchgangs-Widerstand durch den Multiplexer > typisch im Bereich 100 Ohm liegt Na sorry, vor 100 Jahren vielleicht. Es gibt von Maxim durchaus moderne Multiplexer mit unter 1 ohm Schalterwiderstand. Man muß ja nicht immer den 4066 aus rauskramen. Ralf D. schrieb: > Warum den 1wire-Bus multiplexen statt einfach mehrere Busse, z.B. mit > dem DS2482-800 zu erzeugen? Warum dann nicht gleich - wenn das Protokoll per µC eh in Software erzeugt wird - mehrere Pins des µC verwenden. Mit 3-4 Sensoren pro Pin und 8 Pins sollte das doch machbar sein. Selbst mit einem ATmega32 und 24 Pins verwendet ist man noch günstiger als der DS2482 - wenn man es eh selbst programmieren muß.
Also ich habe hier 15 Sensoren an einem Bus dranhängen. Kein Problem. Warum nicht alles auf einen Pin schalten? Die Sensoren werden per Seriennummer identifiziert und nicht "durchgeschaltet". Einer (Bus) für alle! :-)
Pete K. schrieb: > Warum nicht alles auf einen Pin schalten? Weil viele 30m Kabel schon eine beträchtliche Kapazität darstellen, die ausreichend schnell umgeladen werden muss. > Also ich habe hier 15 Sensoren an einem Bus dranhängen. Kein Problem. Und welche Kapazität stellt deine Verkabelung dar?
@ Wolfgang (Gast) >> Warum nicht alles auf einen Pin schalten? >Weil viele 30m Kabel schon eine beträchtliche Kapazität darstellen, die >ausreichend schnell umgeladen werden muss. Richtig. Aber OneWire ist ebenso wie I2C nicht wirklich für längere Verdrahtung gedacht, auch wenn es bisweilen geht. I2C ist synchron, das kann man langsam takten. OneWire ist wie UART asynchron, das braucht ein definiertes Timing. Ab einer bestimmten Buskapazität, ich glaub offiziell 800pF, ist Feierabend.
Falk B. schrieb: > OneWire ist wie UART asynchron, das braucht ein definiertes Timing. Ab 750m ist aufgrund des Timings Feierabend. Mit passivem Pullup und externem Treibertransistor geht bis 200m. Mit einfachem Portpin sind max 3m empfohlen. Quelle AN148. Ich habe in einer Installation einen recht heterogenen Stern mit so 30-40m Summenlast im Einsatz, mit 5K Pullup und 100 Ohm Serien-Schutzwiderstand am µC. Das Ergebnis ist nicht perfekt, aber brauchbar. 2 DS18x20 sind am längsten Zweig (>20m) in 10 Jahren verreckt.
:
Bearbeitet durch User
Falk B. schrieb: > Ab einer bestimmten Buskapazität, ich glaub > offiziell 800pF, ist Feierabend. Möglicherweise verwechselst du was. Ein parasitärer 1-Wire Slave stellt eine Last von 800pF dar, allerdings nur oberhalb von 2,8V (MicroLAN Design Guide).
:
Bearbeitet durch User
@ A. K. (prx) >> OneWire ist wie UART asynchron, das braucht ein definiertes Timing. >Ab 750m ist aufgrund des Timings Feierabend. ;-) Na da kann man schon ein kleines LANs aufbauen >Mit passivem Pullup und externem Treibertransistor geht bis 200m. Würde ich trotzden nicht machen wollen. Bestenfalls für Hobbykram. >Mit einfachem Portpin sind max 3m empfohlen. Das klingt OK. >Ich habe in einer Installation einen recht heterogenen Stern mit so >30-40m Summenlast im Einsatz, mit 5K Pullup und 100 Ohm >Serien-Schutzwiderstand am µC. Das Ergebnis ist nicht perfekt, aber >brauchbar. 2 DS18x20 sind am längsten Zweig (>20m) in 10 Jahren >verreckt. Das war eher ESD als Buskapazität. Oder ne Einkopplung eines entfernten Blitzeinschlags.
@A. K. (prx) >> Ab einer bestimmten Buskapazität, ich glaub >> offiziell 800pF, ist Feierabend. >Möglicherweise verwechselst du was. Ein parasitärer 1-Wire Slave stellt >eine Last von 800pF dar, Das bezweifle ich mal grundlegend. Selbst bei parasitärer Versorgung hat ein OneWire Device KEINE Ausgangskapazität von 800pF. Bei normaler Versorgung erst recht nicht. Beim DS18B20 steht z.B. Capacitance CIN/OUT 25 pF Das klingt realistisch.
Falk B. schrieb: > Das war eher ESD als Buskapazität. Oder ne Einkopplung eines entfernten > Blitzeinschlags. So habe ich das auch verbucht. In einem Fall hat der zwar noch funktioniert, hat aber eine permanent hohe DC-Last auf die Leitung gelegt.
Falk B. schrieb: > Das bezweifle ich mal grundlegend. Von nix kommt nix. Bei parasitärer Versorgung hängt über eine Diode ein Kondensator an der Datenleitung. Der wird im Datasheet an dieser Stelle nicht berücksichtigt. MicroLAN Design Guide: "In Figure 1, whenever the data line is pulled high by the bus pull-up resistor the diode in the half wave rectifier turns on and charges the internal 800pF capacitor. When it drops below the voltage on the capacitor, the diode is reverse biased, isolating the charge." "However, the 800 pF parasitic power supply capacitance only exists at voltage levels above 2.8V minimum. Ignoring the capacitance of the parasitic power capacitor, the bus pull-up resistor value, together with the cable capacitance and 1-Wire device input capacitance represent the network time constant ?. This is a reasonable omission since parasite capacitance does not become a factor until the bus has already passed the 2.2V logic one threshold." Er spielt also im Leitunsdesign keine Rolle. Aber das ist die m.W. einzige Stelle, wo bei 1-Wire der Wert 800pF vorkommt. Mit 1K Pullup und slewrate controlles 2N7000 Treiber sehen die kein Problem bis 200m aka 10nF.
:
Bearbeitet durch User
Schon klar, das mit der parasitären Versorgung. Ich dachte nur bisher, dass die Entladung des internen Speicherkondensators während einer Bitzeit eher gering ist, sodaß der Nachladevorgang nicht ins Gewicht fällt.
Ist auch so. Aber woanders kannst du m.E. die 800pF nicht gefunden haben. In dem MicroLAN Dings fahren die als Beispiel 100m / 5nF, mit 1K pullup und slewrate controlled 2N7000 Treibertransistor als pulldown am µC.
:
Bearbeitet durch User
Christian R. schrieb: > Um nun so ein geswitchtes Netzwerk, wie in der verlinkten Appnote > angesprochen, herzustellen, würde da ein logiclevel Mosfet ausreichen, > um die einzelnen Geräte auszuwählen? Wenn du die Gates auf 10V legst ja. Andernfalls wird es bei 0=>1 oberhalb von 3-4V etwas unschön, weil der Transistor mit steigendem Leitungspegel den Kanal zu macht und die Leitung am µC dann floatet. Du solltest dafür den Pullup-R aufteilen. Einer niederohmig so wie gezeigt, der andere hochohmiger am µC Pin.
:
Bearbeitet durch User
Da ich sowieso 8 Adern (plus GND) zur Verfügung habe, werde ich wohl keine parasitäre Versorgung der Sensoren machen. Dadurch wird die Kapazität des Busses nicht zusätzlich durch die Wiederaufladung beeinträchtigt. Wenn ich die AN148 richtig verstanden habe, ist bei dem sternförmigen Aufbau nicht die Kapazität der Leitung, sondern die Reflektion das Hauptproblem. Deshalb wird dort vorgeschlagen, den Bus zu switchen. Mein Master soll so ausgelegt sein, dass ich bis zu 16 Sensoren anschließen kann. Aufgrund der Leitungslänge werde ich ein aktives pullup und pulldown einsetzen. Das bedeutet, dass pro Bus / Sensor drei I/Os benötigt werden. Bei 16 Sensoren kommt da schon einiges zusammen. Ich hätte auch gerne die Möglichkeit, alle Sensoren gleichzeitig anzusprechen (Temperaturkonversion starten). Deshalb kann ich eigentlich keinen Multiplexer einsetzen. Eine halbwegs realistische Option wäre wohl, Analogschalter für die Steuerleitungen vom aktiven pullup / pulldown einzusetzen. R_on wäre in diesem Fall egal, weil sowieso ein 4k7 Vorwiderstand vor den Treiber kommt. Man muss den Widerstand dann ja nur um R_on reduzieren. Um die Pins für die Auswahl der Schalter zu sparen, könnte man ein Schieberegister einsetzen (sonst bräuchte man die Analogschalter auch gar nicht, weil man die Leitungen dann auch direkt hätte schalten können). Bleiben also 16 Eingänge für die Leserichtung, zwei Ausgänge für die Steuerleitung vom pullup / pulldown und drei Ausgänge für die Schieberegisterkaskade. Mit 21 I/Os für das Bussystem kommt man also hin. Der Mikrocontroller steht natürlich nicht alleine da, deshalb kommen noch Leitungen für UART oder I2C dazu.
Eine Möglichkeit, deine 8 Adern sinnvoll zu nutzen wäre, wenn du 1-Wire in einem Kabel jeweils zu dem W1 Slave hin- und zurückführst. Dann brauchst du u.U. keine Switches oder Ähnliches. Dadurch bekommst du am Ende zwar die doppelte Buslänge, kannst dir aber eine zentrale Kopfstation bauen, weil das Ganze kabelseitig/in der Wand wie ein Stern aussieht, die Verdrahtung aber ein Bus ist. Mit 4 Doppeladern/Netzwerkkabel geht das ganz gut: 1DA 1-Wire+GND hin, 1DA 1-Wire+GND zurück, 1DA 5V Spannungsversorgung. Du hättest sogar noch 1 DA frei, z.B. für 12V. Nachteil: Du hast die doppelte Buslänge und "verschwendest" viele Adern für einen Bus, der dem Namen nach nur eine braucht. Vorteile: A) Du kannst an der "Kopfstation" so viele Busmaster hinhängen, wie du willst - der Bus kann prinzipiell an jeder Stelle in mehrere Segmente aufgeteilt werden. B) Du hast einen "echten" Bus. Also genau das, was man braucht, um maximale Reichweite zu erzielen. Ich habe so ein System mit über 300m Buslänge / 150m Kabellänge und >30 Slaves am Laufen . Bis 350m lief alles mit meinem USB-Busmaster störungsfrei (0 "Error"s im OWFS). Aktuell brauch spezielle Timings, der Bus ist derzeit ca. 470m lang. Läuft zwar, ist aber nicht mehr Störungsfrei (ein paar hundert "Error"s im OWFS pro Monat). Insofern werde ich da demnächst mindestens einen zusätzlichen Busmaster installieren müssen.
LOL schrieb: > Eine Möglichkeit, deine 8 Adern sinnvoll zu nutzen wäre, wenn du 1-Wire > in einem Kabel jeweils zu dem W1 Slave hin- und zurückführst. Dann > brauchst du u.U. keine Switches oder Ähnliches. Das ist eine gute Idee, um die Komplexität des Masters zu reduzieren. Am Donnerstag werden die Leitungen vermessen und dann weiß ich auch, wie lang sie genau sind. Dann könnte ich immer noch überlegen, wie viele Einzelbusse sinnvoll sind. Denn bei 16 Leitungen mit im Schnitt sagen wir mal 15m Länge (ist wahrscheinlich noch zu wenig), wären das auch schon 465m Leitungslänge. Damit ist man schon gefährlich nahe an der laut Maxim realistisch erreichbaren Obergrenze von 500m. Auf vier Busse aufgeteilt wären da dann aber sicherlich keine Probleme zu erwarten. Dann kann ich mir die Komplexität von Analogschalter + Schieberegister sparen, die sich ja auch auf die Software niederschlägt.
:
Bearbeitet durch User
Christian R. schrieb: > Das ist eine gute Idee, um die Komplexität des Masters zu reduzieren. Achje. Dann kannst Du aber auch gleich eine RS485 in Sterntopologie machen. Die kannst Du dann beliebig langsam fahren und hast keine Probleme mit Reflexionen. Und brauchst nur 2 Leiterpaare (D-, D+, GND, 5V-24V), kannst also auf den anderen 2 Leiterpaaren noch LAN machen.
Timm T. schrieb: > Achje. Dann kannst Du aber auch gleich eine RS485 in Sterntopologie > machen. Was ist an dem Ansatz denn verkehrt, vier Busse mit einem Mikrocontroller zu betreiben? RS485 verträgt sich mit den 1-wire-Sensoren nicht so gut ;-)
Christian R. schrieb: > Was ist an dem Ansatz denn verkehrt, vier Busse mit einem > Mikrocontroller zu betreiben? Nichts. Hab ich ja oben vorgeschlagen. Es ging aber gerade darum, den Bus über die Cat-Kabel durchzuschleifen, also immer hin und zurück, plus die Stromversorgung dann 3 Leiterpaare. Unter 1-wire stell ich mir was anderes vor.
Wahrscheinlich werde ich jetzt folgende Komponenten wählen: - ATMega1284P - 3 Schieberegister (74HC4094) von NXP - 10 Quad-Analogschalter (74HC4066) von NXP - Microchip ENC424J600 Ethernetcontroller Vom ATMega1284P sind bis auf einen Pin bei 20 1-wire-Bussen alle Pins belegt. Der eine Pin kann dann noch für eine Statusausgabe mittels LED oder so verwendet werden. Die JTAG-Schnittstelle ist in dem Fall nur nutzbar, wenn man die letzten vier 1-wire-Busse nicht nutzt. Der Vorteil gegenüber einer "Schleifenverdrahtung" ist, dass die Leitungslänge nicht so groß wird. Vor allem bei den entfernteren Geräten wären sehr viele Steckverbindungen dazwischen (bei 4 in Reihe wären es schon 8 Steckverbindungen). Wenn jeweils nur ein Sensor an einem Bus hängt, kann man den 1-wire-Bus ohne ROM-Adressen betreiben. Außerdem hat man die Möglichkeit, Multicasts zu senden (z. B. Alarm Search oder Convert T). Die Analogschalter sollen dann, wie in einem meiner letzten Beiträge beschrieben, für die Schaltung der aktiven Pullups / Pulldowns verwendet werden. Die Sense-Leitungen gehen direkt auf einen Eingang des µC. Gegen Multiplexer habe ich mich entschieden, weil damit die Multicast-Option wegfiele. Ich hoffe, dass der ATMega1284P leistungsfähig genug ist, um sowohl die 1-wire-Busse als auch die Ethernet-Schnittstelle bedienen zu können. Vielleicht kann da jemand kompetenteres als ich eine Einschätzung zu abgeben. Wenn das zu eng werden sollte, würde ich einen weiteren Mikrocontroller nur für die Netzwerkschnittstelle verwenden.
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.