Added LED SMOOTH and SCD4x TEMPERATURE OFFSET to the config.

This commit is contained in:
David Žaitlík 2021-10-02 12:12:49 +02:00
parent 25df18ed66
commit 400a83ef64
4 changed files with 54 additions and 22 deletions

View File

@ -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|

View File

@ -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;

View File

@ -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)
{

View File

@ -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 */