annotate Small_CPU/Src/pressure.c @ 411:e908b894f107 Improment_NVM

Bugfix: Limit log length in case of corrupted sample storage: In case of a sample address reset the header would have a smaler end address as the start address. As result the length becomes very long and download e.g. via Subsurface, would seem to hang. To solve this the number of sample bytes in this use case has been limited. Tested with subsurface only. After change dowload of logs is possible again. Nevertheless the sampledata will be lost. Minor change: "header" was used as global as well as as local variable => changed name for global variant to gheader.
author ideenmodellierer
date Mon, 13 Jan 2020 20:27:57 +0100
parents cb3870f79e9d
children 6f30f2011667
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1 /**
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
3 * @file pressure.c
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
4 * @author heinrichs weikamp gmbh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
5 * @date 2014
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
6 * @version V0.0.2
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
7 * @since 20-Oct-2016
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
8 * @brief
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
9 *
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
10 @verbatim
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
11 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
12 ##### How to use #####
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
13 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
14 V0.0.2 18-Oct-2016 pressure_calculation_AN520_004_mod_MS5803_30BA__09_2015
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
15
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
16 @endverbatim
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
17 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
18 * @attention
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
19 *
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
20 * <h2><center>&copy; COPYRIGHT(c) 2016 heinrichs weikamp</center></h2>
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
21 *
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
22 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
23 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
24
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
25
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
26
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
27 /* surface time
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
28 the last 30 minutes will be saved once per minute in a endless loop
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
29 at the beginning of a dive the oldest value will be used
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
30 */
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
31 #include "math.h"
241
2b9775f71e30 cleanup: factor out I2C1_Status() and cleanup type
Jan Mulder <jlmulder@xs4all.nl>
parents: 186
diff changeset
32 #include "scheduler.h"
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
33 #include "pressure.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
34 #include "i2c.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
35 #include "rtc.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
36
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
37 #define CMD_RESET 0x1E // ADC reset command
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
38 #define CMD_ADC_READ 0x00 // ADC read command
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
39 #define CMD_ADC_CONV 0x40 // ADC conversion command
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
40 #define CMD_ADC_D1 0x00 // ADC D1 conversion
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
41 #define CMD_ADC_D2 0x10 // ADC D2 conversion
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
42 #define CMD_ADC_256 0x00 // ADC OSR=256
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
43 #define CMD_ADC_512 0x02 // ADC OSR=512
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
44 #define CMD_ADC_1024 0x04 // ADC OSR=1024
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
45 #define CMD_ADC_2048 0x06 // ADC OSR=2056
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
46 #define CMD_ADC_4096 0x08 // ADC OSR=4096
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
47 #define CMD_PROM_RD 0xA0 // Prom read command
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
48
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
49 /* remove comment to use a predefined profile for pressure changes instead of real world data */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
50 /* #define SIMULATE_PRESSURE */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
51
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
52 #define PRESSURE_SURFACE_MAX_MBAR (1030.0f) /* It is unlikely that pressure at surface is greater than this value => clip to it */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
53 #define PRESSURE_HISTORY_SIZE (8u)
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
54 #define PRESSURE_JUMP_VALID_MBAR (500.0f) /* values are measure several times a second => jumps > 5m very unlikely */
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
55
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
56 #define PRESSURE_SURFACE_QUE (30u) /* history buffer [minutes] for past pressure measurements */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
57 #define PRESSURE_SURFACE_EVA_WINDOW (15u) /* Number of entries evaluated during instability test. Used to avoid detection while dive enters water */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
58 #define PRESSURE_SURFACE_STABLE_LIMIT (10u) /* Define pressure as stable if delta (mBar) is below this value */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
59 #define PRESSURE_SURFACE_DETECT_STABLE_CNT (5u) /* Event count to detect stable condition */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
60 #define PRESSURE_SURFACE_UNSTABLE_LIMIT (50u) /* Define pressure as not stable if delta (mBar) is larger than this value */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
61 #define PRESSURE_SURFACE_DETECT_UNSTABLE_CNT (3u) /* Event count to detect unstable condition */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
62
335
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
63
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
64 static uint8_t PRESSURE_ADDRESS = DEVICE_PRESSURE_MS5803; /* Default Address */
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
65
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
66 static uint16_t get_ci_by_coef_num(uint8_t coef_num);
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
67 //void pressure_calculation_new(void);
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
68 //void pressure_calculation_old(void);
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
69 static void pressure_calculation_AN520_004_mod_MS5803_30BA__09_2015(void);
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
70 //static uint8_t crc4(uint16_t n_prom[]);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
71
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
72 static HAL_StatusTypeDef pressure_sensor_get_data(void);
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
73 static uint32_t get_adc(void);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
74 uint8_t pressureSensorInitSuccess = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
75
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
76 static uint16_t C[8] = { 1 };
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
77 static uint32_t D1 = 1;
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
78 static uint32_t D2 = 1;
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
79 //static uint8_t n_crc;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
80
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
81 static int64_t C5_x_2p8 = 1;
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
82 static int64_t C2_x_2p16 = 1;
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
83 static int64_t C1_x_2p15 = 1;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
84
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
85 /*
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
86 short C2plus10000 = -1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
87 short C3plus200 = -1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
88 short C4minus250 = -1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
89 short UT1 = -1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
90 short C6plus100 = -1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
91 */
339
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
92 static float pressure_offset = 0.0; /* Offset value which may be specified by the user via PC Software */
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
93 static float temperature_offset = 0.0; /* Offset value which may be specified by the user via PC Software */
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
94
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
95 static float ambient_temperature = 0;
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
96 static float ambient_pressure_mbar = 1000.0;
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
97 static float surface_pressure_mbar = 1000.0;
335
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
98 static float surface_ring_mbar[PRESSURE_SURFACE_QUE] = { 0 };
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
99
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
100 static uint8_t surface_pressure_writeIndex = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
101 static float surface_pressure_stable_value = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
102 static uint8_t surface_pressure_stable = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
103
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
104 static float pressure_history_mbar[PRESSURE_HISTORY_SIZE];
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
105
339
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
106 static uint8_t secondCounterSurfaceRing = 0;
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
107 static uint8_t avgCount = 0;
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
108 static float runningAvg = 0;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
109
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
110 float get_temperature(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
111 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
112 return ambient_temperature;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
113 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
114
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
115 float get_pressure_mbar(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
116 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
117 return ambient_pressure_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
118 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
119
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
120 float get_surface_mbar(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
121 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
122 return surface_pressure_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
123 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
124
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
125
339
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
126 void init_surface_ring(uint8_t force)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
127 {
339
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
128 if((surface_ring_mbar[0] == 0) || (force)) /* only initialize once. Keep value in place in case of an i2c recovery */
335
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
129 {
339
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
130 secondCounterSurfaceRing = 0; /* restart calculation */
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
131 avgCount = 0;
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
132 runningAvg = 0;
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
133
335
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
134 for(int i=0; i<PRESSURE_SURFACE_QUE; i++)
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
135 surface_ring_mbar[i] = ambient_pressure_mbar;
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
136 surface_pressure_mbar = ambient_pressure_mbar;
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
137 surface_pressure_writeIndex = 0; /* index of the oldest value in the ring buffer */
335
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
138 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
139 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
140
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
141 void init_pressure_history(void)
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
142 {
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
143 for(int i=0; i<PRESSURE_HISTORY_SIZE; i++)
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
144 {
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
145 pressure_history_mbar[i] = 1000.0;
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
146 }
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
147 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
148
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
149 uint8_t is_surface_pressure_stable(void)
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
150 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
151 return surface_pressure_stable;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
152 }
335
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
153
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
154 float set_last_surface_pressure_stable(void)
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
155 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
156 surface_pressure_mbar = surface_pressure_stable_value;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
157 return surface_pressure_stable_value;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
158 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
159
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
160 /* iterate backward through the history memory and evaluate the changes pressure changes during the last 30 minutes */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
161 void evaluate_surface_pressure()
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
162 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
163 uint8_t index;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
164 float lastvalue;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
165 uint8_t stablecnt = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
166 uint8_t unstablecnt = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
167 uint8_t EvaluationWindow = PRESSURE_SURFACE_QUE - PRESSURE_SURFACE_EVA_WINDOW; /* do not use the latest 15 values to avoid unstable condition due to something like fin handling */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
168 uint8_t EvaluatedValues = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
169
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
170 lastvalue = surface_ring_mbar[surface_pressure_writeIndex];
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
171 surface_pressure_stable_value = surface_ring_mbar[surface_pressure_writeIndex]; /* default: if no stable value is found return the oldest value */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
172 index = surface_pressure_writeIndex;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
173 surface_pressure_stable = 1;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
174
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
175 if(index == 0)
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
176 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
177 index = PRESSURE_SURFACE_QUE - 1;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
178 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
179 else
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
180 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
181 index = index - 1;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
182 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
183 do
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
184 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
185 if((EvaluatedValues < EvaluationWindow) &&
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
186 (fabs(surface_pressure_stable_value - surface_ring_mbar[index]) > PRESSURE_SURFACE_UNSTABLE_LIMIT)) /* unusual change during last 30 minutes */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
187 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
188 unstablecnt++;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
189 if(unstablecnt > PRESSURE_SURFACE_DETECT_UNSTABLE_CNT)
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
190 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
191 surface_pressure_stable = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
192 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
193 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
194 /* search for a value which does not change for several iterations */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
195 if (fabs(lastvalue - surface_ring_mbar[index]) < PRESSURE_SURFACE_STABLE_LIMIT)
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
196 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
197 stablecnt++;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
198 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
199 else
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
200 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
201 stablecnt = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
202 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
203 if ((stablecnt >= PRESSURE_SURFACE_DETECT_STABLE_CNT) && (surface_pressure_stable == 0)&&(surface_pressure_stable_value == surface_ring_mbar[surface_pressure_writeIndex])) /* pressure is unstable => search for new stable value */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
204 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
205 surface_pressure_stable_value = surface_ring_mbar[index];
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
206 unstablecnt = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
207 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
208
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
209 lastvalue = surface_ring_mbar[index];
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
210
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
211 if(index == 0)
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
212 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
213 index = PRESSURE_SURFACE_QUE - 1;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
214 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
215 else
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
216 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
217 index = index - 1;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
218 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
219 EvaluatedValues++;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
220 } while (index != surface_pressure_writeIndex);
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
221 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
222 void update_surface_pressure(uint8_t call_rhythm_seconds)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
223 {
339
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
224
335
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
225
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
226 if(is_init_pressure_done())
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
227 {
335
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
228 runningAvg = (runningAvg * avgCount + ambient_pressure_mbar) / (avgCount +1);
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
229 avgCount++;
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
230 secondCounterSurfaceRing += call_rhythm_seconds;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
231
335
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
232 if(secondCounterSurfaceRing >= 60)
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
233 {
339
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
234 if(runningAvg < PRESSURE_SURFACE_MAX_MBAR)
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
235 {
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
236 surface_ring_mbar[surface_pressure_writeIndex] = runningAvg;
339
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
237 }
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
238 else
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
239 {
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
240 surface_ring_mbar[surface_pressure_writeIndex] = PRESSURE_SURFACE_MAX_MBAR;
339
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
241 }
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
242 surface_pressure_writeIndex++; /* the write index is now pointing to the oldest value in the buffer which will be overwritten next time */
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
243
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
244 if(surface_pressure_writeIndex == PRESSURE_SURFACE_QUE)
335
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
245 {
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
246 surface_pressure_writeIndex = 0;
335
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
247 }
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
248
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
249 surface_pressure_mbar = surface_ring_mbar[surface_pressure_writeIndex]; /* 30 minutes old measurement */
335
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
250
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
251 secondCounterSurfaceRing = 0;
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
252 avgCount = 1; /* use the current value as starting point but restart the weight decrement of the measurements */
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
253 }
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
254 evaluate_surface_pressure();
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
255 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
256 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
257
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
258 #ifdef DEMOMODE
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
259 float demo_modify_temperature_helper(float bottom_mbar_diff_to_surface)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
260 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
261 const float temperature_surface = 31.0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
262 const float temperature_bottom = 14.0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
263
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
264 const float temperature_difference = temperature_bottom - temperature_surface;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
265
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
266 // range 0.0 - 1.0
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
267 float position_now = (ambient_pressure_mbar - surface_pressure_mbar) / bottom_mbar_diff_to_surface;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
268
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
269 if(position_now <= 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
270 return temperature_surface;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
271
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
272 if(position_now >= 1)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
273 return temperature_bottom;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
274
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
275 return temperature_surface + (temperature_difference * position_now);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
276 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
277
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
278
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
279 uint32_t demo_modify_temperature_and_pressure(int32_t divetime_in_seconds, uint8_t subseconds, float ceiling_mbar)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
280 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
281
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
282 const float descent_rate = 4000/60;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
283 const float ascent_rate = 1000/60;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
284 const uint32_t seconds_descend = (1 * 60) + 30;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
285 const uint32_t turbo_seconds_at_bottom_start = (0 * 60) + 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
286 const uint32_t seconds_descend_and_bottomtime = seconds_descend + turbo_seconds_at_bottom_start + (2 * 60) + 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
287 uint32_t time_elapsed_in_seconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
288 static float ambient_pressure_mbar_memory = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
289 static uint32_t time_last_call = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
290
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
291 if(divetime_in_seconds <= seconds_descend)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
292 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
293 ambient_pressure_mbar = (divetime_in_seconds * descent_rate) + ((float)(subseconds) * descent_rate) + surface_pressure_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
294 ambient_temperature = demo_modify_temperature_helper(descent_rate * seconds_descend);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
295
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
296 time_last_call = divetime_in_seconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
297 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
298 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
299 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
300 if(divetime_in_seconds <= seconds_descend + turbo_seconds_at_bottom_start)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
301 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
302 ambient_pressure_mbar = (seconds_descend * descent_rate) + surface_pressure_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
303 ambient_temperature = demo_modify_temperature_helper(descent_rate * seconds_descend);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
304 ambient_pressure_mbar_memory = ambient_pressure_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
305 time_last_call = divetime_in_seconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
306 return turbo_seconds_at_bottom_start;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
307 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
308 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
309 if(divetime_in_seconds <= seconds_descend_and_bottomtime)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
310 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
311 ambient_pressure_mbar = (seconds_descend * descent_rate) + surface_pressure_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
312 ambient_temperature = demo_modify_temperature_helper(descent_rate * seconds_descend);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
313 ambient_pressure_mbar_memory = ambient_pressure_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
314 time_last_call = divetime_in_seconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
315 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
316 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
317 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
318 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
319 time_elapsed_in_seconds = divetime_in_seconds - time_last_call;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
320 ambient_pressure_mbar = ambient_pressure_mbar_memory - time_elapsed_in_seconds * ascent_rate;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
321
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
322 if(ambient_pressure_mbar < surface_pressure_mbar)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
323 ambient_pressure_mbar = surface_pressure_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
324 else if(ambient_pressure_mbar < ceiling_mbar)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
325 ambient_pressure_mbar = ceiling_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
326
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
327 ambient_temperature = demo_modify_temperature_helper(descent_rate * seconds_descend);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
328 ambient_pressure_mbar_memory = ambient_pressure_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
329 time_last_call = divetime_in_seconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
330 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
331 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
332 }
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
333 #endif
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
334
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
335 uint8_t is_init_pressure_done(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
336 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
337 return pressureSensorInitSuccess;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
338 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
339
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
340 uint8_t init_pressure(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
341 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
342 uint8_t buffer[1];
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
343 buffer[0] = 0x1E; // Reset Command
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
344 uint8_t retValue = 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
345
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
346 pressureSensorInitSuccess = false;
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
347 init_pressure_history();
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
348
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
349 /* Probe new sensor first */
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
350 retValue = I2C_Master_Transmit( DEVICE_PRESSURE_MS5837, buffer, 1);
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
351 if(retValue != HAL_OK)
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
352 {
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
353 PRESSURE_ADDRESS = DEVICE_PRESSURE_MS5803; // use old sensor
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
354 HAL_Delay(100);
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
355 MX_I2C1_Init();
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
356 if (global.I2C_SystemStatus != HAL_OK)
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
357 {
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
358 if (MX_I2C1_TestAndClear() == GPIO_PIN_RESET) {
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
359 MX_I2C1_TestAndClear(); // do it a second time
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
360 }
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
361 MX_I2C1_Init();
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
362 }
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
363 }
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
364 else
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
365 {
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
366 PRESSURE_ADDRESS = DEVICE_PRESSURE_MS5837; // Success, use new sensor
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
367 }
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
368 HAL_Delay(3); //2.8ms according to datasheet
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
369
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
370 buffer[0] = 0x1E; // Reset Command
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
371 retValue = 0xFF;
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
372
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
373 /* Send reset request to pressure sensor */
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
374 retValue = I2C_Master_Transmit( PRESSURE_ADDRESS, buffer, 1);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
375 if(retValue != HAL_OK)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
376 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
377 return (HAL_StatusTypeDef)retValue;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
378 }
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
379 HAL_Delay(3); //2.8ms according to datasheet
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
380
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
381 for(uint8_t i=0;i<7;i++)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
382 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
383 C[i] = get_ci_by_coef_num(i);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
384 }
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
385 // n_crc = crc4(C); // no evaluation at the moment hw 151026
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
386
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
387 C5_x_2p8 = C[5] * 256;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
388 C2_x_2p16 = C[2] * 65536;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
389 C1_x_2p15 = C[1] * 32768;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
390
241
2b9775f71e30 cleanup: factor out I2C1_Status() and cleanup type
Jan Mulder <jlmulder@xs4all.nl>
parents: 186
diff changeset
391 if(global.I2C_SystemStatus == HAL_OK)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
392 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
393 pressureSensorInitSuccess = 1;
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
394 retValue = pressure_update();
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
395
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
396 }
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
397 return retValue;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
398 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
399
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
400
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
401 static uint32_t get_adc(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
402 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
403 uint8_t buffer[1];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
404 uint8_t resivebuf[4];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
405 uint32_t answer = 0;
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
406
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
407 buffer[0] = 0x00; // Get ADC
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
408 I2C_Master_Transmit( PRESSURE_ADDRESS, buffer, 1);
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
409 I2C_Master_Receive( PRESSURE_ADDRESS, resivebuf, 4);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
410 resivebuf[3] = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
411 answer = 256*256 *(uint32_t)resivebuf[0] + 256 * (uint32_t)resivebuf[1] + (uint32_t)resivebuf[2];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
412
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
413 return answer;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
414 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
415
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
416
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
417 static uint16_t get_ci_by_coef_num(uint8_t coef_num)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
418 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
419 uint8_t resivebuf[2];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
420
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
421 uint8_t cmd = CMD_PROM_RD+coef_num*2;
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
422 I2C_Master_Transmit( PRESSURE_ADDRESS, &cmd, 1);
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
423 I2C_Master_Receive( PRESSURE_ADDRESS, resivebuf, 2);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
424 return (256*(uint16_t)resivebuf[0]) + (uint16_t)resivebuf[1];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
425 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
426
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
427
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
428
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
429 uint8_t pressure_update(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
430 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
431 HAL_StatusTypeDef statusReturn = HAL_TIMEOUT;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
432
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
433 statusReturn = pressure_sensor_get_data();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
434 pressure_calculation();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
435 return (uint8_t)statusReturn;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
436 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
437
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
438 /* Switch between pressure and temperature measurement with every successful read operation */
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
439 void pressure_update_alternating(void)
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
440 {
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
441 static uint8_t getTemperature= 0;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
442
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
443 if(getTemperature)
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
444 {
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
445 if(pressure_sensor_get_temperature_raw() == HAL_OK)
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
446 {
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
447 getTemperature = 0;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
448 }
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
449 }
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
450 else
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
451 {
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
452 if(pressure_sensor_get_pressure_raw() == HAL_OK)
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
453 {
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
454 getTemperature = 1;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
455 }
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
456 }
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
457 pressure_calculation();
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
458 return;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
459 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
460
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
461 static uint32_t pressure_sensor_get_one_value(uint8_t cmd, HAL_StatusTypeDef *statusReturn)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
462 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
463 uint8_t command = CMD_ADC_CONV + cmd;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
464 HAL_StatusTypeDef statusReturnTemp = HAL_TIMEOUT;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
465
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
466 statusReturnTemp = I2C_Master_Transmit( PRESSURE_ADDRESS, &command, 1);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
467
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
468 if(statusReturn)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
469 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
470 *statusReturn = statusReturnTemp;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
471 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
472
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
473 switch (cmd & 0x0f) // wait necessary conversion time
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
474 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
475 case CMD_ADC_256 : HAL_Delay(1); break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
476 case CMD_ADC_512 : HAL_Delay(3); break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
477 case CMD_ADC_1024: HAL_Delay(4); break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
478 case CMD_ADC_2048: HAL_Delay(6); break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
479 case CMD_ADC_4096: HAL_Delay(10); break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
480 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
481 return get_adc();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
482 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
483
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
484
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
485 static HAL_StatusTypeDef pressure_sensor_get_data(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
486 {
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
487 uint32_t requestedValue = 0;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
488 HAL_StatusTypeDef statusReturn1 = HAL_TIMEOUT;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
489 HAL_StatusTypeDef statusReturn2 = HAL_TIMEOUT;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
490
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
491
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
492
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
493 requestedValue = pressure_sensor_get_one_value(CMD_ADC_D2 + CMD_ADC_1024, &statusReturn2);
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
494 if (statusReturn2 == HAL_OK)
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
495 {
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
496 D2 = requestedValue;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
497 }
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
498
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
499 requestedValue = pressure_sensor_get_one_value(CMD_ADC_D1 + CMD_ADC_1024, &statusReturn1);
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
500 if (statusReturn1 == HAL_OK)
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
501 {
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
502 D1 = requestedValue;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
503 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
504 if(statusReturn2 > statusReturn1) // if anything is not HAL_OK (0x00) or worse
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
505 return statusReturn2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
506 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
507 return statusReturn1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
508 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
509
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
510
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
511 HAL_StatusTypeDef pressure_sensor_get_pressure_raw(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
512 {
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
513 uint32_t requestedValue = 0;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
514 HAL_StatusTypeDef statusReturn = HAL_TIMEOUT;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
515
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
516 requestedValue = pressure_sensor_get_one_value(CMD_ADC_D1 + CMD_ADC_1024, &statusReturn);
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
517 if (statusReturn == HAL_OK)
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
518 {
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
519 D1 = requestedValue;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
520 }
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
521
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
522 return statusReturn;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
523 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
524
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
525
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
526 HAL_StatusTypeDef pressure_sensor_get_temperature_raw(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
527 {
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
528 uint32_t requestedValue = 0;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
529 HAL_StatusTypeDef statusReturn = HAL_TIMEOUT;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
530
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
531 requestedValue = pressure_sensor_get_one_value(CMD_ADC_D2 + CMD_ADC_1024, &statusReturn);
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
532 if (statusReturn == HAL_OK)
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
533 {
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
534 D2 = requestedValue;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
535 }
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
536 return statusReturn;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
537 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
538
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
539
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
540 #ifdef SIMULATE_PRESSURE
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
541 void pressure_simulation()
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
542 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
543 static uint32_t tickstart = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
544 static float pressure_sim_mbar = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
545 static uint32_t passedSecond = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
546 static uint32_t secondtick = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
547
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
548 uint32_t lasttick = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
549
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
550
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
551
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
552 if( tickstart == 0)
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
553 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
554 tickstart = HAL_GetTick(); /* init time stamp */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
555 secondtick = tickstart;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
556 pressure_sim_mbar = 1000;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
557 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
558
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
559 lasttick = HAL_GetTick();
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
560 if(time_elapsed_ms(secondtick,lasttick) > 1000) /* one second passed since last tick */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
561 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
562 secondtick = lasttick;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
563 passedSecond++;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
564
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
565 #ifdef DIVE_AFTER_LANDING
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
566 if(passedSecond < 10) pressure_sim_mbar = 1000.0; /* stay stable for 10 seconds */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
567 else if(passedSecond < 300) pressure_sim_mbar -= 1.0; /* decrease pressure in 5 minutes target 770mbar => delta 330 */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
568 else if(passedSecond < 900) pressure_sim_mbar += 0.0; /*stay stable 10 minutes*/
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
569 else if(passedSecond < 1500) pressure_sim_mbar += 0.5; /* return to 1 bar in 10 Minutes*/
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
570 else if(passedSecond < 1800) pressure_sim_mbar += 0.0; /* 5 minutes break */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
571 else if(passedSecond < 2000) pressure_sim_mbar += 10.0; /* start dive */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
572 else if(passedSecond < 2300) pressure_sim_mbar += 0.0; /* stay on depth */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
573 else if(passedSecond < 2500) pressure_sim_mbar -= 10.0; /* return to surface */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
574 else pressure_sim_mbar = 1000.0; /* final state */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
575 #else /* short dive */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
576 if(passedSecond < 10) pressure_sim_mbar = 1000.0; /* stay stable for 10 seconds */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
577 else if(passedSecond < 180) pressure_sim_mbar += 10.0; /* Start dive */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
578 else if(passedSecond < 300) pressure_sim_mbar += 0.0; /*stay on depth*/
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
579 else if(passedSecond < 460) pressure_sim_mbar -= 10.0; /* return to surface */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
580 else if(passedSecond < 600) pressure_sim_mbar += 0.0; /* stay */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
581 else if(passedSecond < 610) pressure_sim_mbar = 1000.0; /* get ready for second dive */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
582 else if(passedSecond < 780) pressure_sim_mbar += 10.0; /* Start dive */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
583 else if(passedSecond < 900) pressure_sim_mbar += 0.0; /*stay on depth*/
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
584 else if(passedSecond < 1060) pressure_sim_mbar -= 10.0; /* return to surface */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
585 else if(passedSecond < 1200) pressure_sim_mbar += 0.0; /* stay */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
586 else pressure_sim_mbar = 1000.0; /* final state */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
587 #endif
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
588 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
589
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
590
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
591 ambient_pressure_mbar = pressure_sim_mbar;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
592 ambient_temperature = 25.0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
593 return;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
594 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
595
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
596 #endif
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
597
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
598 void pressure_calculation(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
599 {
241
2b9775f71e30 cleanup: factor out I2C1_Status() and cleanup type
Jan Mulder <jlmulder@xs4all.nl>
parents: 186
diff changeset
600 if(global.I2C_SystemStatus != HAL_OK)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
601 return;
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
602
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
603 #ifdef SIMULATE_PRESSURE
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
604 pressure_simulation();
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
605 #else
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
606 pressure_calculation_AN520_004_mod_MS5803_30BA__09_2015();
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
607 #endif
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
608 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
609
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
610 static uint8_t pressure_plausible(float pressurevalue)
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
611 {
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
612 static uint8_t pressurewriteindex = 0;
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
613 uint8_t retval = 0;
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
614 uint8_t index;
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
615 float pressure_average = 0;
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
616
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
617 for(index = 0; index < PRESSURE_HISTORY_SIZE; index++)
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
618 {
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
619 pressure_average += pressure_history_mbar[index];
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
620 }
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
621 pressure_average /= PRESSURE_HISTORY_SIZE;
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
622 if(pressure_average == 1000.0) /* first pressure calculation */
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
623 {
339
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
624 if(fabs(pressurevalue - pressure_average) < 11000.0) /* just in case a reset occur during dive assume value equal < 100m as valid */
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
625 {
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
626 for(index = 0; index < PRESSURE_HISTORY_SIZE; index++)
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
627 {
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
628 pressure_history_mbar[index] = pressurevalue; /* set history to current value */
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
629 retval = 1;
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
630 }
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
631 }
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
632 }
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
633 else
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
634 {
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
635 if(fabs(pressurevalue - pressure_average) < PRESSURE_JUMP_VALID_MBAR)
339
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
636 {
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
637 pressure_history_mbar[pressurewriteindex++] = pressurevalue;
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
638 pressurewriteindex &= 0x7; /* wrap around if necessary */
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
639 retval = 1;
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
640 }
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
641 }
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
642
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
643 return retval;
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
644 }
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
645
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
646 static void pressure_calculation_AN520_004_mod_MS5803_30BA__09_2015(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
647 {
335
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
648 static float runningAvg = 0;
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
649 static uint8_t avgCnt = 0;
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
650
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
651 uint32_t local_D1; // ADC value of the pressure conversion
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
652 uint32_t local_D2; // ADC value of the temperature conversion
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
653 int32_t local_Px10; // compensated pressure value
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
654 int32_t local_Tx100; // compensated temperature value
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
655 int64_t local_dT; // int32_t, difference between actual and measured temperature
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
656 int64_t local_OFF; // offset at actual temperature
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
657 int64_t local_SENS; // sensitivity at actual temperature
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
658
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
659 float calc_pressure;
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
660
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
661 int64_t T2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
662 int64_t OFF2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
663 int64_t SENS2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
664
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
665 local_D1 = D1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
666 local_D2 = D2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
667
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
668 local_dT = ((int64_t)local_D2) - ((int64_t)C[5]) * 256; //pow(2,8);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
669 local_OFF = ((int64_t)C[2]) * 65536 + local_dT * ((int64_t)C[4]) / 128; // pow(2,16), pow(2,7)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
670 local_SENS = ((int64_t)C[1]) * 32768 + local_dT * ((int64_t)C[3]) / 256; // pow(2,15), pow(2,8)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
671
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
672 local_Tx100 = (int32_t)(2000 + (local_dT * ((int64_t)C[6])) / 8388608);// pow(2,23)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
673
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
674
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
675 if(local_Tx100 < 2000) // low temperature
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
676 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
677 T2 = 3 * local_dT;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
678 T2 *= local_dT;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
679 T2 /= 8589934592;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
680
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
681 OFF2 = ((int64_t)local_Tx100) - 2000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
682 OFF2 *= OFF2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
683 OFF2 *= 3;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
684 OFF2 /= 2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
685
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
686 SENS2 = ((int64_t)local_Tx100) - 2000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
687 SENS2 *= SENS2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
688 SENS2 *= 5;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
689 SENS2 /= 8;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
690
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
691 local_Tx100 -= (int32_t)T2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
692 local_OFF -= OFF2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
693 local_SENS -= SENS2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
694 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
695 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
696 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
697 T2 = 7 * local_dT;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
698 T2 *= local_dT;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
699 T2 /= 137438953472;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
700
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
701 OFF2 = ((int64_t)local_Tx100) - 2000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
702 OFF2 *= OFF2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
703 OFF2 /= 16;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
704
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
705 local_Tx100 -= (int32_t)T2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
706 local_OFF -= OFF2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
707 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
708
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
709 local_Px10 = (int32_t)(
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
710 (((int64_t)((local_D1 * local_SENS) / 2097152)) - local_OFF)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
711 / 8192 );// )) / 10; // pow(2,21), pow(2,13)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
712
339
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
713 ambient_temperature = ((float)local_Tx100) / 100;
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
714 ambient_temperature += temperature_offset;
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
715
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
716 calc_pressure = ((float)local_Px10) / 10;
339
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
717 calc_pressure += pressure_offset;
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
718
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
719 if(pressure_plausible(calc_pressure))
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
720 {
335
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
721 runningAvg = (avgCnt * runningAvg + calc_pressure) / (avgCnt + 1);
339
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
722 if (avgCnt < 10) /* build an average considering the last measurements to have a weight "1 of 10" */
335
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
723 { /* Main reason for this is the jitter of up to +-10 HPa in surface mode which is caused */
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
724 avgCnt++; /* by the measurement range of the sensor which is focused on under water pressure measurement */
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
725 }
c11ce8c885d3 Use average calculation for pressure: precondition was that pressure values jittered +- 10 HPa from one capture (once a second) to the other. Basically pressure is measured several times a second => using these values in an additional history calculation reduces the jitter down to +-1 per second
ideenmodellierer
parents: 331
diff changeset
726 ambient_pressure_mbar = runningAvg;
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
727 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
728 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
729
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
730
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
731 /* taken from AN520 by meas-spec.com dated 9. Aug. 2011
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
732 * short and int are both 16bit according to AVR/GCC google results
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
733 */
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
734 /*static uint8_t crc4(uint16_t n_prom[])
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
735 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
736 uint16_t cnt; // simple counter
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
737 uint16_t n_rem; // crc reminder
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
738 uint16_t crc_read; // original value of the crc
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
739 uint8_t n_bit;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
740 n_rem = 0x00;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
741 crc_read=n_prom[7]; //save read CRC
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
742 n_prom[7]=(0xFF00 & (n_prom[7])); //CRC byte is replaced by 0
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
743 for (cnt = 0; cnt < 16; cnt++) // operation is performed on bytes
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
744 { // choose LSB or MSB
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
745 if (cnt%2==1) n_rem ^= (uint16_t) ((n_prom[cnt>>1]) & 0x00FF);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
746 else n_rem ^= (uint16_t) (n_prom[cnt>>1]>>8);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
747 for (n_bit = 8; n_bit > 0; n_bit--)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
748 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
749 if (n_rem & (0x8000))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
750 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
751 n_rem = (n_rem << 1) ^ 0x3000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
752 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
753 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
754 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
755 n_rem = (n_rem << 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
756 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
757 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
758 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
759 n_rem= (0x000F & (n_rem >> 12)); // // final 4-bit reminder is CRC code
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
760 n_prom[7]=crc_read; // restore the crc_read to its original place
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
761 return (n_rem ^ 0x00);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
762 }
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
763
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
764 void test_calculation(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
765 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
766 C1 = 29112;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
767 C2 = 26814;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
768 C3 = 19125;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
769 C4 = 17865;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
770 C5 = 32057;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
771 C6 = 31305;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
772
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
773 C2_x_2p16 = C2 * 65536;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
774 C1_x_2p15 = C1 * 32768;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
775
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
776 D1 = 4944364;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
777 D2 = 8198974;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
778 pressure_calculation() ;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
779 };
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
780 */
339
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
781 void pressure_set_offset (float pressureOffset, float temperatureOffset)
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
782 {
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
783 if(pressure_offset != pressureOffset) /* we received a new value => reinit surface que */
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
784 {
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
785 ambient_pressure_mbar -= pressure_offset; /* revert old value */
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
786 ambient_pressure_mbar += pressureOffset; /* apply new offset */
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
787 init_surface_ring(1);
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
788 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
789
339
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
790 pressure_offset = pressureOffset;
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
791 temperature_offset = temperatureOffset;
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
792 }
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
793
37f45300bc2e Apply averaging to pressure measurement: In pre versions calculated pressure value jittered +/-10hPa. Since we measure the pressure several time a second but only use one value a second, calc average including not used values
ideenmodellierer
parents: 335
diff changeset
794