Using the 1 WIRE protocol/de

Aus MCS Wiki AVR
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Übersicht

Das 1-Wire-Protokoll war eine Erfindung von Dallas Semiconductor (heute Maxim Integrated Products). Es braucht nur eine Leitung für eine 2-Wege-Kommunikation. Natürlich wird noch eine Versorgung und Ground benötigt.

 

Dieser Beitrag wurde von Göte Haluza geschrieben. Er testete die neuen 1-Wire-Suchroutinen beim Bau einer Wetterstation.

 

Dallas Semiconductor (DS) 1-wire. Dies ist eine Kurzbeschreibung des 1-Wire-Busses und dessen Umsetzung in Bascom. Für detailliertere Informationen über 1-Wire besuchen Sie bitte www.maxim-ic.com. Durch Bascom wird 1-wire einfach. Dieser Text beschreibt den Zugang zum Thema aus der Sicht des Bascom-Nutzers.

   

1-Wire-Net ist ein serielles Kommunikationsprotokoll, welches von DS-Geräten benutzt wird. Der Bus kann auf 2 Arten implementiert werden:

   

Mit 2 Leitungen. Dann wird DQ und Ground benutzt. Die 5V-Versorgung erfolgt mit einem Pullup-Widerstand über die DQ-Leitung und lädt einen Kondensator im DS-Baustein. Der Kondensator versorgt das Bauteil während der Kommunikation, wenn die Datenleitung für kurze Pulse auf Ground liegt. Dieser Bus wird 1-Wire genannt.

 

 

Mit 3 Leitungen, wenn Vdd des Bauteils mit +5V versorgt wird und DQ und GND wie oben. Dieser Bus wird 2-Wire genannt.

 

Man sieht, daß die Ground-Leitung von DS nicht mitgezählt wird. Trotzdem benutzen wir die DS-Bezeichnungen weiterhin.

 

Wie es funktioniert.(1-wire)

Der normale Zustand des Busses ist DQ = High. Über DQ wird das Bauteil versorgt und kann seine Aufgabe erfüllen, für die es gebaut wurde.

 

