From 400a83ef64969f05f66542f55702d1bec83b16bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20=C5=BDaitl=C3=ADk?= Date: Sat, 2 Oct 2021 12:12:49 +0200 Subject: [PATCH] Added LED SMOOTH and SCD4x TEMPERATURE OFFSET to the config. --- README.md | 34 ++++++++++++++++++---------------- fw/Core/Inc/config.h | 18 +++++++++++++++--- fw/Core/Src/config.c | 14 ++++++++++++++ fw/Core/Src/main.c | 10 +++++++--- 4 files changed, 54 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 709858b..e92b855 100644 --- a/README.md +++ b/README.md @@ -4,29 +4,31 @@ |Value|Register| |---|---| -|CO2 | 30010| -|SHT4x | 30011| -|RH SHT4x | 30012| -|T SCD4x | 30013| -|RH SCD4x | 30014| -|T SHT4x SIGNED | 30015| -|T SCD4x SIGNED | 30016| +|CO2 | 30010| +|SHT4x | 30011| +|RH SHT4x | 30012| +|T SCD4x | 30013| +|RH SCD4x | 30014| +|T SHT4x SIGNED | 30015| +|T SCD4x SIGNED | 30016| ### Holding Registers |Value|Register| |---|---| -|LED ON | 40001| -|CO2 ALERT LIMIT1 | 40002| -|CO2 ALERT LIMIT2 | 40003| -|MODBUS ADDR | 40004| +|LED ON | 40001| +|LED SMOOTH | 40002| +|CO2 ALERT LIMIT1 | 40003| +|CO2 ALERT LIMIT2 | 40004| +|SCD4x T OFFSET | 40005| +|MODBUS ADDR | 40006| ### Device Information Registers |Value|Register| |---|---| -|VENDOR NAME | 30010| -|PRODUCT CODE | 30011| -|REVISION | 30012| -|PRODUCT NAME | 30013| -|SERIAL NUMBER | 30014| +|VENDOR NAME | 30010| +|PRODUCT CODE | 30011| +|REVISION | 30012| +|PRODUCT NAME | 30013| +|SERIAL NUMBER | 30014| diff --git a/fw/Core/Inc/config.h b/fw/Core/Inc/config.h index c2d0f24..f5a0df1 100644 --- a/fw/Core/Inc/config.h +++ b/fw/Core/Inc/config.h @@ -51,11 +51,16 @@ config_read(&config); #define CONFIG_DEFAULT_LED_ON 1 #define CONFIG_DEFAULT_LED_ALERT1_LIMIT 1500 #define CONFIG_DEFAULT_LED_ALERT2_LIMIT 3000 +#define CONFIG_DEFAULT_LED_SMOOTH 0 +#define CONFIG_DEFAULT_SCD4x_T_OFFSET 0 #define MODBUS_ADDR_LENGTH 2 #define CONFIG_LED_ON_LENGTH 2 +#define CONFIG_LED_SMOOTH_LENGTH 2 #define CONFIG_LED_ALERT1_LENGTH 2 #define CONFIG_LED_ALERT2_LENGTH 2 +#define CONFIG_LED_ALERT2_LENGTH 2 +#define CONFIG_SCD4x_T_OFFSET_LENGTH 2 #define VENDOR_NAME_LENGTH 64 #define PRODUCT_CODE_LENGTH 64 #define PRODUCT_NAME_LENGTH 64 @@ -69,9 +74,12 @@ config_read(&config); #define CONFIG_EEPROM_ADDR_MODBUS_ADDR (EEPROM_ADDR_START) #define CONFIG_EEPROM_ADDR_LED_ON (CONFIG_EEPROM_ADDR_MODBUS_ADDR + MODBUS_ADDR_LENGTH) -#define CONFIG_EEPROM_ADDR_LED_ALERT1 (CONFIG_EEPROM_ADDR_LED_ON + CONFIG_LED_ON_LENGTH) +#define CONFIG_EEPROM_ADDR_LED_SMOOTH (CONFIG_EEPROM_ADDR_LED_ON + CONFIG_LED_ON_LENGTH) +#define CONFIG_EEPROM_ADDR_LED_ALERT1 (CONFIG_EEPROM_ADDR_LED_SMOOTH + CONFIG_LED_SMOOTH_LENGTH) #define CONFIG_EEPROM_ADDR_LED_ALERT2 (CONFIG_EEPROM_ADDR_LED_ALERT1 + CONFIG_LED_ALERT1_LENGTH) -#define CONFIG_EEPROM_ADDR_VENDOR_NAME (CONFIG_EEPROM_ADDR_LED_ALERT2 + CONFIG_LED_ALERT2_LENGTH) +#define CONFIG_EEPROM_ADDR_SCD4x_T_OFFSET (CONFIG_EEPROM_ADDR_LED_ALERT2 + CONFIG_LED_ALERT2_LENGTH) + +#define CONFIG_EEPROM_ADDR_VENDOR_NAME (CONFIG_EEPROM_ADDR_SCD4x_T_OFFSET + CONFIG_SCD4x_T_OFFSET_LENGTH) #define CONFIG_EEPROM_ADDR_PRODUCT_CODE (CONFIG_EEPROM_ADDR_VENDOR_NAME + VENDOR_NAME_LENGTH) #define CONFIG_EEPROM_ADDR_PRODUCT_NAME (CONFIG_EEPROM_ADDR_PRODUCT_CODE + PRODUCT_CODE_LENGTH) #define CONFIG_EEPROM_ADDR_REVISION (CONFIG_EEPROM_ADDR_PRODUCT_NAME + PRODUCT_NAME_LENGTH) @@ -95,11 +103,15 @@ config_read(&config); typedef struct { - /* DEVICE CONFIG */ + /* LED CONFIG */ uint8_t led_on; + uint8_t led_smooth; uint16_t led_co2_alert_limit1; uint16_t led_co2_alert_limit2; + /* SCD4x Temperature sensor offset */ + int16_t scd4x_t_offset; + /* MODBUS CONFIG */ uint16_t modbus_addr; } config_t; diff --git a/fw/Core/Src/config.c b/fw/Core/Src/config.c index 0018a0c..cc6f01c 100644 --- a/fw/Core/Src/config.c +++ b/fw/Core/Src/config.c @@ -22,8 +22,10 @@ int8_t config_read(config_t *config) { config->modbus_addr = *(uint16_t *) (CONFIG_EEPROM_ADDR_MODBUS_ADDR); config->led_on = *(uint16_t *) (CONFIG_EEPROM_ADDR_LED_ON); + config->led_smooth = *(uint16_t *) (CONFIG_EEPROM_ADDR_LED_SMOOTH); config->led_co2_alert_limit1 = *(uint16_t *) (CONFIG_EEPROM_ADDR_LED_ALERT1); config->led_co2_alert_limit2 = *(uint16_t *) (CONFIG_EEPROM_ADDR_LED_ALERT2); + config->scd4x_t_offset = *(int16_t *) (CONFIG_EEPROM_ADDR_SCD4x_T_OFFSET); /* Check if the EEPROM is initialized - do not check LED ON, that is 1 or 0 */ if ((config->modbus_addr == EEPROM_EMPTY_BYTE) || @@ -57,6 +59,12 @@ int8_t config_write(config_t *config) return EEPROM_WRITE_ERROR; } + /* Write LED SMOOTH */ + if (eeprom_program_byte(CONFIG_EEPROM_ADDR_LED_SMOOTH, config->led_smooth) != EEPROM_OK) + { + return EEPROM_WRITE_ERROR; + } + /* Write LED CO2 ALERT LIMIT 1 */ if (eeprom_program_halfword(CONFIG_EEPROM_ADDR_LED_ALERT1, config->led_co2_alert_limit1) != EEPROM_OK) { @@ -69,6 +77,12 @@ int8_t config_write(config_t *config) return EEPROM_WRITE_ERROR; } + /* Write LED SCD4x TEMPERATURE OFFSET */ + if (eeprom_program_halfword(CONFIG_EEPROM_ADDR_SCD4x_T_OFFSET, config->scd4x_t_offset) != EEPROM_OK) + { + return EEPROM_WRITE_ERROR; + } + /* Lock EEPROM*/ if (eeprom_lock() != EEPROM_OK) { diff --git a/fw/Core/Src/main.c b/fw/Core/Src/main.c index 064a409..2566675 100644 --- a/fw/Core/Src/main.c +++ b/fw/Core/Src/main.c @@ -81,9 +81,11 @@ enum { enum { REGISTER_NUM_LED_ON = 40001, - REGISTER_NUM_CO2_ALERT_LIMIT1 = 40002, - REGISTER_NUM_CO2_ALERT_LIMIT2 = 40003, - REGISTER_NUM_MODBUS_ADDR = 40004 + REGISTER_NUM_LED_SMOOTH = 40002, + REGISTER_NUM_CO2_ALERT_LIMIT1 = 40003, + REGISTER_NUM_CO2_ALERT_LIMIT2 = 40004, + REGISTER_NUM_SCD4x_T_OFFSET = 40005, + REGISTER_NUM_MODBUS_ADDR = 40006, } config_registers_numbers; enum { @@ -284,6 +286,8 @@ int main(void) sensor_config.led_co2_alert_limit1 = CONFIG_DEFAULT_LED_ALERT1_LIMIT; sensor_config.led_co2_alert_limit2 = CONFIG_DEFAULT_LED_ALERT2_LIMIT; sensor_config.led_on = CONFIG_DEFAULT_LED_ON; + sensor_config.led_smooth = CONFIG_DEFAULT_LED_SMOOTH; + sensor_config.scd4x_t_offset = CONFIG_DEFAULT_SCD4x_T_OFFSET; } /* Set the modbus address */