annotate Small_CPU/Src/pressure.c @ 984:41136649b90d GasConsumption

Improvment temperature measurent: In the previous verion no plausibility check for over temperature values was done. In addition the temperature display switches fast between e.g. 24 and 25 in case the value is 24.9 because of measurement tolerances. To avoid this a hysterese was added to the display function.
author Ideenmodellierer
date Sat, 29 Mar 2025 14:56:08 +0100 (3 weeks ago)
parents 06aaccaf2e02
children
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
535
666cafac87ab Increased max value for surface pressure:
Ideenmodellierer
parents: 488
diff changeset
52 #define PRESSURE_SURFACE_MAX_MBAR (1060.0f) /* It is unlikely that pressure at surface is greater than this value => clip to it */
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
53
688
8c92f7743e14 Added sanity check for temperature and pressure values:
Ideenmodellierer
parents: 579
diff changeset
54 #define PRESSURE_MINIMUM (0.0f)
984
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
55 #define TEMPERATURE_MINIMUM (-40.0f)
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
56 #define TEMPERATURE_MAXIMUM (80.0f)
688
8c92f7743e14 Added sanity check for temperature and pressure values:
Ideenmodellierer
parents: 579
diff changeset
57
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
58 #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
59 #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
60 #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
61 #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
62 #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
63 #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
64
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
65
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
66 static uint8_t PRESSURE_ADDRESS = DEVICE_PRESSURE_MS5803; /* Default Address */
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
67
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
68 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
69 //void pressure_calculation_new(void);
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
70 //void pressure_calculation_old(void);
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
71 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
72 //static uint8_t crc4(uint16_t n_prom[]);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
73
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
74 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
75 static uint32_t get_adc(void);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
76 uint8_t pressureSensorInitSuccess = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
77
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
78 static uint16_t C[8] = { 1 };
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
79 static uint32_t D1 = 1;
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
80 static uint32_t D2 = 1;
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
81 //static uint8_t n_crc;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
82
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
83 /*
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
84 short C2plus10000 = -1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
85 short C3plus200 = -1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
86 short C4minus250 = -1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
87 short UT1 = -1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
88 short C6plus100 = -1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
89 */
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
90 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
91 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
92
984
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
93 static float ambient_temperature = 20.0;
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
94 static float ambient_pressure_mbar = 1000.0;
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
95 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
96 static float surface_ring_mbar[PRESSURE_SURFACE_QUE] = { 0 };
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
97
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
98 static uint8_t surface_pressure_writeIndex = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
99 static float surface_pressure_stable_value = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
100 static uint8_t surface_pressure_stable = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
101
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
102 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
103 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
104 static float runningAvg = 0;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
105
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
106 float get_temperature(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
107 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
108 return ambient_temperature;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
109 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
110
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
111 float get_pressure_mbar(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
112 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
113 return ambient_pressure_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
114 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
115
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
116 float get_surface_mbar(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
117 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
118 return surface_pressure_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
119 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
120
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
121
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
122 void init_surface_ring(uint8_t force)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
123 {
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
124 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
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 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
127 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
128 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
129
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
130 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
131 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
132 surface_pressure_mbar = ambient_pressure_mbar;
858
08ea8e9d6cfe Bugfix initialisation of surface pressure:
Ideenmodellierer
parents: 846
diff changeset
133 surface_pressure_stable_value = surface_pressure_mbar;
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
134 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
135 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
136 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
137
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
138 uint8_t is_surface_pressure_stable(void)
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
139 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
140 return surface_pressure_stable;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
141 }
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
142
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
143 float set_last_surface_pressure_stable(void)
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
144 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
145 surface_pressure_mbar = surface_pressure_stable_value;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
146 return surface_pressure_stable_value;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
147 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
148
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
149 /* 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
150 void evaluate_surface_pressure()
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
151 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
152 uint8_t index;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
153 float lastvalue;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
154 uint8_t stablecnt = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
155 uint8_t unstablecnt = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
156 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
157 uint8_t EvaluatedValues = 0;
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 lastvalue = surface_ring_mbar[surface_pressure_writeIndex];
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
160 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
161 index = surface_pressure_writeIndex;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
162 surface_pressure_stable = 1;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
163
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
164 if(index == 0)
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
165 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
166 index = PRESSURE_SURFACE_QUE - 1;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
167 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
168 else
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 index = index - 1;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
171 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
172 do
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
173 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
174 if((EvaluatedValues < EvaluationWindow) &&
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
175 (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
176 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
177 unstablecnt++;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
178 if(unstablecnt > PRESSURE_SURFACE_DETECT_UNSTABLE_CNT)
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
179 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
180 surface_pressure_stable = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
181 }
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 /* search for a value which does not change for several iterations */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
184 if (fabs(lastvalue - surface_ring_mbar[index]) < PRESSURE_SURFACE_STABLE_LIMIT)
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
185 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
186 stablecnt++;
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 else
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
189 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
190 stablecnt = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
191 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
192 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
193 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
194 surface_pressure_stable_value = surface_ring_mbar[index];
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
195 unstablecnt = 0;
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
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
198 lastvalue = surface_ring_mbar[index];
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
199
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
200 if(index == 0)
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
201 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
202 index = PRESSURE_SURFACE_QUE - 1;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
203 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
204 else
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
205 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
206 index = index - 1;
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 EvaluatedValues++;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
209 } while (index != surface_pressure_writeIndex);
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
210 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
211 void update_surface_pressure(uint8_t call_rhythm_seconds)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
212 {
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
213 if(is_init_pressure_done())
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
214 {
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
215 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
216 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
217 secondCounterSurfaceRing += call_rhythm_seconds;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
218
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
219 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
220 {
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
221 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
222 {
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
223 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
224 }
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
225 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
226 {
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
227 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
228 }
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
229 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
230
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
231 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
232 {
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
233 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
234 }
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
235
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
236 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
237
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
238 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
239 avgCount = 1; /* use the current value as starting point but restart the weight decrement of the measurements */
858
08ea8e9d6cfe Bugfix initialisation of surface pressure:
Ideenmodellierer
parents: 846
diff changeset
240
08ea8e9d6cfe Bugfix initialisation of surface pressure:
Ideenmodellierer
parents: 846
diff changeset
241 evaluate_surface_pressure();
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
242 }
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
243 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
244 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
245
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
246 #ifdef DEMOMODE
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
247 float demo_modify_temperature_helper(float bottom_mbar_diff_to_surface)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
248 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
249 const float temperature_surface = 31.0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
250 const float temperature_bottom = 14.0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
251
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
252 const float temperature_difference = temperature_bottom - temperature_surface;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
253
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
254 // range 0.0 - 1.0
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
255 float position_now = (ambient_pressure_mbar - surface_pressure_mbar) / bottom_mbar_diff_to_surface;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
256
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
257 if(position_now <= 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
258 return temperature_surface;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
259
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
260 if(position_now >= 1)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
261 return temperature_bottom;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
262
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
263 return temperature_surface + (temperature_difference * position_now);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
264 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
265
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
266
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
267 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
268 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
269
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
270 const float descent_rate = 4000/60;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
271 const float ascent_rate = 1000/60;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
272 const uint32_t seconds_descend = (1 * 60) + 30;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
273 const uint32_t turbo_seconds_at_bottom_start = (0 * 60) + 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
274 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
275 uint32_t time_elapsed_in_seconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
276 static float ambient_pressure_mbar_memory = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
277 static uint32_t time_last_call = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
278
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
279 if(divetime_in_seconds <= seconds_descend)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
280 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
281 ambient_pressure_mbar = (divetime_in_seconds * descent_rate) + ((float)(subseconds) * descent_rate) + surface_pressure_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
282 ambient_temperature = demo_modify_temperature_helper(descent_rate * seconds_descend);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
283
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
284 time_last_call = divetime_in_seconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
285 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
286 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
287 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
288 if(divetime_in_seconds <= seconds_descend + turbo_seconds_at_bottom_start)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
289 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
290 ambient_pressure_mbar = (seconds_descend * descent_rate) + surface_pressure_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
291 ambient_temperature = demo_modify_temperature_helper(descent_rate * seconds_descend);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
292 ambient_pressure_mbar_memory = ambient_pressure_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
293 time_last_call = divetime_in_seconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
294 return turbo_seconds_at_bottom_start;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
295 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
296 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
297 if(divetime_in_seconds <= seconds_descend_and_bottomtime)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
298 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
299 ambient_pressure_mbar = (seconds_descend * descent_rate) + surface_pressure_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
300 ambient_temperature = demo_modify_temperature_helper(descent_rate * seconds_descend);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
301 ambient_pressure_mbar_memory = ambient_pressure_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
302 time_last_call = divetime_in_seconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
303 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
304 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
305 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
306 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
307 time_elapsed_in_seconds = divetime_in_seconds - time_last_call;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
308 ambient_pressure_mbar = ambient_pressure_mbar_memory - time_elapsed_in_seconds * ascent_rate;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
309
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
310 if(ambient_pressure_mbar < surface_pressure_mbar)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
311 ambient_pressure_mbar = surface_pressure_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
312 else if(ambient_pressure_mbar < ceiling_mbar)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
313 ambient_pressure_mbar = ceiling_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
314
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
315 ambient_temperature = demo_modify_temperature_helper(descent_rate * seconds_descend);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
316 ambient_pressure_mbar_memory = ambient_pressure_mbar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
317 time_last_call = divetime_in_seconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
318 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
319 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
320 }
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
321 #endif
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
322
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
323 uint8_t is_init_pressure_done(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
324 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
325 return pressureSensorInitSuccess;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
326 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
327
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
328 uint8_t init_pressure(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
329 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
330 uint8_t buffer[1];
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
331 buffer[0] = 0x1E; // Reset Command
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
332 uint8_t retValue = 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
333
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
334 pressureSensorInitSuccess = false;
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
335
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
336 /* Probe new sensor first */
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
337 retValue = I2C_Master_Transmit( DEVICE_PRESSURE_MS5837, buffer, 1);
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
338 if(retValue != HAL_OK)
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
339 {
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
340 PRESSURE_ADDRESS = DEVICE_PRESSURE_MS5803; // use old sensor
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
341 HAL_Delay(100);
488
9eeab3fead8f Added "I2C_DeInit();" in hardware detection routines. It's the recommended way
heinrichsweikamp
parents: 480
diff changeset
342 I2C_DeInit();
9eeab3fead8f Added "I2C_DeInit();" in hardware detection routines. It's the recommended way
heinrichsweikamp
parents: 480
diff changeset
343 HAL_Delay(100);
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
344 MX_I2C1_Init();
488
9eeab3fead8f Added "I2C_DeInit();" in hardware detection routines. It's the recommended way
heinrichsweikamp
parents: 480
diff changeset
345 HAL_Delay(100);
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
346 }
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
347 else
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
348 {
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
349 PRESSURE_ADDRESS = DEVICE_PRESSURE_MS5837; // Success, use new sensor
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
350 }
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
351 HAL_Delay(3); //2.8ms according to datasheet
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 buffer[0] = 0x1E; // Reset Command
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
354 retValue = 0xFF;
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
355
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
356 /* Send reset request to pressure sensor */
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
357 retValue = I2C_Master_Transmit( PRESSURE_ADDRESS, buffer, 1);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
358 if(retValue != HAL_OK)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
359 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
360 return (HAL_StatusTypeDef)retValue;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
361 }
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
362 HAL_Delay(3); //2.8ms according to datasheet
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
363
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
364 for(uint8_t i=0;i<7;i++)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
365 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
366 C[i] = get_ci_by_coef_num(i);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
367 }
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
368 // n_crc = crc4(C); // no evaluation at the moment hw 151026
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
369
241
2b9775f71e30 cleanup: factor out I2C1_Status() and cleanup type
Jan Mulder <jlmulder@xs4all.nl>
parents: 186
diff changeset
370 if(global.I2C_SystemStatus == HAL_OK)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
371 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
372 pressureSensorInitSuccess = 1;
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
373 retValue = pressure_update();
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
374 }
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
375 return retValue;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
376 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
377
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
378
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
379 static uint32_t get_adc(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
380 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
381 uint8_t buffer[1];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
382 uint8_t resivebuf[4];
474
4be72d55b09a Added error detection for reading of ADC values in sleep mode:
ideenmodellierer
parents: 403
diff changeset
383 uint32_t answer = 0xFFFFFFFF;
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
384
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
385 buffer[0] = 0x00; // Get ADC
474
4be72d55b09a Added error detection for reading of ADC values in sleep mode:
ideenmodellierer
parents: 403
diff changeset
386 if(I2C_Master_Transmit( PRESSURE_ADDRESS, buffer, 1) == HAL_OK)
4be72d55b09a Added error detection for reading of ADC values in sleep mode:
ideenmodellierer
parents: 403
diff changeset
387 {
4be72d55b09a Added error detection for reading of ADC values in sleep mode:
ideenmodellierer
parents: 403
diff changeset
388 if(I2C_Master_Receive( PRESSURE_ADDRESS, resivebuf, 4) == HAL_OK)
4be72d55b09a Added error detection for reading of ADC values in sleep mode:
ideenmodellierer
parents: 403
diff changeset
389 {
4be72d55b09a Added error detection for reading of ADC values in sleep mode:
ideenmodellierer
parents: 403
diff changeset
390 resivebuf[3] = 0;
4be72d55b09a Added error detection for reading of ADC values in sleep mode:
ideenmodellierer
parents: 403
diff changeset
391 answer = 256*256 *(uint32_t)resivebuf[0] + 256 * (uint32_t)resivebuf[1] + (uint32_t)resivebuf[2];
4be72d55b09a Added error detection for reading of ADC values in sleep mode:
ideenmodellierer
parents: 403
diff changeset
392 }
4be72d55b09a Added error detection for reading of ADC values in sleep mode:
ideenmodellierer
parents: 403
diff changeset
393 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
394 return answer;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
395 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
396
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
397
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
398 static uint16_t get_ci_by_coef_num(uint8_t coef_num)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
399 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
400 uint8_t resivebuf[2];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
401
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
402 uint8_t cmd = CMD_PROM_RD+coef_num*2;
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
403 I2C_Master_Transmit( PRESSURE_ADDRESS, &cmd, 1);
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
404 I2C_Master_Receive( PRESSURE_ADDRESS, resivebuf, 2);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
405 return (256*(uint16_t)resivebuf[0]) + (uint16_t)resivebuf[1];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
406 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
407
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
408
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
409
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
410 uint8_t pressure_update(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
411 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
412 HAL_StatusTypeDef statusReturn = HAL_TIMEOUT;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
413
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
414 statusReturn = pressure_sensor_get_data();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
415 pressure_calculation();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
416 return (uint8_t)statusReturn;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
417 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
418
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
419 /* Switch between pressure and temperature measurement with every successful read operation */
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
420 void pressure_update_alternating(void)
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
421 {
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
422 static uint8_t getTemperature= 0;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
423
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
424 if(getTemperature)
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
425 {
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
426 if(pressure_sensor_get_temperature_raw() == HAL_OK)
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
427 {
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
428 getTemperature = 0;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
429 }
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
430 }
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
431 else
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
432 {
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
433 if(pressure_sensor_get_pressure_raw() == HAL_OK)
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
434 {
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
435 getTemperature = 1;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
436 }
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
437 }
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
438 pressure_calculation();
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
439 return;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
440 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
441
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
442 static uint32_t pressure_sensor_get_one_value(uint8_t cmd, HAL_StatusTypeDef *statusReturn)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
443 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
444 uint8_t command = CMD_ADC_CONV + cmd;
474
4be72d55b09a Added error detection for reading of ADC values in sleep mode:
ideenmodellierer
parents: 403
diff changeset
445 uint32_t adcValue = 0;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
446 HAL_StatusTypeDef statusReturnTemp = HAL_TIMEOUT;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
447
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
448 statusReturnTemp = I2C_Master_Transmit( PRESSURE_ADDRESS, &command, 1);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
449
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
450 if(statusReturn)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
451 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
452 *statusReturn = statusReturnTemp;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
453 }
479
4b9427ae0a65 Bugfix unintended else condition:
ideenmodellierer
parents: 474
diff changeset
454
4b9427ae0a65 Bugfix unintended else condition:
ideenmodellierer
parents: 474
diff changeset
455 switch (cmd & 0x0f) // wait necessary conversion time
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
456 {
488
9eeab3fead8f Added "I2C_DeInit();" in hardware detection routines. It's the recommended way
heinrichsweikamp
parents: 480
diff changeset
457 case CMD_ADC_256 : HAL_Delay(2); break;
9eeab3fead8f Added "I2C_DeInit();" in hardware detection routines. It's the recommended way
heinrichsweikamp
parents: 480
diff changeset
458 case CMD_ADC_512 : HAL_Delay(4); break;
9eeab3fead8f Added "I2C_DeInit();" in hardware detection routines. It's the recommended way
heinrichsweikamp
parents: 480
diff changeset
459 case CMD_ADC_1024: HAL_Delay(5); break;
9eeab3fead8f Added "I2C_DeInit();" in hardware detection routines. It's the recommended way
heinrichsweikamp
parents: 480
diff changeset
460 case CMD_ADC_2048: HAL_Delay(7); break;
9eeab3fead8f Added "I2C_DeInit();" in hardware detection routines. It's the recommended way
heinrichsweikamp
parents: 480
diff changeset
461 case CMD_ADC_4096: HAL_Delay(11); break;
479
4b9427ae0a65 Bugfix unintended else condition:
ideenmodellierer
parents: 474
diff changeset
462 default:
4b9427ae0a65 Bugfix unintended else condition:
ideenmodellierer
parents: 474
diff changeset
463 break;
4b9427ae0a65 Bugfix unintended else condition:
ideenmodellierer
parents: 474
diff changeset
464 }
4b9427ae0a65 Bugfix unintended else condition:
ideenmodellierer
parents: 474
diff changeset
465 adcValue = get_adc();
488
9eeab3fead8f Added "I2C_DeInit();" in hardware detection routines. It's the recommended way
heinrichsweikamp
parents: 480
diff changeset
466 /* if(adcValue == 0xFFFFFFFF)
479
4b9427ae0a65 Bugfix unintended else condition:
ideenmodellierer
parents: 474
diff changeset
467 {
4b9427ae0a65 Bugfix unintended else condition:
ideenmodellierer
parents: 474
diff changeset
468 if(statusReturn)
474
4be72d55b09a Added error detection for reading of ADC values in sleep mode:
ideenmodellierer
parents: 403
diff changeset
469 {
4be72d55b09a Added error detection for reading of ADC values in sleep mode:
ideenmodellierer
parents: 403
diff changeset
470 *statusReturn = HAL_ERROR;
4be72d55b09a Added error detection for reading of ADC values in sleep mode:
ideenmodellierer
parents: 403
diff changeset
471 }
488
9eeab3fead8f Added "I2C_DeInit();" in hardware detection routines. It's the recommended way
heinrichsweikamp
parents: 480
diff changeset
472 }*/
9eeab3fead8f Added "I2C_DeInit();" in hardware detection routines. It's the recommended way
heinrichsweikamp
parents: 480
diff changeset
473
474
4be72d55b09a Added error detection for reading of ADC values in sleep mode:
ideenmodellierer
parents: 403
diff changeset
474 return adcValue;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
475 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
476
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
477
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
478 static HAL_StatusTypeDef pressure_sensor_get_data(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
479 {
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
480 uint32_t requestedValue = 0;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
481 HAL_StatusTypeDef statusReturn1 = HAL_TIMEOUT;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
482 HAL_StatusTypeDef statusReturn2 = HAL_TIMEOUT;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
483
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
484
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
485
488
9eeab3fead8f Added "I2C_DeInit();" in hardware detection routines. It's the recommended way
heinrichsweikamp
parents: 480
diff changeset
486 requestedValue = pressure_sensor_get_one_value(CMD_ADC_D2 + CMD_ADC_4096, &statusReturn2);
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
487 if (statusReturn2 == HAL_OK)
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
488 {
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
489 D2 = requestedValue;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
490 }
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
491
488
9eeab3fead8f Added "I2C_DeInit();" in hardware detection routines. It's the recommended way
heinrichsweikamp
parents: 480
diff changeset
492 requestedValue = pressure_sensor_get_one_value(CMD_ADC_D1 + CMD_ADC_4096, &statusReturn1);
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
493 if (statusReturn1 == HAL_OK)
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
494 {
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
495 D1 = requestedValue;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
496 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
497 if(statusReturn2 > statusReturn1) // if anything is not HAL_OK (0x00) or worse
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
498 return statusReturn2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
499 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
500 return statusReturn1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
501 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
502
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
503
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
504 HAL_StatusTypeDef pressure_sensor_get_pressure_raw(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
505 {
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
506 uint32_t requestedValue = 0;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
507 HAL_StatusTypeDef statusReturn = HAL_TIMEOUT;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
508
488
9eeab3fead8f Added "I2C_DeInit();" in hardware detection routines. It's the recommended way
heinrichsweikamp
parents: 480
diff changeset
509 requestedValue = pressure_sensor_get_one_value(CMD_ADC_D1 + CMD_ADC_4096, &statusReturn);
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
510 if (statusReturn == HAL_OK)
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
511 {
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
512 D1 = requestedValue;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
513 }
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
514
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
515 return statusReturn;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
516 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
517
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
518
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
519 HAL_StatusTypeDef pressure_sensor_get_temperature_raw(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
520 {
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
521 uint32_t requestedValue = 0;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
522 HAL_StatusTypeDef statusReturn = HAL_TIMEOUT;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
523
488
9eeab3fead8f Added "I2C_DeInit();" in hardware detection routines. It's the recommended way
heinrichsweikamp
parents: 480
diff changeset
524 requestedValue = pressure_sensor_get_one_value(CMD_ADC_D2 + CMD_ADC_4096, &statusReturn);
276
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
525 if (statusReturn == HAL_OK)
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
526 {
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
527 D2 = requestedValue;
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
528 }
8e9c502c0b06 Rework pressure/ temperature data aquisition
ideenmodellierer
parents: 241
diff changeset
529 return statusReturn;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
530 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
531
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
532
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
533 #ifdef SIMULATE_PRESSURE
867
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
534
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
535 #define SECDIV 10 /* update every 100ms */
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
536
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
537 void pressure_simulation()
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
538 {
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
539 static uint32_t tickstart = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
540 static float pressure_sim_mbar = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
541 static uint32_t passedSecond = 0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
542 static uint32_t secondtick = 0;
867
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
543 static uint32_t lastsecondtick = 0;
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
544 static float delta_mbar = 0.0;
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
545
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
546 uint32_t lasttick = 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
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 if( tickstart == 0)
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 tickstart = HAL_GetTick(); /* init time stamp */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
553 secondtick = tickstart;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
554 pressure_sim_mbar = 1000;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
555 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
556
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
557 lasttick = HAL_GetTick();
867
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
558 if(time_elapsed_ms(secondtick,lasttick) >= (1000 / SECDIV)) /* one second passed since last tick */
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
559 {
867
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
560 if(time_elapsed_ms(lastsecondtick,lasttick) > 1000)
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
561 {
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
562 passedSecond++;
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
563 lastsecondtick = lasttick;
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
564 }
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
565 secondtick = lasttick;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
566
942
06aaccaf2e02 Power down gnss module during dive:
Ideenmodellierer
parents: 867
diff changeset
567 #define DIVE_EASY 1
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
568 #ifdef DIVE_AFTER_LANDING
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
569 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
570 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
571 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
572 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
573 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
574 else if(passedSecond < 2000) pressure_sim_mbar += 10.0; /* start dive */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
575 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
576 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
577 else pressure_sim_mbar = 1000.0; /* final state */
867
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
578 #endif
942
06aaccaf2e02 Power down gnss module during dive:
Ideenmodellierer
parents: 867
diff changeset
579 #ifdef DIVE_EASY
06aaccaf2e02 Power down gnss module during dive:
Ideenmodellierer
parents: 867
diff changeset
580 if(passedSecond < 10) pressure_sim_mbar = 1000.0; /* stay stable for 10 seconds */
06aaccaf2e02 Power down gnss module during dive:
Ideenmodellierer
parents: 867
diff changeset
581 else if(passedSecond < 120) pressure_sim_mbar += 1.0; /* decrease pressure in 2 minutes */
06aaccaf2e02 Power down gnss module during dive:
Ideenmodellierer
parents: 867
diff changeset
582 else if(passedSecond < 240) pressure_sim_mbar += 0.0; /*stay stable 2 minutes*/
06aaccaf2e02 Power down gnss module during dive:
Ideenmodellierer
parents: 867
diff changeset
583 else if(passedSecond < 360) pressure_sim_mbar -= 1.0; /* return to 1 bar in 2 Minutes*/
06aaccaf2e02 Power down gnss module during dive:
Ideenmodellierer
parents: 867
diff changeset
584 else pressure_sim_mbar = 1000.0; /* final state */
06aaccaf2e02 Power down gnss module during dive:
Ideenmodellierer
parents: 867
diff changeset
585 #endif
06aaccaf2e02 Power down gnss module during dive:
Ideenmodellierer
parents: 867
diff changeset
586 #if DIVE_AT_SPEED
867
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
587 if(passedSecond < 10) pressure_sim_mbar = 1000.0; /* stay stable for 10 seconds */
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
588 else if(passedSecond < 20) delta_mbar = 200.0 / SECDIV; /* Start dive */
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
589 else if(passedSecond < 30) delta_mbar = 0.0; /*stay on depth*/
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
590 else if(passedSecond < 45) delta_mbar -= 0.2 / SECDIV; /* return to surface */
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
591 else if(passedSecond < 40) delta_mbar -= 0.4 / SECDIV; /* stay */
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
592 else if(passedSecond < 50) delta_mbar += 0.3 / SECDIV; /* get ready for second dive */
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
593 else if(passedSecond < 60) delta_mbar -= 0.4; /*stay on depth*/
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
594 else if(passedSecond < 70) delta_mbar = 0.2;
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
595 else if(passedSecond < 1060) pressure_sim_mbar -= 10.0/ SECDIV; /* return to surface */
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
596 else if(passedSecond < 1200) pressure_sim_mbar += 0.0; /* stay */
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
597 else { pressure_sim_mbar = 1000.0; delta_mbar = 0.0;} /* final state */
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
598
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
599 pressure_sim_mbar += delta_mbar;
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
600 if(pressure_sim_mbar < surface_pressure_mbar)
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
601 {
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
602 pressure_sim_mbar = surface_pressure_mbar;
3311b720a072 Decrease calculation interval for ascend speed:
Ideenmodellierer
parents: 858
diff changeset
603 }
942
06aaccaf2e02 Power down gnss module during dive:
Ideenmodellierer
parents: 867
diff changeset
604 #endif
06aaccaf2e02 Power down gnss module during dive:
Ideenmodellierer
parents: 867
diff changeset
605 #ifdef SHORTDIVE /* short dive */
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
606 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
607 else if(passedSecond < 180) pressure_sim_mbar += 10.0; /* Start dive */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
608 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
609 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
610 else if(passedSecond < 600) pressure_sim_mbar += 0.0; /* stay */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
611 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
612 else if(passedSecond < 780) pressure_sim_mbar += 10.0; /* Start dive */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
613 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
614 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
615 else if(passedSecond < 1200) pressure_sim_mbar += 0.0; /* stay */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
616 else pressure_sim_mbar = 1000.0; /* final state */
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
617 #endif
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
618 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
619
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
620
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
621 ambient_pressure_mbar = pressure_sim_mbar;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
622 ambient_temperature = 25.0;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
623 return;
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
624 }
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
625
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
626 #endif
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
627
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
628 void pressure_calculation(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
629 {
241
2b9775f71e30 cleanup: factor out I2C1_Status() and cleanup type
Jan Mulder <jlmulder@xs4all.nl>
parents: 186
diff changeset
630 if(global.I2C_SystemStatus != HAL_OK)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
631 return;
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
632
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
633 #ifdef SIMULATE_PRESSURE
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
634 pressure_simulation();
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
635 #else
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
636 pressure_calculation_AN520_004_mod_MS5803_30BA__09_2015();
352
1f24022345d1 Fix merge problem
Jan Mulder <jlmulder@xs4all.nl>
parents: 351
diff changeset
637 #endif
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
638 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
639
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 38
diff changeset
640 static void pressure_calculation_AN520_004_mod_MS5803_30BA__09_2015(void)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
641 {
984
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
642 static float runningAvgPressure = 0;
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
643 static uint8_t avgCntPressure = 0;
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
644 static float runningAvgTemp = 0;
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
645 static uint8_t avgCntTemp = 0;
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
646
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
647 float newTemperature = 0.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
648
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
649 uint32_t local_D1; // ADC value of the pressure conversion
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
650 uint32_t local_D2; // ADC value of the temperature conversion
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
651 int32_t local_Px10; // compensated pressure value
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
652 int32_t local_Tx100; // compensated temperature value
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
653 int64_t local_dT; // int32_t, difference between actual and measured temperature
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
654 int64_t local_OFF; // offset at actual temperature
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
655 int64_t local_SENS; // sensitivity at actual temperature
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
656
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
657 float calc_pressure;
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
658
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
659 int64_t T2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
660 int64_t OFF2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
661 int64_t SENS2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
662
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
663 local_D1 = D1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
664 local_D2 = D2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
665
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
666 local_dT = ((int64_t)local_D2) - ((int64_t)C[5]) * 256; //pow(2,8);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
667 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
668 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
669
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
670 local_Tx100 = (int32_t)(2000 + (local_dT * ((int64_t)C[6])) / 8388608);// pow(2,23)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
671
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
672
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
673 if(local_Tx100 < 2000) // low temperature
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
674 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
675 T2 = 3 * local_dT;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
676 T2 *= local_dT;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
677 T2 /= 8589934592;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
678
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
679 OFF2 = ((int64_t)local_Tx100) - 2000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
680 OFF2 *= OFF2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
681 OFF2 *= 3;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
682 OFF2 /= 2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
683
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
684 SENS2 = ((int64_t)local_Tx100) - 2000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
685 SENS2 *= SENS2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
686 SENS2 *= 5;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
687 SENS2 /= 8;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
688
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
689 local_Tx100 -= (int32_t)T2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
690 local_OFF -= OFF2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
691 local_SENS -= SENS2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
692 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
693 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
694 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
695 T2 = 7 * local_dT;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
696 T2 *= local_dT;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
697 T2 /= 137438953472;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
698
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
699 OFF2 = ((int64_t)local_Tx100) - 2000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
700 OFF2 *= OFF2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
701 OFF2 /= 16;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
702
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
703 local_Tx100 -= (int32_t)T2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
704 local_OFF -= OFF2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
705 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
706
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
707 local_Px10 = (int32_t)(
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
708 (((int64_t)((local_D1 * local_SENS) / 2097152)) - local_OFF)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
709 / 8192 );// )) / 10; // pow(2,21), pow(2,13)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
710
984
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
711 newTemperature = ((float)local_Tx100) / 100;
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
712 newTemperature += temperature_offset;
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
713
984
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
714 if((newTemperature < TEMPERATURE_MINIMUM) || (newTemperature > TEMPERATURE_MAXIMUM))
688
8c92f7743e14 Added sanity check for temperature and pressure values:
Ideenmodellierer
parents: 579
diff changeset
715 {
8c92f7743e14 Added sanity check for temperature and pressure values:
Ideenmodellierer
parents: 579
diff changeset
716 ambient_temperature = 20.0;
8c92f7743e14 Added sanity check for temperature and pressure values:
Ideenmodellierer
parents: 579
diff changeset
717 }
8c92f7743e14 Added sanity check for temperature and pressure values:
Ideenmodellierer
parents: 579
diff changeset
718
984
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
719 runningAvgTemp = (avgCntTemp * runningAvgTemp + newTemperature) / (avgCntTemp + 1);
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
720 if (avgCntTemp < 10)
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
721 {
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
722 avgCntTemp++;
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
723 }
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
724 ambient_temperature = runningAvgTemp;
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
725
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
726
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
727 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
728 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
729
984
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
730 runningAvgPressure = (avgCntPressure * runningAvgPressure + calc_pressure) / (avgCntPressure + 1);
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
731 if (avgCntPressure < 10) /* build an average considering the last measurements to have a weight "1 of 10" */
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
732 { /* Main reason for this is the jitter of up to +-10 HPa in surface mode which is caused */
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
733 avgCntPressure++; /* by the measurement range of the sensor which is focused on under water pressure measurement */
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 276
diff changeset
734 }
984
41136649b90d Improvment temperature measurent:
Ideenmodellierer
parents: 942
diff changeset
735 ambient_pressure_mbar = runningAvgPressure;
688
8c92f7743e14 Added sanity check for temperature and pressure values:
Ideenmodellierer
parents: 579
diff changeset
736
8c92f7743e14 Added sanity check for temperature and pressure values:
Ideenmodellierer
parents: 579
diff changeset
737 if(ambient_pressure_mbar < PRESSURE_MINIMUM)
8c92f7743e14 Added sanity check for temperature and pressure values:
Ideenmodellierer
parents: 579
diff changeset
738 {
846
2ace67231c49 Consider pressure offset compensation in case of setting a default value:
Ideenmodellierer
parents: 688
diff changeset
739 ambient_pressure_mbar = 1000.0 + pressure_offset;
688
8c92f7743e14 Added sanity check for temperature and pressure values:
Ideenmodellierer
parents: 579
diff changeset
740 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
741 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
742
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
743
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
744 /* taken from AN520 by meas-spec.com dated 9. Aug. 2011
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
745 * short and int are both 16bit according to AVR/GCC google results
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
746 */
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
747 /*static uint8_t crc4(uint16_t n_prom[])
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
748 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
749 uint16_t cnt; // simple counter
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
750 uint16_t n_rem; // crc reminder
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
751 uint16_t crc_read; // original value of the crc
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
752 uint8_t n_bit;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
753 n_rem = 0x00;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
754 crc_read=n_prom[7]; //save read CRC
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
755 n_prom[7]=(0xFF00 & (n_prom[7])); //CRC byte is replaced by 0
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
756 for (cnt = 0; cnt < 16; cnt++) // operation is performed on bytes
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
757 { // choose LSB or MSB
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
758 if (cnt%2==1) n_rem ^= (uint16_t) ((n_prom[cnt>>1]) & 0x00FF);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
759 else n_rem ^= (uint16_t) (n_prom[cnt>>1]>>8);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
760 for (n_bit = 8; n_bit > 0; n_bit--)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
761 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
762 if (n_rem & (0x8000))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
763 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
764 n_rem = (n_rem << 1) ^ 0x3000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
765 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
766 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
767 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
768 n_rem = (n_rem << 1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
769 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
770 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
771 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
772 n_rem= (0x000F & (n_rem >> 12)); // // final 4-bit reminder is CRC code
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
773 n_prom[7]=crc_read; // restore the crc_read to its original place
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
774 return (n_rem ^ 0x00);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
775 }
356
cb3870f79e9d Add Support for new end-2019 hardware:
heinrichsweikamp
parents: 352
diff changeset
776
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
777 void test_calculation(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
778 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
779 C1 = 29112;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
780 C2 = 26814;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
781 C3 = 19125;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
782 C4 = 17865;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
783 C5 = 32057;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
784 C6 = 31305;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
785
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
786 C2_x_2p16 = C2 * 65536;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
787 C1_x_2p15 = C1 * 32768;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
788
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
789 D1 = 4944364;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
790 D2 = 8198974;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
791 pressure_calculation() ;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
792 };
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
793 */
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
794 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
795 {
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
796 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
797 {
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
798 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
799 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
800 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
801 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
802
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
803 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
804 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
805 }
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
806
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
807