# HG changeset patch # User ideenmodellierer # Date 1556438787 -7200 # Node ID 8e9c502c0b06fdd4dc1a369e412619f76a14aa57 # Parent 189387bf23a87522ed96d3c8ee831b6fda69a44d Rework pressure/ temperature data aquisition The data data provided by the I2C data had been used for calculation independend if transmission was successfull or not => state evaluation added In the previous version data with resolution 0.5mBar and temperature was requested per cycle inparallel. This has been replaced by a requested resolution of 1mBar and an alternating aquisition (pressure / temp update every 200ms instead every 100ms) => reducing busy wait time and power consumption diff -r 189387bf23a8 -r 8e9c502c0b06 Small_CPU/Inc/pressure.h --- a/Small_CPU/Inc/pressure.h Sun Apr 28 09:54:43 2019 +0200 +++ b/Small_CPU/Inc/pressure.h Sun Apr 28 10:06:27 2019 +0200 @@ -6,11 +6,12 @@ uint8_t init_pressure(void); uint8_t pressure_update(void); +void pressure_update_alternating(void); uint8_t is_init_pressure_done(void); -void pressure_sensor_get_pressure_raw(void); -void pressure_sensor_get_temperature_raw(void); +HAL_StatusTypeDef pressure_sensor_get_pressure_raw(void); +HAL_StatusTypeDef pressure_sensor_get_temperature_raw(void); void pressure_calculation(void); float get_temperature(void); diff -r 189387bf23a8 -r 8e9c502c0b06 Small_CPU/Src/pressure.c --- a/Small_CPU/Src/pressure.c Sun Apr 28 09:54:43 2019 +0200 +++ b/Small_CPU/Src/pressure.c Sun Apr 28 10:06:27 2019 +0200 @@ -306,6 +306,28 @@ return (uint8_t)statusReturn; } +/* Switch between pressure and temperature measurement with every successful read operation */ +void pressure_update_alternating(void) +{ + static uint8_t getTemperature= 0; + + if(getTemperature) + { + if(pressure_sensor_get_temperature_raw() == HAL_OK) + { + getTemperature = 0; + } + } + else + { + if(pressure_sensor_get_pressure_raw() == HAL_OK) + { + getTemperature = 1; + } + } + pressure_calculation(); + return; +} static uint32_t pressure_sensor_get_one_value(uint8_t cmd, HAL_StatusTypeDef *statusReturn) { @@ -333,12 +355,23 @@ static HAL_StatusTypeDef pressure_sensor_get_data(void) { + uint32_t requestedValue = 0; HAL_StatusTypeDef statusReturn1 = HAL_TIMEOUT; HAL_StatusTypeDef statusReturn2 = HAL_TIMEOUT; - D2 = pressure_sensor_get_one_value(CMD_ADC_D2 + CMD_ADC_4096, &statusReturn1); - D1 = pressure_sensor_get_one_value(CMD_ADC_D1 + CMD_ADC_4096, &statusReturn2); + + requestedValue = pressure_sensor_get_one_value(CMD_ADC_D2 + CMD_ADC_1024, &statusReturn2); + if (statusReturn2 == HAL_OK) + { + D2 = requestedValue; + } + + requestedValue = pressure_sensor_get_one_value(CMD_ADC_D1 + CMD_ADC_1024, &statusReturn1); + if (statusReturn1 == HAL_OK) + { + D1 = requestedValue; + } if(statusReturn2 > statusReturn1) // if anything is not HAL_OK (0x00) or worse return statusReturn2; else @@ -346,15 +379,32 @@ } -void pressure_sensor_get_pressure_raw(void) +HAL_StatusTypeDef pressure_sensor_get_pressure_raw(void) { - D1 = pressure_sensor_get_one_value(CMD_ADC_D1 + CMD_ADC_4096, 0); + uint32_t requestedValue = 0; + HAL_StatusTypeDef statusReturn = HAL_TIMEOUT; + + requestedValue = pressure_sensor_get_one_value(CMD_ADC_D1 + CMD_ADC_1024, &statusReturn); + if (statusReturn == HAL_OK) + { + D1 = requestedValue; + } + + return statusReturn; } -void pressure_sensor_get_temperature_raw(void) +HAL_StatusTypeDef pressure_sensor_get_temperature_raw(void) { - D2 = pressure_sensor_get_one_value(CMD_ADC_D2 + CMD_ADC_4096, 0); + uint32_t requestedValue = 0; + HAL_StatusTypeDef statusReturn = HAL_TIMEOUT; + + requestedValue = pressure_sensor_get_one_value(CMD_ADC_D2 + CMD_ADC_1024, &statusReturn); + if (statusReturn == HAL_OK) + { + D2 = requestedValue; + } + return statusReturn; }