Wenn der Host (Ihr Mikrocontroller(µC) eine Kommunikation starten will, muß er ein Reset-Kommando ausgeben. Das ist eine einfache elektrische Funktion,die die DQ-Leitung für eine Zeit auf Low setzt(480µS beim original DS 1-wire-Bus). Das bringt die DS-Bauteile in Reset-Modus, woraufhin diese einen Präsenz-Puls senden und danach in Bereitschaft gehen.

 

Der Präsenz-Puls ist einfach ein Aktives Low, dieses mal von den Busteilnehmern ausgelöst.

 

Jetzt weiß der Host noch nicht, was am Bus teilnimmt, er weiß nur, daß mindestens 1 Teilnehmer angeschlossen ist.

 

Die gesamte Kommunikation am 1-Wire-bus geht vom Host aus und geschieht über Time-Slots, zeitabhängige aktiv-Low Zustände an der normalerweise auf High liegenden DQ-Leitung. Die Länge der Pulse wird vom Teilnehmer bestimmt, der gerade Daten über den Bus sendet. Während der Low-Pulse wird der DS-Teilnehmer aus dem internen Kondensator versorgt.

 

 

Wie arbeitet man mit dem 1-wire-bus

Nach dem Reset kann auf den Bus geschrieben oder gelesen werden. Wenn nur 1 Sensor angeschlossen ist, oder wenn alle Sensoren gemeinsam angesprochen werden sollen, kann mit dem Kommanso "Skip Rom" begonnen werden. Das heißt: Ignoriere die IDs der Teilnehmer, überspringe diesen Teil der Kommunikation.

 

Ein 1-wire-Reset bringt alle Teilnehmer am Bus in den Status der Bereitschaft. Wenn nur ein Teilnehmer adressiert wird, gibt es von den restlichen keine Aktivität bis nicht ein neuer Reset erfolgt ist.

 

Diese Beschreibung geht nicht auf die Bedeutung der Kommandos ein, die sind meist selbsterklärend. Der Mikrocontroller schreibt Kommandos auf den Bus und liest danach die Antwort ein. Die Kommandos sind abhängig von den Bausteinen, die benutzt werden und was man damit erreichen will. Jeder DS-Baustein hat ein Datenblatt, welches man z.B. unter http://www.dalsemi.com/datasheets/pdfindex.htmlfinden kann. Darin kann man alles über die jeweiligen Kommandos nachlesen.

 

Einige Dinge müssen bei der Entscheidung des Bus-Types beachtet werden.

 

Die Kommandos in Bascom sind dieselben in beiden Fällen. Das ist kein Problem.

 

Bei der 2-wire-Version kommt die Versorgung von einer separaten Quelle. Das kann dieselbe sein, die den Mikroprozessor versorgt. Die Versorgung aus einem Prozessorpin hat bei mir nicht funktioniert.

 

Manche 1-Wire Bausteine brauchen mehr Strom während bestimmter Operationen.. Die DS1820 z.B. brauchen eine Menge beim Konvertieren der Temperatur. Weil die Sensoren wissen, wie sie versorgt werden (diese Information kann man auch auslesen), haben manche Operationen verschiedene Ausführungszeiten. Das Kommando "Temperatur konvertieren" z.B. braucht ~200ms bei 2-wire, aber ~700ms bei 1-wire. Das muß bei der Programmierung berücksichtigt werden.

 

Und der benötigte Strom muß auch irgendwie bereitgestellt werden.

 

Bei der Verwendung von 2-wire kann dieser Teil übersprungen werden. Man kann allen Teilnehmer gleichzeitig das Kommando "Temperatur konvertieren" übermitteln. Das spart Zeit. Dieses Kommando ist das mit dem größtem Energiebedarf, gerade wenn es an mehrere Sensoren gesendet wird, das sollte klar sein.

 

Bei 1-wire müssen ein paar Sachen beachtete werden. Z.B. darf nicht mehr Energie verbraucht werden, als bereitgestellt wird. Wie das geht? Das ist abhängig vom Bauteil (dessen Verbrauch) und was man damit machen will (der Verbrauch bei speziellen Kommandos).

 

Kurz, ungenaue Beschreibung des Strombedarfs, keine Leitungs-Reflexionen

 

Nur den Prozessor-Pin als Stromversorgung funktioniert mit weniger als 5 Sensoren. (AVR, Nutzung der 1-wire Funktionen, interner Pullup. 8051 nicht getestet). An gleichzeitige Kommandos an mehrere Sensoren ist nicht zu denken.

   

Mit +5V durch einen 4k7-Pullup-Widerstand an der DQ-Leitung funktioniert es mit 70 Sensoren. Aber Vorsicht, für den Fall der gleichzeitigen Temperatur-Konvertierung gibt es hier falsche Ergebnisse. Bei ungefähr 15 Sensoren ist hier das Maximum für die gleichzeitige Ausführung. Diese Erklärung gibt DS auf die Verwendung mit Pullup-Widerstand.

 

Auf diese Art wurde ein Bus mit 70 Bauteilen erfolgreich versorgt.

 

Der Widerstand, 4k7, könnte auch kleiner sein. DS sagt mindestens 1k5, ich habe es bis herunter zu 500 Ohm getestet, darunter ist der Bus nicht mehr nutzbar (AVR). Ein geringerer Widerstand braucht mehr Energie - und macht den Bus unempfindlicher gegen Störungen. Aber das Widerstands-Minimum ist abhängig von den elektrischen Eigenschaften des Mikrocontroller-Pins. Bei 4k7 sollte man bleiben, das ist die Standard-Empfehlung.

 

DS empfiehlt einen anderen Ansatz, genannt "Strong Pullup", welcher (kurz) mit einem MOS-FET arbeitet. Der versorgt die Datenleitung mit genug Strom während Operationen mit höherem Bedarf. Das ist nicht getestet, aber es sollte natürlich funktionieren. Eine wirkliche Einschränkung gibt es: Bascom unterstützt diese Variante nicht. Das wird hier erwähnt, damit Sie sich nicht wundern. "Strong Pullup" braucht einen extra Mikrocontroller-Pin um den MOS-FET anzusteuern.

 

Kabellänge

Dieser Bereich ist nur zum Verständnis der Begrenzungen.

Für kurze Leitungen bis 30 Meter ist die Auswahl des Kabels unkritisch. Selbst flache Telefonkabel arbeiten mit einer begrenzten Zahl von 1-Wire-Slaves. Wie auch immer, je länger der 1-wire-Bus, umso mehr unerwünschte Effekte gibt es und und die richtige Auswahl des Kabels bekommt eine größere Bedeutung.

   

Für längere Distanzen empfiehlt DS Twisted-Pair-Kabel (paarweise verdrillte Adern - z.B. CAT5)

 

Das DS Standard-Beispiel spricht von 100 Metern Kabellänge, es ist also kein Problem. Sie zeigen auch Beispiele mit 300 Metern und ich meine, ich habe sowas gesehen mit 600m-Bus, kann es aber gerade nicht finden.

 

Störungen und CRC

Je länger das Kabel und rauher die Umgebung, desto mehr fehlerhafte Bits werden erzeugt. Die Bauteile sind mit einem CRC-Generator ausgestattet, das letzte Byte der Sendung ist immer die Prüfsumme. In den Programmbeispielen kann man lernen, wie die Checksumme vom Mikrocontroller berechnet wird. Wenn man merkt, daß viele falsche Bits gelesen werden, sollte man die Kabel verbessern. ( Abschirmung, geringerer Widerstand)

   

Übertragungsgeschwindigkeit

Beim original 1-Wire-Bus spricht DS von einer Geschwindigkeit von 14 Kilobits / Sekunde. Wem das nicht genug ist: Manche Bauteile haben eine Overdrive-Option. Das verzehnfacht die Geschwindigkeit. Das passiert, indem die Time-Slots kleiner gemacht werden (von 60µs auf 6µs), was natürlich die Übertragung störanfälliger macht. Auch CRC-Fehler werden wahrscheinlich häufiger auftreten. Wenn es da keine Probleme gibt, sind 140kb/s erreichbar. Das ist SCHNELL.

 

Die Bascom-Suchroutine findet etwa 50 Geräte pro Sekunde am Bus, Adressieren und lesen einzelner Sensoren geht mit etwa 13 Geräten pro Sekunde.

   

Topologie

Über das 1-wire-Netz kann hier nicht viel erzählt werden. Stern? Bus? Es scheint so, als ob man das mixen kann. Ein Bus-Netz ist nicht so empfindlich. (Anmerkung des Übersetzers: AN148 von Dallas/Maxim beschreibt das Thema ausführlich)

   

Vorteile des 1-Wire- Busses

Jeder Teilnehmer ist einzigartig und man kann über 2 Leitungen kommunizieren. Dennoch kann man jeden Teilnehmer individuell adressieren, wenn man möchte. Es gibt 2^48 einzigartige Identifikationsnummern. Einfach ausprobieren..

 

Natürlich, wenn viele Kabel unerwünscht sind, dann ist das ein großer Vorteil. Und hier wird nur 1 Prozessorpin gebraucht.

 

DS liefert die verschiedensten Typen 1-Wire-Bauteile, und alle sind für den direkten Anschluss an einen Mikroprozessor gemacht. Keine extra Hardware. Es gibt Sensoren für Inputs aus der realen Welt und Potentiometer und Relais, mit denen man direkt etwas bewirken kann. Alles auf dem selben Bus.

 

Und auch der IButten von DS (schon mal gehört?) basiert auf der 1-Wire-Technologie.

 

BASCOM verbindet den Mikrocontroller mit 1-wire-Slaves so einfach, daß (ab sofort) das auch als Vorteil zählt - vielleicht sogar als einer der Größten. ;-)

   

Nachteile des 1-wire-Busses

Soweit bekannt, ist DS der einzige Hersteller von Sensoren für diesen Bus. Manche Leute meinen, deren Bauteile sind teuer. Bis jetzt war es wirklich schwierig, mit den Bauteilen zu kommunizieren. Insbesondere, wenn mehrere Slaves an einem Bus teilnehmen. Manche Leute sagen, der 1-wire-Bus wäre langsam, ich denke das ist nicht so.

 

 

Göte Haluza

System engineer


Languages   English Deutsch  
Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
In anderen Sprachen
Sprache