Konfigurationscode auslesen und verstehen

Bei jedem Gerät, was mit der owSlaveV2-Firmware läuft, kann ein Code abgefragt werden, der nähere Informationen über die ermittelten Werte angibt. Damit lässt sich die physikalische Messgröße (z.B. Temperatur, Druck, CO2 ...), die dazugehörige Einheit (z.B. °C, hPa, ppm ...) und sogar die Formel ermitteln, mit der die Werte berechnet werden können.

Abfrage der Config-Bytes

Der Befehl zum Abfragen der Config-Bytes (GET_CONFIG) hat den Code 0x85. Wird dieser Befehl an ein aktives Gerät (mit MATCH ROM oder SKIP ROM (0xCC) ausgwählt) gesendet, antwortet der 1-Wire-Slave mit einem 26 Byte langen Code.

Aufbau des Config-Codes

Byte 0 Messgröße Wert 1
Byte 1Berechnung Wert 1
Messgröße Wert 2
.Berechnung Wert 2
.Messgröße Wert 3
.Berechnung Wert 3
Messgröße Wert 4
Byte 7Berechnung Wert 4
Byte 8Mikrocontroller
Byte 9Sensor 1
Sensor 2
.Sensor 3
.Sensor 4
.frei
frei
frei
Byte 16frei
Byte 17OWID 2. Gerät Byte 0
Byte 18OWID 2. Gerät Byte 1
OWID 2. Gerät Byte 2
.OWID 2. Gerät Byte 3
.OWID 2. Gerät Byte 4
.OWID 2. Gerät Byte 5
OWID 2. Gerät Byte 6
Byte 24CRC
Byte 25CRC 2. Byte bei CRC16

Maximal vier Kanäle können spezifiziert werden. Das ist für alle gängigen 1-Wire-Chips ausreichend. Die Bytes 0-7 enthalten jewails abwechselnd einen Code, der den Messwert beschreibt und einen Code für eine Formel. Damit lassen sich aus den RAW-Daten die physikalischen Werte berechnen.

Es folgt ein Byte was angibt, welcher Mikroconroller verwendet wird. Vor dem 24-Byte langen Info-Code gab es bereits einen 16-Byte Info-Code. Bei diesem steht an dieser Stelle immer 0x01. Byte 9-12 geben an, mit welchen Sensoren die Werte 1-4 gemessen werden. Die Bytes 13-16 sind noch frei. Sie kommen eventuell für Statusabfragen (z.B. beim VOC Sensor) in Frage.

Byte 17-23 geben die ID des anderen 1-Wire-Devices an, wenn zwei Geräte auf einen Conroller simuliert werden. Das CRC-Byte der ID entfällt dabei. Wird nur 1-Gerät simuliert, sind diese Bytes 0x00.

Für 1-Wire-Chips, die einen 8-Bit CRC verwänden, kommt jetzt das CRC8 Byte. Für Chips mit CRC16 kommen zwei CRC-Bytes. Die CRC-Generierung erfolgt entsprechend den Regeln, die in den Datenblättern beschrieben sind.

Codierung der Messgrößen und Einheiten

CodeMessgrößeEinheit
0Nicht vorhanden-
1Temperatur°C
2LuftdruckhPa
3BeleuchtungsstärkeLux
4Luftfeuchte%
5Konstante-
6SpannungV
7StrommA
8VOCppm
9Zähler-
10CO2ppm
11WiderstandkOhm
12Windgeschwindigkeitm/s
13Windgeschwindigkeit maxm/s
14Windrichtung°
15Windrichtung Varianz°
Hier sind alle Messgrößen aufgezählt, die bisher von mir verwendet wurden. Die Liste kann beliebig erweitert werden. Es sind ja noch 244 Möglichkeiten frei. Wer eigene Größen hier einpflegen möchte, kann sich einfach über das Kontaktformular bei mir melden.

Codierung der Formeln

