diff options
| author | Keith Packard <keithp@keithp.com> | 2013-05-22 19:31:15 -0600 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2013-08-25 21:59:47 -0700 | 
| commit | b363a628fc6137c3395a48ef13de7a799ec3e2c3 (patch) | |
| tree | 6fac28a875f34aca450d6b17084cc64550226680 | |
| parent | aa2948803d33dbee6f1eab30370178252df2b56d (diff) | |
altos: MS5607 pressure computation for low temperatures was wrong
Second correction only applies to temps < -15°C, not 15°C.
Signed-off-by: Keith Packard <keithp@keithp.com>
| -rw-r--r-- | src/drivers/ao_ms5607_convert.c | 11 | 
1 files changed, 7 insertions, 4 deletions
diff --git a/src/drivers/ao_ms5607_convert.c b/src/drivers/ao_ms5607_convert.c index e61d19ed..bfb952a4 100644 --- a/src/drivers/ao_ms5607_convert.c +++ b/src/drivers/ao_ms5607_convert.c @@ -42,11 +42,14 @@ ao_ms5607_convert(struct ao_ms5607_sample *sample, struct ao_ms5607_value *value  		int32_t TEMPM = TEMP - 2000;  		int64_t OFF2 = (61 * (int64_t) TEMPM * (int64_t) TEMPM) >> 4;  		int64_t SENS2 = 2 * (int64_t) TEMPM * (int64_t) TEMPM; -		if (TEMP < 1500) { +		if (TEMP < -1500) {  			int32_t TEMPP = TEMP + 1500; -			int64_t TEMPP2 = TEMPP * TEMPP; -			OFF2 = OFF2 + 15 * TEMPP2; -			SENS2 = SENS2 + 8 * TEMPP2; +			/* You'd think this would need a 64-bit int, but +			 * that would imply a temperature below -327.67°C... +			 */ +			int32_t TEMPP2 = TEMPP * TEMPP; +			OFF2 = OFF2 + (int64_t) 15 * TEMPP2; +			SENS2 = SENS2 + (int64_t) 8 * TEMPP2;  		}  		TEMP -= T2;  		OFF -= OFF2;  | 
