Sodala, ich hab mich jetzt wieder mal an meinem alten Problem, dem
Auslesen des Sensors MS5611 beschäftigt ... bin wieder ein Stückerl
weitergekommen und mittlerweile kenn ich mich auch schon ein bisserl mit
dem debuggen des MSP430ers aus.
Das Auslesen der Temperatur funktioniert schon korrekt und stimmt mit
der Zimmertemperatur meiner Wetterstation überein, nur beim Luftdruck
sind sich die beiden noch ziemlich uneinig, leider hat die Wetterstation
recht. Ich lese vom Sensor so um die 1400 hPa (=mbar) es sollten aber so
an die 950 sein. Und da komm ich nicht mehr weiter und bitte um Hilfe.
folgender Codeabschnitt führt die Berechnung durch:
1 | raw = ms5611_get_raw(MS5611_CMD_D1_4096);
|
2 |
|
3 | off = (((int64_t)MS5611_CAL_OFF) << 16) + ((((int64_t)MS5611_CAL_TCO) * (int64_t)dT) >> 7);
|
4 | sens = (((int64_t)MS5611_CAL_SENS) << 15) + ((((int64_t)MS5611_CAL_TCS) * (int64_t)dT) >> 8);
|
5 | pres = (((raw * sens) >> 21) - off) >> 15;
|
Die MS5611_CAL_xxx Werte sind Kalibrierungswerte die einmal zu beginn
gelesen werden und in der Variable pres steht der endgültige Luftdruck.
Da ich mir long long nicht korrekt via uart ausgeben kann, hab ich off
und sens mit dem debugger angeschaut:
1 | (gdb) print/x ms5611_get_raw::rxb
|
2 | $4 = {0x84, 0xa9, 0x48}
|
3 | (gdb) print ms5611_get_pressure::raw
|
4 | $5 = 8694088
|
5 | (gdb) print ms5611_get_pressure::off
|
6 | $6 = 4332879376
|
7 | (gdb) print ms5611_get_pressure::sens
|
8 | $7 = 2164522714
|
9 | (gdb) print ms5611_get_pressure::pres
|
10 | $8 = 141616
|
Und wenn ich das mit dem Taschenrechner nachrechne, komm ich auf die
selben Werte. Bzw hab ich mir dafür ein kleines Bashscript geschrieben,
dem man die drei raw und den dT wert übergint und dann die Berechnung
macht, siehe Anhang.
Also ich steh wieder mal an und bin für jede Anregung dankbar.
lG,
Max