CodeFormelAnmerkungen
0Nicht vorhanden
1X1/16z.B. Temperatur von DS18B20
2X1/1.6
3X1*0.2+700Luftdruck über DS18B20
4ex1/160 e ist 2.71828
5X1*62.5 + 55000
6X1/256Temperatur von DS2438
7((X3 / X2 - 0.16) / 0.0062) / (1.0546 - 0.00216*X1/256.0)Luftfeuchte HIH4031 an DS2430
X1: Temperatur (RAW 16Bit)
X2: VDD
X3: VAD
8X1/100Spannung DS2438
9X1/65535*5.1Spannung DS2450
10X1/65535*2.55Spannung DS2450
11X1/65535*1.1Spannung DS2450 Simulation mit interner Spannungsreferenz
12X1/10DHT22 Luftfeuchte direkt
13X1Keine Berechnung
14(X1 - 32767) / 100Temperatur DS2450
15e(X1-32767)/1000Beleuchtungsstärke DS2450
16X1/32Luftdruck DS2450
17X1*0.2441/1000VSens DS2438
18X1/8VOC in ppm TGS8100
19X1/500*14VOC DS2423
20X1*0.5+700Luftdruck DS2438
21X1+1280CO2 über DS18B20

Die meisten Formeln sind recht einfach umzusetzen. Formel 7 ist für den Standart HIH403X Sensor. Dort muss auch die Temperatur und die Betriebsspannung mit in die Berechnung eingehen. Als Ausgangswert dient immer der RAW-Wert, der vom Gerät gelesen wird, also meist ein 16-Bit Integer-Wert.

Codierung der Sensoren und Mikrocontroller

Der hauptsächliche Grund, warum die Zahl der Configurations-Bytes auf 24 Byte (ohne CRC) erhöht wurde, ist die Codierung der verschiedenen Sensoren, die am Mikrocontroller angeschlossen sind. Das erleichtert das Finden der richtigen Firmware für ein Update und hilft beim Vergleichen der Sensoren.

CodeMikrocontroller
0Nicht Angegeben
1alter 16 Bit Info-Code
2ATtiny84AStandard Controller
3ATtiny44Kein Bootloader möglich
4ATmega328geplant

Gleiches gilt für die Codierung der Mikrocontoller. Im Moment habe ich mich nur auf den ATtiny84A beschränkt, da er relativ klein ist und vor allem eine sehr geringe Leistungsaufnahme hat (im Vergleich zu anderen Atmel, PIC, MSP430 usw. Mikrocontrollern).

CodeSensorAnmerkungen
0Nicht angegeben
1DS18B20Temperatur Sensor
2DS2438Temperatur Sensor
3DS2438Spannung
4DS2438Spannung / Strom
5DS2450Spannung
6ThermoelementHochtemperatur Sensor
7SHT21Feuchte/Temperatur Sensor
8SHT25Feuchte/Temperatur Präzisionssensor
9DHT22Feuchte/Temperatur Sensor
10HIH9021Feuchte/Temperatur Präzisionssensor
11HDC1080Feuchte/Temperatur Sensor
12HIH4030Feuchte/Temperatur Sensor analog
13HIH5030Feuchte/Temperatur Sensor analog
14BMP280Luftdrucksensor
15MAX44009Umgebungslicht-Sensor
16CDM7160CO2-Sensor
17MAX1164/TGS8100 VOC-Sensor
18TGS8100 direktVOC-Sensor
19DS2423 Counter
20AVR A/D WandlerInterner A/D-Wandler
21SHT35Feuchte/Temperatur Präzisionssensor +-1,5%
22SHT31Feuchte/Temperatur Präzisionssensor +-2% über den gesamten Messbereich!

Das Modul 27/28 hat als DS2450 also dann den CODE:

1 / 14 / 4 / 8 / 3 / 15 / 2 / 16 / 2 / 7 / 7 / 15 / 14 / 0 / 0 / 0....

Weiter geht es mit einigen Programmierbeispielen >>

Zum Seitenanfang