OneWire mit vielen Sensoren

Hallo

Mein Arduino Uno liest Temperatur Sensoren DS18B20 aus. Die Sensoren sie im "Normal power mode" angeschlossen. So wie hier: http://www.tweaking4all.com/hardware/arduino/arduino-ds18b20-temperature-sensor/

Das funktioniert alles wunderbar. Es laufen aktuell 15 Sensoren, jeweils mit Leitungslängen von mehreren Metern. Nun wollte ich einen weiteren anschliessen, welcher eine Leitungslänge vom fast 10 Meter hat. Dann passiert es: Die sensoren können nicht mehr ausgelesen werden. Entferne ich einen anderen Sensor, dann ist alles io. Ich vermute das die Leistung am 5V Port nicht für soviel Sensoren reicht.

Wie soll ich das lösen: 5V Versorgung mit mehr Leistung oder gibt es die Möglichkeit den 4,7 kOhm Widerstand zu verändern?

lg

Hängen alle am gleichen Arduinopin? Stern oder Bus Topologie?

Verteil sie mal auf mehrere Pins. Und jeweils nur ein Pullup pro Bus

Ja, sind alle am Pin2 angeschlossen und im Stern verkabelt. Für die Verteilung auf mehrere Pins muss ich vermutlich eine grösser Änderung am Code vornehmen. Werde das mal testen.

Danke für deinen Hinweis.

Mach erstmal den Pullup kleiner. So 3k3 zum Test.

Ok, das klingt nach weniger Aufwand. Werde das nächstens mal testen.

Was ich immer schon wissen wollte: kann ein falsch dimensionierter Pullup zu Schäden am Arduino oder an den Senoren führen? Gibt es eine Berechnungsgrundlage dafür?

lg

Naja, beim arduino kennen wir den maximalen Ausgangsstrom, also ist der Widerstand durchaus nach unten limitiert. Die Sensoren müssen ja auch noch den Pegel nach unten ziehen, aber da hab ich (zumindest auf die Schnelle) nix im Datenblatt gesehen was den Strom angeht. Man spricht nur von "ca. 5 kOhm".

heisst das, mit einem 3.3k Widerstand gehe ich ein Risiko ein, vorallem wenn ich mal ein paar Sensoren abklemme?

Nö, macht keinen Unterschied wieviele Sensoren am Bus hängen. Spricht ja eh immer nur einer auf dem Bus.

Bei 3-Draht Anschluss werden die Sensoren ja eh nicht über den Widerstand aufgeladen, somit sollte es egal sein. Hauptsache an beiden Enden der Datenleitung liegt genug Spannung an, um als HIGH erkannt zu werden. Wenn der Widerstand zu klein ist, fliesst beim Sinken evtl. zuviel Strom, ich weiss jetzt nicht auswendig, was der DS18B20 da abkann. Steht aber im Datenblatt.

Ich habe mir das Datasheet mal genauer angesehen (DS18B20.pdf)

Bin aber nicht viel schlauer geworden. Muss gestehen, dass ich mit Elektronik nicht sehr tief vertraut bin.

Im Datasheet wird aber ebenfalls auf einen 4.7k Ohm Widerstand hingewiesen.

Bin jetzt verunsichert, ob ich den Test mit dem 3.3k Widerstand wagen soll (will meine Komponenten lieber nicht zerstören).

lg

Kaputt sollte nichts gehen, aber bringen wird es auch nichts.

Versuch macht klug.

Ich habe das Problem mittlerweile gelöst: Aufteilung in 2 Busse (Pins) mit je einem 4.7k Pullup. Das wird wohl für mind. 10 weitere Sensoren reichen.

Danke für eure Tipps.

lg

adinist: Was ich immer schon wissen wollte: kann ein falsch dimensionierter Pullup zu Schäden am Arduino oder an den Senoren führen? Gibt es eine Berechnungsgrundlage dafür?

Schäden sind nur bei extremer Fehldimensionierung (oder Kurzschluß) zu erwarten, vorher wird einfach der erforderliche Pegel für LOW nicht mehr erreicht.

Zur Berechnung des minimal zulässigen Pullups die Versorgungsspannung durch den niedrigsten "Sink Current" aller angeschlossenen Slaves (hier: min. 4mA) teilen, wäre also bei 5V ca. 1,2k.