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 1 | Berechnung Wert 1 |
Messgröße Wert 2 | |
. | Berechnung Wert 2 |
. | Messgröße Wert 3 |
. | Berechnung Wert 3 |
Messgröße Wert 4 | |
Byte 7 | Berechnung Wert 4 |
Byte 8 | Mikrocontroller |
Byte 9 | Sensor 1 |
Sensor 2 | |
. | Sensor 3 |
. | Sensor 4 |
. | frei |
frei | |
frei | |
Byte 16 | frei |
Byte 17 | OWID 2. Gerät Byte 0 |
Byte 18 | OWID 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 24 | CRC |
Byte 25 | CRC 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
Code | Messgröße | Einheit |
---|---|---|
0 | Nicht vorhanden | - |
1 | Temperatur | °C |
2 | Luftdruck | hPa |
3 | Beleuchtungsstärke | lx |
4 | Luftfeuchte | % |
5 | Konstante | - |
6 | Spannung | V |
7 | Strom | mA |
8 | VOC | ppm |
9 | Zähler | - |
10 | CO2 | ppm |
11 | Widerstand | kOhm |
12 | Windgeschwindigkeit | m/s |
13 | Windgeschwindigkeit max | m/s |
14 | Windrichtung | ° |
15 | Windrichtung Varianz | ° |
16 | Beleuchtungsstärke Rot | lx |
17 | Beleuchtungsstärke Grün | lx |
18 | Beleuchtungsstärke Blau | lx |
19 | Feinstaubkonzentration PM1 0.3-1.0 µm | µg/m³ |
20 | Feinstaubkonzentration PM2.5 0.3-2.5 µm | µg/m³ |
21 | Feinstaubkonzentration PM4 0.3-4.0 µm | µg/m³ |
22 | Feinstaubkonzentration PM10 0.3-10.0 µm | µg/m³ |
23 | Partikelzahl PM0.5 0.3-0.5 µm | Anzahl/cm³ |
24 | Partikelzahl PM1 0.3-1.0 µm | Anzahl/cm³ |
25 | Partikelzahl PM2.5 0.3-2.5 µm | Anzahl/cm³ |
26 | Partikelzahl PM4 0.3-4.0 µm | Anzahl/cm³ |
27 | Partikelzahl PM10 0.3-10.0 µm | Anzahl/cm³ |
28 | Durchschnittliche Partikelgröße | µm |
29 | Gewicht | g |
30 | Gewicht | kg |
31 | magnetischen Flussdichte z.B. 49.32 µT | µT |
32 | magnetischen Flussdichte x z.B. -9.22 µT | µT |
33 | magnetischen Flussdichte y z.B. 4.21 µT | µT |
34 | magnetischen Flussdichte z z.B. -70.32 µT | µT |
35 | radioaktive Dosisleistung | µSv/h |
36 | Geigerzähler Counts pro Minute | C/min |
37 | Differenzdruck | Pa |
38 | O2 | % |
39 | O3 | ppm |
40 | NOx | ppm |
41 | CO | ppm |
42 | CH4 | ppm |
Codierung der Formeln
Code | Formel | Anmerkungen |
---|---|---|
0 | Nicht vorhanden | |
1 | X1/16 | z.B. Temperatur von DS18B20 |
2 | X1/1.6 | |
3 | X1*0.2+700 | Luftdruck über DS18B20 |
4 | ex1/160 | e ist 2.71828 |
5 | X1*62.5 + 55000 | |
6 | X1/256 | Temperatur 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 |
8 | X1/100 | Spannung DS2438 |
9 | X1/65535*5.1 | Spannung DS2450 |
10 | X1/65535*2.55 | Spannung DS2450 |
11 | X1/65535*1.1 | Spannung DS2450 Simulation mit interner Spannungsreferenz |
12 | X1/10 | DHT22 Luftfeuchte direkt |
13 | X1 | Keine Berechnung |
14 | (X1 - 32767) / 100 | Temperatur DS2450 |
15 | e(X1-32767)/1000 | Beleuchtungsstärke DS2450 |
16 | X1/32 | Luftdruck DS2450 |
17 | X1*0.2441/1000 | VSens DS2438 |
18 | X1/8 | VOC in ppm TGS8100 |
19 | X1/500*14 | VOC DS2423 |
20 | X1*0.5+700 | Luftdruck DS2438 |
21 | X1+1280 | CO2 über DS18B20 |
22 | X1*10 | CO2 ueber DS2438/VAD |
23 | X1*0,025+700 | Luftruck DS2438 Temp |
24 | X1*1.1/1024 | Attiny ADC mit Ref Spannung |
25 | X1*3/1024 | Attiny ADC mit VCC=3V |
26 | X1*5/1024 | Attiny ADC mit VCC=5V |
27 | (X3+X2/1000)/8 | VOC für DS2438 X2: VDD X3: VAD |
28 | eX1/2560 | Helligkeit über Temperatur von DS2438 |
29 | X2*10+X3/100 | CO2 und Luftdruck für DS2438 X2: VDD X3: VAD |
30 | X1/2 | |
31 | X1/4 | |
32 | X1/5 | |
33 | X1|X2<<16 | 32bit aus 2x 16bit |
34 | (X1-1e9)/10000 | 32bit Festkommawert mit 4 Nachkommestellen |
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.
Code | Mikrocontroller | |
---|---|---|
0 | Nicht Angegeben | |
1 | alter 16 Bit Info-Code | |
2 | ATtiny84A | Standard Controller |
3 | ATtiny44 | Kein Bootloader möglich |
4 | ATmega328 | |
5 | ATtiny1624 | |
6 | ATtiny1627 | |
7 | ATtiny1604 | |
8 | ATtiny1607 | |
9 | ATtiny1614 | |
10 | ATtiny1617 | |
11 | ATtiny3224 | |
12 | ATtiny3227 |
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).
Code | Sensor | Anmerkungen |
---|---|---|
0 | Nicht angegeben | |
1 | DS18B20 | Temperatur Sensor |
2 | DS2438 | Temperatur Sensor |
3 | DS2438 | Spannung |
4 | DS2438 | Spannung / Strom |
5 | DS2450 | Spannung |
6 | Thermoelement | Hochtemperatur Sensor |
7 | SHT21 | Feuchte/Temperatur Sensor |
8 | SHT25 | Feuchte/Temperatur Präzisionssensor |
9 | DHT22 | Feuchte/Temperatur Sensor |
10 | HIH9021 | Feuchte/Temperatur Präzisionssensor |
11 | HDC1080 | Feuchte/Temperatur Sensor |
12 | HIH4030 | Feuchte/Temperatur Sensor analog |
13 | HIH5030 | Feuchte/Temperatur Sensor analog |
14 | BMP280 | Luftdrucksensor |
15 | MAX44009 | Umgebungslicht-Sensor |
16 | CDM7160 | CO2-Sensor |
17 | MAX1164/TGS8100 | VOC-Sensor |
18 | TGS8100 direkt | VOC-Sensor |
19 | DS2423 | Counter |
20 | AVR A/D Wandler | Interner A/D-Wandler |
21 | SHT35 | Feuchte/Temperatur Präzisionssensor +-1,5% |
22 | SHT31 | Feuchte/Temperatur Präzisionssensor +-2% über den gesamten Messbereich! |
23 | APDS-9960 | RGB-, Umgebungslicht-, Näherungs- und Gestensensor |
24 | BME680 | VOC/Luftdruck/ Feuchte/ Temperatursensor von Bosch |
25 | SGP30 | VOC Sensor von Senserion (Dual) |
26 | SGPC3 | VOC Sensor von Senserion |
27 | iAQ-core C | VOC Sensor von ams |
28 | HDC2010 | Feuchte/Temperatur Präzisionssensor +-2% 1,8 V |
29 | LPS225HB | Drucksensor von ST |
30 | SHTC3 | Feuchte/Temperatur Präzisionssensor +-2% / +-0,2% |
31 | SPS30 | Sensirion Feinstaub Sensor |
32 | DHT11 | Feuchte/Temperatur-Sensor |
33 | SCD30 | Sensirion NDIR CO2 Sensor |
34 | SCD40 | Sensirion miniatur NDIR CO2 Sensor |
35 | HX711 | Wage System |
36 | SGP40 | Sensirion VOC Sensor |
37 | HTU21D | Temperatur / Feuchte |
38 | Geiger Zähler | |
39 | RM3100 | Magnetfeld Messsystem |
40 | SDP810 | Differenzdrucksensor |
41 | BMP390 | Luftdruck Sensor |
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....