www.mikrocontroller.net

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


Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Christian H. (netzwanze) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
DS9503P + BAT54S
Siehe HW Design Example im Datenblatt zum DS2490.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michelle Konzack (Firma: electronica@tdnet) (michellekonzack) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Axel Laufenberg (axel_5)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Michelle Konzack (Firma: electronica@tdnet) (michellekonzack) Benutzerseite
Datum:

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

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

1-Wire Timing- und Leitungslängenprobleme adieu!

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

Grüße
Michelle

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias Larisch (matze88)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.