Using the 1 WIRE protocol/de

Aus MCS Wiki AVR
< Using the 1 WIRE protocol(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
K (Wie arbeitet man mit dem 1-wire-bus)
(Nachteile des 1-wire-Busses)
 
(17 dazwischenliegende Versionen von einem Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
=<div id="idcontent">Übersicht<div id="innerdiv">=
+
= <span class="f_Header">Übersicht</span><br/> =
 +
 
 
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.
 
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.
  
Zeile 11: Zeile 12:
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
Zeile 17: Zeile 17:
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
Zeile 62: Zeile 61:
 
= <span class="f_Header">Wie arbeitet man mit dem 1-wire-bus</span><br/> =
 
= <span class="f_Header">Wie arbeitet man mit dem 1-wire-bus</span><br/> =
  
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 mmit dem Kommanso "Skip Rom" begonnen werden. Das heißt: Ignoriere die IDs der Teilnehmer, überspringe diesen Teil der Kommunikation. <br>
+
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.
Thereafter, you can read a device, and write to it. If you know you only have 1 sensor attached, or if you want to address all sensors, you can start with a "Skip Rom" - command. This means; take no notice about the IDs of the sensors - skip that part of the communication.
+
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
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.<br>
+
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.
When you made a 1-wire-reset, all devices of the bus are listening. If you chose to address only one of them, the rest of them will not listen again before you have made a new 1-wire-reset on the bus.
+
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
 
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.html http://www.dalsemi.com/datasheets/pdfindex.html]finden kann. Darin kann man alles über die jeweiligen Kommandos nachlesen.
 
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.html http://www.dalsemi.com/datasheets/pdfindex.html]finden kann. Darin kann man alles über die jeweiligen Kommandos nachlesen.
<br>I do not describe BASCOM commands in this text - they are pretty much self-explanatory. But the uC has to write the commands to the bus - and thereafter read the answer. What you have to write as a command depends on devices you are using - and what you want to do with it. Every DS chip has a data sheet, which you can find at [http://www.dalsemi.com/datasheets/pdfindex.html http://www.dalsemi.com/datasheets/pdfindex.html]. There you can find out all about the actual devices command structure.
 
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
 
Einige Dinge müssen bei der Entscheidung des Bus-Types beachtet werden.
 
Einige Dinge müssen bei der Entscheidung des Bus-Types beachtet werden.
<br>There are some things to have in mind when deciding which of the bus-types to use.
 
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
 
Die Kommandos in Bascom sind dieselben in beiden Fällen. Das ist kein Problem.
 
Die Kommandos in Bascom sind dieselben in beiden Fällen. Das ist kein Problem.
<br>The commands, from BASCOM, are the same in both cases. So this is not a problem.
 
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
 
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.
 
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.
<br>The +5V power-supply on the VDD when using a 2-wire bus has to be from a separate power supply, according to DS. But it still works with taking the power from the same source as for the processor, directly on the stabilizing transistor. I have not got it to work taking power directly from the processor pin.
 
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
 
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.  
 
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.  
<br>Some devices consume some more power during special operations. The DS1820 consumes a lot of power during the operation "Convert Temperature". Because the sensors knows how they are powered (it is also possible to get this information from the devices) some operations, as "Convert T" takes different amount of time for the sensor to execute. The command "Convert T" as example, takes ~200mS on 2-wire, but ~700mS on 1-wire. This has to be considered during programming.
 
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
Und diese Energie muß auch irgendwie bereitgestellt werden
+
Und der benötigte Strom muß auch irgendwie bereitgestellt werden.
<br>And that power also has to be supplied somehow.
+
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
 
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 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.
<br>If you use 2-wire, you don't have to read further in this part. You can do simultaneously "Convert T" on all the devices you attach on the bus. And save time. This command is the most power-consuming command, possible to execute on several devices, I am aware of.
 
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
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 Verbracuh bei speziellen Kommandos).
+
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).
<br>If you use 1-wire, there are things to think about. It is about not consuming more power than you feed. And how to feed power? That depends on the devices (their consumption) and what you are doing with them (their consumption in a specific operation).
+
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
 
Kurz, ungenaue Beschreibung des Strombedarfs, keine Leitungs-Reflexionen  
 
Kurz, ungenaue Beschreibung des Strombedarfs, keine Leitungs-Reflexionen  
<br>Short, not-so-accurate description of power needs, not reflecting on cable lengths.
 
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
 
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.
 
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.
<br>Only the processor pin as power supplier, will work < 5 sensors. (AVR, 1-wire-functions use an internal pull-up. 8051 not yet tested). Don't even think of simultaneous commands on multiple sensors.
 
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
 
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.
 
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.
<br>With +5V through a 4K7 resistor, to the DQ-line, 70 sensors are tested. But, take care, cause issuing "Convert T" simultaneously, would cause that to give false readings. About ~15 sensors is the maximum amount of usable devices, which simultaneously performs some action. This approach DS refers to as "pull-up resistor".
 
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
 
Auf diese Art wurde ein Bus mit 70 Bauteilen erfolgreich versorgt.
 
Auf diese Art wurde ein Bus mit 70 Bauteilen erfolgreich versorgt.
<br>With this in mind, a bus with up to 70 devices has been successfully powered this way.
 
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
 
+
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.
<br>The resistor mentioned, 4K7, could be of smaller value. DS says minimum 1K5, I have tested down to 500 ohm - below that the bus is not usable any more. (AVR). Lowering the resistor feeds more power - and makes the bus more noise resistant. But, the resistor minimum value is naturally also depending on the uC-pin electric capabilities. Stay at 4K7 - which is standard recommendation.
+
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
DS recommends yet another approach, called "strong pull-up" which (short) works via a MOS-FET transistor, feeding the DQ lines with enough power, still on 1-wire, during power-consuming tasks. This is not tested, but should naturally work. Because this functionality is really a limited one; BASCOM has no special support for that. But anyway, we tell you about it, just in case you wonder. Strong pull-up has to use one uC pin extra - to drive the MOS-FET.
+
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.
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
= <span class="f_Header">Cable lengths</span><br/> =
+
= <span class="f_Header">Kabellänge</span><br/> =
  
(this section is only for some limitation understanding)
+
Dieser Bereich ist nur zum Verständnis der Begrenzungen.
  
For short runs up to 30 meters, cable selection for use on the 1-Wire bus is less critical. Even flat modular phone cable works with limited numbers of 1-Wire devices. However, the longer the 1-Wire bus, the more pronounced cable effects become, and therefore greater importance is placed on cable selection.
+
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.
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
For longer distances, DS recommends twisted-pair-cable (CAT5).
+
Für längere Distanzen empfiehlt DS Twisted-Pair-Kabel (paarweise verdrillte Adern - z.B. CAT5)
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
DS standard examples show 100 meters cable lengths, so they say, that's no problem. They also show examples with 300m cabling, and I think I have seen something with 600-meter bus (but I cant find it again).
+
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.
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
= <span class="f_Header">Noise and CRC</span><br/> =
+
= <span class="f_Header">Störungen und CRC</span><br/> =
  
The longer cable and the noisier environment, the more false readings will be made. The devices are equipped with a CRC-generator - the LSByte of the sending is always a checksum. Look in program examples to learn how to re-calculate this checksum in your uC. AND, if you notice that there are false readings - do something about your cables. (Shield, lower resistor)
+
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)
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
= <span class="f_Header">Transfer speed</span><br/> =
+
= <span class="f_Header">Übertragungsgeschwindigkeit</span><br/> =
  
