Forum: Mikrocontroller und Digitale Elektronik 1-Wire über lange Leitung - Entkoppeln?


von Sven (Gast)


Lesenswert?

Hallo,

ich betreibe DS1820 Temperatursensoren an einem AVR, funktioniert 
problemlos.

Was aber passiert, wenn ich längere Leitungen verwende? Immerhin dürfen 
an einem Bus ja dutzende Sensoren hängen, so dass eine beträchtliche 
Kabellänge zusammenkommen kann. In meinem konkreten Fall geht es zwar 
nur um 2 Sensoren am Ende einer 20m-Leitung, trotzdem hab ich ein 
mulmiges Gefühl.

Darf ich diesen 20m langen 1-Wire Bus direkt mit einem AVR-Pin 
verbinden? Ich habe die AVR's in der Vergangenheit als recht empfindlich 
gegenüber Einstreuungen an den Portpins kennengelernt. Ein zu langer 
oder nicht entstörter Portpin, und schon gibts Resets beim Einschalten 
der Neonröhren. Zwar hat der 20m-Bus bei meinen Experimenten bisher 
funktioniert, aber das muss ja noch nichts heissen.

1-Wire ist bidirektional, mit Optokopplern wirds also schon etwas 
schwieriger. Man würde wohl einen weiteren Portpin zum Schalten der 
Übertragungsrichtung benötigen. Und das ganze bei Signalen im 
Mikrosekundenbereich.

Wie macht ihr das bei langen Busleitungen? Einfach direkt ranhängen, 
oder sind Entstörmassnahmen anzuraten?

Danke & Gruß Sven

von (prx) A. K. (prx)


Lesenswert?

Es gibt bei Maxim/Dallas eine Application Note, die sich ausgiebig mit 
dem Thema langer 1-Wire Busse befasst.

20m sind da aber eher als kurz anzusehen. Sauberes Timing vorausgesetzt 
geht das problemlos direkt am Pin. Bischen Schutzschaltung für den Pin 
ist aber sicher nicht verkehrt, sonst ist das nächste Gewitter 
vielleicht auch das letzte.

Wenn mal eine Störung reinrutscht ist das dank CRC nicht unbedingt ein 
Problem. Wenn die dir allerdings den Controller resettet, dann hast du 
vielleicht am Controller selbst was verkehrt gemacht.

von Sven (Gast)


Lesenswert?

OK, danke.
Timing ist sauber innerhalb der Spec, dementsprechend sind manche Pulse 
nur ca. 1.5us lang.
CRC-Checksumme prüfe ich auch.

Aber wie soll das "Bischen Schutzschaltung" aussehen? Bei Eingangspins 
ein RC-Glied ist klar. Aber bei einem bidirektionalen Pin?? Dann müsste 
der AVR ja ständig den C umladen. Und durch den Serienwiderstand wird 
der Bus nicht mehr vollständig auf Masse gezogen. Gibt's dadurch nicht 
Probleme?
Oder ist ein RC hier eh fehl am Platz?

von Christian H. (netzwanze) Benutzerseite


Angehängte Dateien:

Lesenswert?

DS9503P + BAT54S
Siehe HW Design Example im Datenblatt zum DS2490.

von (prx) A. K. (prx)


Lesenswert?

Bei mir: Schottky-Dioden als externe Schutzdioden und Serienwiderstand 
100(?) Ohm. Der Serienwiderstand dämpft dabei auch die fallende Flanke, 
die sonst bei direkter Ansteuerung durch einen Controller recht kräftig 
ausfällt. Maxims Steuerchips enthalten bereits eine Slewrate-Control.

PS: Die AN: http://www.maxim-ic.com/appnotes.cfm/an_pk/148

von Michelle K. (Firma: electronica@tdnet) (michellekonzack) Benutzerseite


Lesenswert?

Sven schrieb:
> Aber wie soll das "Bischen Schutzschaltung" aussehen? Bei Eingangspins
> ein RC-Glied ist klar. Aber bei einem bidirektionalen Pin?? Dann müsste
> der AVR ja ständig den C umladen. Und durch den Serienwiderstand wird
> der Bus nicht mehr vollständig auf Masse gezogen. Gibt's dadurch nicht
> Probleme?
> Oder ist ein RC hier eh fehl am Platz?

