Moin, ich möchte gern genau das tun, was man nicht soll: Nämlich ein 1-Wire Stern-Netzwerk aufbauen. Und zwar sollen bis zu 8 DS1820 (Temperatursensor) an einen CPU-Pin angeschlossen werden. Diese Sensoren werden in allen Richtungen im Raum verteilt, mit Kabellängen bis zu etwa 10 m. Eine lineare Topologie kommt leider nicht in Frage, da jeder Sensor einzeln jederzeit in seiner Position verändert werden können soll. Wenn man hier schaut: http://www.maximintegrated.com/app-notes/index.mvp/id/148 gibt es mehrere Möglichkeiten. Lineare Topologie fällt wie gesagt aus. Umschaltung der Sensoren über Multiplexer (somit hätte man 8 einzelne Stichleitungen) wäre ja ganz toll, jedoch ist dann der Vorteil, dass man nur einen CPU-Pin braucht, dahin. Weiterhin gibt es noch Schaltungen mit aktivem Pull Up oder Down, doch auch dafür benötigt man wieder zusätzliche Pins... Wie sind eure Erfahrungen? Könnte es klappen, bis zu 8 Sensoren mit verschiedenen Kabellängen bis zu 10 m sternförmig an die CPU anzuschließen? Wenn die Reflexionen zu stark sind, würde es reichen, mit der Frequenz runter zu gehen? Weiterhin läuft meine CPU nur auf 3,3 V. Reicht zwar aus, aber 5 V wäre sicherlich störungssicherer. Könnte man da eine Art bidirektionalen Leitungstreiber verwenden (z.B. NXP P82B96)? Achso, die Parasite Power Funktion möchte ich nicht nutzen, sondern die Betriebsspannung separat an die Sensoren legen. Das sollte ja die Probleme schon etwas eindämmen. Mir geht es nur darum, möglichst keine weiteren CPU-Pins zu verbrauchen. Danke für eure Tipps!
Wenn du den Leitungen zu den DS1820 eine Ader extra spendierst, dann könntest du die Versorgungsleitungen sternförmig anschließen und die Datenleitung zu jedem Sensor hin- und zurückführen und am Knotenpunkt von einem Sensor zu nächsten weiterreichen.
Hei, gibts nicht auch einen 1Wire Masterbaustein, an den man mehrere 1Wire Busse hängen kann? Grüße, Tom
Leider nein, bzw. konnte ich noch nichts finden. Ein einfacher Leitungstreiber (wie der P82B96 für I2C) wäre ja schon mal eine Verbesserung... Gute Idee, Konrad! Aber wollen wir mal abwarten, ob noch jemand andere Tipps hat.
Probier es aus - die Chancen stehen nicht schlecht. Ein Stern mit 4 Strahlen zwischen 2 und zig Metern funktioniert jedenfalls auch.
Robert S. schrieb: > Wenn die Reflexionen zu stark sind, würde es reichen, mit der Frequenz > runter zu gehen? Nein, denn es ist die Flanke, die zählt, nicht die Frequenz. Die positive Flanke schleppt sich mit steigender Länge ohnehin dahin. Die negative Flanke kannst du mit einem Serienwiderstand von 100 Ohm am Ausgang vom Controller-Pin drosseln, wenn dieser Ausgang recht stromstark ist (z.B. AVR). Der Widerstand wirkt nebenbei auch als Schutzwiderstand.
:
Bearbeitet durch User
OK, das sind alles schon mal gute Hinweise! Maxim schlägt ja auch vor, an jedem Slave 150 Ohm vorzusehen, wenn man "Stichleitungen" von einem Bus abführt. Trotzdem macht es mir ein wenig Angst, den CPU-Pin einfach so nach draußen zu führen. Klar, die 100 Ohm wären dazwischen und natürlich noch ein Ferrit, eine TVS-Diode... Aber ein richtiger Leitungstreiber wäre schon toll :) Die CPU ist übrigens ein STM32.
:
Bearbeitet durch User
Robert S. schrieb: > Moin, > > ich möchte gern genau das tun, was man nicht soll: Nämlich ein 1-Wire > Stern-Netzwerk aufbauen. Lass es bleiben. Ich hab´s gemacht. Und würde es nicht wieder tun. Du brauchst einen DS2482-800. Wie für dich gemacht. Und wenn du ganz fleißig sein willst, spendierst du noch eine galvanische Trennung mit einem ADUM und ESD-Schutz mit Zenerdioden. µC-Pin würde ich auch nicht so direkt nach außen führen. Entweder als Eingang mit Schutzbeschaltung davor oder als Ausgang mit Treiber (d.h. Endstufe). Alles andere ist Ärger mit Ansage. Aber mit dem DS2482-800 sollte dieses Problem aus der Welt sein. Max
Mmh, nicht schlecht! Allerdings bin ich dann bei 5 Leitungen: SCL, SDA und ADD0-2. Und ich müsste meinen Sourcecode auf I2C umbasteln. Dann doch lieber direkt das 1-Wire muxen mit 74HC4051 oder??? Wären nur 4 Leitungen.
Robert S. schrieb: > Allerdings bin ich dann bei 5 Leitungen: SCL, SDA und ADD0-2. Nur SCL und SDA. Die ADDs sind statisch, zur Definition der I2C-Adresse, wenn mehrere I2C Bausteine am Bus sind.
Habe auch getan was man nicht soll: einen bunten Mix aus 12 Stück DS18B20/DS18S20 mal als Stern und mal mehrere hintereinander. Der weiteste ist rund 50m entfernt, der kürzeste auf der Platine. Alle mit Parasite Power versorgt weil es so schön einfach und adernsparend ist. Angesteuert wird alles vom AVR mit 5V und läuft seit vielen Jahren problemlos. Freilich kommt es ab und an zu Fehlern. Deswegen ist CRC- und 85.0 Grad Erkennung Pflicht. Bei einem Fehler einfach eine neue Messung starten. Den Pullup habe ich auf 2k2 verringert sonst häufen sich die Fehler auf den weiter entfernteren Sensoren. Mit dem genauen Timing auf dem W1 Bus steht und fällt alles.
A. K. schrieb: > Die positive Flanke schleppt sich mit steigender Länge ohnehin dahin. Das könnte man ihnen mit einer KSQ an Stelle des üblichen Widerstandes abgewöhnen.
> Nur SCL und SDA. Die ADDs sind statisch, zur Definition der I2C-Adresse, > wenn mehrere I2C Bausteine am Bus sind. Achso! Da sieht man doch gleich, dass mir für I2C doch einige Grundlagen fehlen... Aber das scheint ja echt ein toller Chip zu sein. Werde mir den mal besorgen und testen. Ich danke euch allen für die super Tipps und Erfahrungen!
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.