On the original 1-wire bus, DS says the transfer speed is about 14Kbits /second. And, if that was not enough, some devices has an overdrive option. That multiplies the speed by 10. This is issued by making the communication-time-slots smaller (from 60 uS to 6uS ) which naturally will make the devices more sensitive, and CRC-error will probably occur more often. But, if that is not an issue, ~140Kbit is a reachable speed to the devices. So, whatever you thought before, it is FAST.
+
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.
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
The BASCOM scanning of the bus is finds about 50 devices / second , and reading a specific sensors value to a uC should be about 13 devices / second.
+
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.
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
= <span class="f_Header">Topology</span><br/> =
+
= <span class="f_Header">Topologie</span><br/> =
  
Of the 1w-net - that is an issue we will not cover so much. Star-net, bus-net? It seems like you can mix that. It is a bus-net, but not so sensitive about that.
+
Ü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)
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
= <span class="f_Header">The benefit of the 1-wire bus</span><br/> =
+
= <span class="f_Header">Vorteile des 1-Wire- Busses </span><br/> =
  
Each device is individual - and you can communicate with it over the media of 2 wires. Still, you can address one individual device, if you like. Get its value. There are 64 ^ 2 unique identifications-numbers.
+
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..
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
Naturally, if lot of cables are unwanted, this is a big benefit. And you only occupy 1 processor pin.
+
Natürlich, wenn viele Kabel unerwünscht sind, dann ist das ein großer Vorteil. Und hier wird nur 1 Prozessorpin gebraucht.
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
DS supplies with different types of devices, which all are made for interfacing an uC - directly. No extra hardware. There are sensors, so you can get knowledge about the real world, and there are also potentiometers and relays, so you can do something about it. On the very same bus.
+
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.
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
And the Ibutton approach from DS (ever heard of it?) is based on 1wire technology. Maybe something to pick up.
+
Und auch der IButten von DS (schon mal gehört?) basiert auf der 1-Wire-Technologie.  
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
BASCOM let you use an uC with 1wire-devices so easy, that (since now) that also has to count as a benefit - maybe one of the largest.&nbsp;;-)
+
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.&nbsp;;-)
  
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
 
<span style="font-family: 'Arial';  color: #000000">&nbsp;</span>
  
Zeile 226: Zeile 204:
  
 
System engineer
 
System engineer
</div></div>
 
  
  

Aktuelle Version vom 23. Februar 2013, 22:19 Uhr

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