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
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.
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?
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
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
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.
>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
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.
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...
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.