DS2450
Inhaltsverzeichnis
Dallas 1-wire DS2450 4 Kanal ADC
Der DS2450 ist ein 4 Kanal ADC mit einer maximalen Auflösung von 16 Bit (vgl. Datenblatt). Die analog-digital Umwandlung erfolgt durch einen internen four-to-one multiplexer. Kanäle, die nicht als Eingänge genutzt werden, können als Ausgänge (open drain) geschaltet werden (max. 4mA und 6V).
ECMD Interface
Über ECMD sind folgende Befehle für den DS2450 bekannt:
1w ds2450 power
1w ds2450 res
1w ds2450 oc
1w ds2450 oe
1w ds2450 range
1w ds2450 por
1w ds2450 convert
1w ds2450 get
Grundsätzliches
Grundsätzlich gilt für alle Befehle:
- als erstes Argument kann optional die 64 Bit ROM Id des DS2450 angegeben werden, der angesprochen werden soll (match rom). Wird die ROM Id nicht angeben, so werden alle im Bus befindlichen 1-wire Devices (egal welchen Typs) angesprochen (skip rom). Dies macht nur Sinn, wenn sich genau ein Device im 1-wire Bus befindet (skip rom führt bei mehreren Devices unweigerlich dazu, dass mehrere Devices gleichzeitig antworten werden, was zu Bit-Salat beim bus master (d.h. Ethersex) führt, das Datenblatt spricht von "a wired-AND result").
- wird ein Kanal angeben, so ist dieser mit einem Buchstaben (entsprechend Datenblatt) zu bezeichnen (case-insensitiv).
- wird mit einem Befehl ein Wert gesetzt, so kann mit dem gleichen Befehl der Wert gelesen werden, in dem man kein Werte-Argument angibt.
1w ds2450 power
Hierüber wird die Art der Spannungsversorgung des DS2450 gesetzt (global). Dieser Parameter wird durch den Anschluss an der 1-wire Bus bestimmt, vgl. die Erklärung der Anschlussmöglichkeiten.
Wird der 1-wire Bus "normal" (drei-adrig) betrieben, so muss der Wert auf 1 gesetzt werden. Wird der Bus "parasitär" (zwei-adrig) betrieben, muss der Wert auf 0 gesetzt werden.
Default-Wert: 0
Beispiel:
1w ds2450 power 1
(der DS250 wird auf "normale" Spannungsversorgung konfiguriert)
1w ds2450 res
Hierüber wird die Auflösung der analog-digital Umwandlung gesetzt (pro Kanal). Die Auflösung kann zw. 1 und 16 Bit eingestellt werden. Die Eingabe erfolgt als 8 Bit Hexadezimalwert, wobei eine Auflösung von 16 Bit durch den Wert 0x00 oder alternativ 0x10 erreicht wird. Außerdem ist die Kanal-Bezeichnung anzugeben.
Default-Wert: 0x08
Beispiel:
1w ds2450 res c 08
(setzt die Auflösung für Kanal C auf 0x08, d.h. 8 Bit)
1w ds2450 oc
Hierüber kann der Ausgang ein- oder ausgeschaltet werden (pro Kanal). Voraussetzung ist, dass über 1w ds2450 oe der Kanal als Ausgang geschaltet wurde (ansonsten wird das OC-Bit ignoriert). Die Eingabe erfolgt als bool über 0 (Ausgangstransistor leitend) bzw. 1 (Ausgangstransistor nicht-leitend). Außerdem ist die Kanal-Bezeichnung anzugeben.
Default-Wert: 0
Beispiel:
1w ds2450 oc a 1
(der Ausgangstransistor des Kanal A wird leitend)
1w ds2450 oe
Hierüber kann der Kanal als Ein- oder Ausgang gesetzt werden (pro Kanal). Eine analog-digital Umwandlung ist nur möglich, wenn das OE-Bit auf 0 gesetzt ist. In diesem Fall wird das OC-Bit ignoriert. Ist das OE-Bit auf 1 gesetzt, kann der Ausgang über 1w ds2450 oc ein- bzw. ausgeschaltet werden. Die Eingabe erfolgt als bool über 0 (Eingang für ADC) bzw. 1 (Ausgang open drain). Außerdem ist die Kanal-Bezeichnung anzugeben.
Default-Wert: 0
Beispiel:
1w ds2450 oe d 1
(Kanal A wird als Ausgang gesetzt)
1w ds2450 range
Hierüber kann der Spannungs-Bereich angegeben werden, in dem die analog-digital Umwandlung stattfinden soll. Die Eingabe erfolgt als bool über 0 (Spannungsbereich 0 bis 2,55V) bzw. 1 (Spannungsbereich 0 bis 5,10V). Außerdem ist die Kanal-Bezeichnung anzugeben.
Default-Wert: 0
Beispiel:
1w ds2450 range b 1
(für Kanal B wird bei der analog-digital Umwandlung der Spannungsbereich 0 bis 5,10V genutzt)
1w ds2450 por
Hierüber kann das power on reset Bit gelesen bzw. gesetzt werden. Nach einem power-on reset cycle setzt der DS2450 das Bit auf 1. Das Bit beeinflusst die conditional search, welche in Ethersex (noch) nicht implementiert ist. Setzt der bus master das Bit auf 0, so nimmt der DS2450 nicht mehr an der conditional search teil Die Eingabe erfolgt als bool über 0 bzw. 1. Außerdem ist die Kanal-Bezeichnung anzugeben.
Default-Wert: 1 (nach power-on reset cycle)
Beispiel:
1w ds2450 por c 0
(für Kanal C wird das power on reset Bit auf 0 gesetzt)
FixMe: Es sieht so aus, als kann das Bit nur global gesetzt werden, d.h. wird es für einen Kanal verändert, haben danach alle anderen Kanäle den gleich POR-Bit Wert. Außerdem kann man das Bit nicht mehr auf 1 setzen, wenn es vorher schon auf 0 gesetzt wurde (das widerspricht aber dem Datenblatt!).
1w ds2450 convert
Hierüber wird die analog-digital Umwandlung ausgelöst (analog den 1-wire Temperatursensoren). Werden keine weiteren Argumente angegeben, so wird die Umwandlung für alle 4 Kanäle des DS2450 durchgeführt (FixMe: vermutlich werden die Kanäle, bei denen das OE-Bit auf 1 steht ausgelassen, dass ist aber nicht durch Dallas dokumentiert). Optional können zwei Argumente angegeben werden (werden Argumente angegeben, müssen beide Argumente angegeben werden!):
- input select mask
- read-out control
input select mask
Mit der input select mask kann angegeben werden, für welche Kanäle die analog-digital Umwandlung durchgeführt werden soll. Die input select mask ist ein 8 Bit Hexadezimalwert:
bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|---|
ignore | ignore | ignore | ignore | Kanal D | Kanal C | Kanal B | Kanal A |
Eine input select mask von 0x0f bedeutet also, dass für alle 4 Kanäle die analog-digital Umwandlung durchgeführt werden soll. Eine mask von 0x00 ist (offensichtlich) sinnlos. Eine ungültige input select mask (d.h. input select mask == 0x00 oder > 0x0f) wird erkannt und führt zu einer ECMD-Fehlermeldung.
Die analog-digital Umwandlung erfolgt in der Reihenfolge von Kanal A zu Kanal D, wobei die nicht gewünschte Kanäle (sprich jene, wo das input select mask Bit auf 0 steht) übersprungen werden.
Der DS2450 braucht für jedes Bit Auflösung ca. 60 bis 80µs. Außerdem braucht das Umwandlung-Kommando generell 160µs (offset) Dies bedeutet, dass eine Umwandlung aller 4 Kanäle bei maximaler 16 Bit Auflösung also nicht länger als 4*16*80+160µs = 5280µs = 5,28ms dauern wird.
read out control
Mit dem read out control kann angegeben werden, ob und wie das Register für die Ergebnisse der analog-digital Umwandlung vorbelegt werden soll. Das macht nur dann Sinn, wenn die Umwandlungsergebnisse schon gelesen werden sollen, während der DS2450 im Hintergrund noch die analog-digital Umwandlung durchführt (was möglich ist). Das read out control ist ein 8 Bit Hexadezimalwert:
bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|---|
Set D | Clear D | Set C | Clear C | Set B | Clear B | Set A | Clear A |
Set bzw. Clear verhalten sich wie folgt:
Set | Clear | Ergebnis |
---|---|---|
0 | 0 | keine Veränderung am Umwandlung-Register |
0 | 1 | alle Bits des Umwandlung-Register werden auf 0 gesetzt |
1 | 0 | alle Bits des Umwandlung-Register werden auf 1 gesetzt |
1 | 1 | invalid |
Ungültige Kombinationen im read out control (d.h. Set = 1 und Clear = 1) werden erkannt und führen zu einer ECMD-Fehlermeldung.
Default-Werte:
- input select mask: 0x04
- read out control: 0x00
Beispiel:
1w ds2450 convert
(für alle Kanäle wird die analog-digital Umwandlung durchgeführt)
1w ds2450 get
Hierüber wird das Ergebnis der analog-digital Umwandlung ausgelesen (analog den 1-wire Temperatursensoren). Werden keine weiteren Argumente angegeben, so werden die Umwandlungsergebnisse für alle 4 Kanäle des DS2450 ausgegeben. Optional kann ein Kanal angegeben werden, dann wird nur das Umwandlungsergebniss dieses Kanals ausgegeben. Wurde seit dem letzten power-on reset cycle keine Umwandlung durchgeführt, stehen alle Bits der Register auf 0.
Die Ausgabe erfolgt als raw (unsigned integer 16 Bit - uint16_t
). Die eingelesene Spannung errechnet sich wie folgt (VAL ist die Ausgabe von 1w ds2450 get
):
- für range = 0 (0..2,55V)
VAL ------- * 2,55V 2**16-1
- für range = 1 (0..5,10V)
VAL ------- * 5,10V 2**16-1
Default-Werte: -
Beispiel:
1w ds2450 get
(die Umwandlungsergebnisse für alle 4 Kanäle werden ausgegeben)
Beispielschaltung
Hier ein Beispielschaltung für den DS2450. Kanal A wird als Eingabe genutzt (range = 1). Kanal D wird als Ausgabe genutzt, über den Optokoppler kann die LED geschaltet werden.
Der Widerstand R1 muss unbedingt entsprechend dem Optokoppler dimensioniert werden. Beim 4N35 sind 1k3 ausreichend, dann fließt ein Strom von ca. 2,8mA.