Also der 1-Wire Pin des AVR sollte bereits alles mitbringen inclusive 
des Schutzes.

Wie schon erwähnt, solltest Du bei http://www.maxim-ic.com/ Dir mal das 
1-Wire "User Guide" und die "Application Notes" ansehen...

Das teht WIRKLICH ALLES drin, was Du wissen mußt.

Grüße
Michelle

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Michelle Konzack schrieb:
> Also der 1-Wire Pin des AVR sollte bereits alles mitbringen inclusive
> des Schutzes.
Gibt es denn AVRs mit Hardware-1-Wire?
Sind mir nicht bekannt. Ich kenne nur das softwaremäßige Gewackel an 
einem Port-Pin.

von Axel L. (axel_5)


Lesenswert?

>Timing ist sauber innerhalb der Spec, dementsprechend sind manche Pulse
>nur ca. 1.5us lang.

Wenn Du das mit einem AVR machst, kannst Du dieses Timing ja 
kontrollieren und länger machen.

Von den 1,5us kommt u. U. nicht mehr so wirklich viel an und laut Spec. 
kannst Du das bis zu 10 us lang machen.

Gruss
Axel

von (prx) A. K. (prx)


Lesenswert?

Axel Laufenberg schrieb:

> Von den 1,5us kommt u. U. nicht mehr so wirklich viel an und laut Spec.
> kannst Du das bis zu 10 us lang machen.

Obacht! Von der fallenden Flanke (AVR@5V: ~25 Ohm) kommt deutlich mehr 
an als von der steigenden Flanke (Widerstand 4K7). Bei 10µs low kann es 
bei langer Leitung und dem üblichen passiven Pullup u.U passieren, dass 
die zum frühestmöglichen Samplepunkt noch nicht wieder oben ist.

von Sven (Gast)


Lesenswert?

Danke für Eure Hilfe.
Die einfache Beschaltung mit Dioden und Serienwiderstand werde ich mal 
probieren.
Eine Verlängerung der Pulszeiten auf bis zu 10us ist aufgrund meiner 
Interrupt-Architektur kaum möglich (musste schon kämpfen, um auf eine 
Länge von 1.5us zu kommen). Sonst würde mein Programmtiming 
durcheinanderkommen.
Von einem Hardware-1-Wire-Pin am AVR mit spezieller Beschaltung hab ich 
noch nichts gehört...

von Michelle K. (Firma: electronica@tdnet) (michellekonzack) Benutzerseite


Lesenswert?

Aber der AVR hat I²C und wie währe es dann damit:

http://para.maxim-ic.com/en/search.mvp?fam=1wire&tree=master

1-Wire Timing- und Leitungslängenprobleme adieu!

Der DS2482-101 oder DS2482-100 sollten die richtigen für Dich sein...

Grüße
Michelle

von (prx) A. K. (prx)


Lesenswert?

Sachte. Wie ich schon schrieb: 20m ist nicht viel und mühelos ohne 
speziellem Treiber machbar. Ich habe das in einer Installation mit wohl 
ungefähr 30m grösster Länge (plus 2 bis 5m lange Seitenäste) über 
mehrere recht verschiedene Sorten Kabel laufen. Direkt am AVR, auf Basis 
von PeDas Code, leicht korrigiert.

von Matthias L. (matze88)


Lesenswert?

Ich kann A.K. nur zustimmen, habe ebenfalls seit etwa 2 Jahren nahezu 
problemlos (es gab wohl ca. 2 Resets in der Zeit) ein Thermometer hier 
laufen - Der 1w Bus ist insgesamt sicherlich 30m lang und geht dabei 
über Telefonkabel in der Wand. Nach 10 m kommt ein Slave an ner 4m 
Stichleitung, der 2. Slave hängt direkt am Ende der 30 m.

Beschaltung am AVR: Pullup 1k? und ein 100R Serienwiderstand soweit ich 
weiß. Ist aber schon etwas länger her.

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.