Added more registers and achecks.
This commit is contained in:
		| @@ -49,23 +49,17 @@ config_read(&config); | ||||
|  * Device description data can be accessed using direct readout from the memory | ||||
|  * Device configuration data can be accessed using config_t struct. | ||||
|  */ | ||||
| #define CONFIG_DEFAULT_LED_ON					1 | ||||
| #define CONFIG_DEFAULT_LED_BRIGHTNESS			100 | ||||
| #define CONFIG_DEFAULT_LED_ALERT1_LIMIT			1500 | ||||
| #define CONFIG_DEFAULT_LED_ALERT2_LIMIT			3000 | ||||
| #define CONFIG_DEFAULT_LED_SMOOTH				1 | ||||
| #define CONFIG_DEFAULT_SCD4x_T_OFFSET			0 | ||||
|  | ||||
| #define CONFIG_DEFAULT_BAUDRATE_INDEX			0 | ||||
|  | ||||
| #define CONFIG_SERIAL_NUMBER_1_LENGTH			2 | ||||
| #define CONFIG_SERIAL_NUMBER_2_LENGTH			2 | ||||
| #define	CONFIG_MODBUS_ADDR_LENGTH				2 | ||||
| #define CONFIG_LTR329_GAIN_LENGHT				2 | ||||
| #define CONFIG_LTR329_MODE_LENGTH				2 | ||||
| #define CONFIG_LTR329_INTEG_TIME_LENGTH			2 | ||||
| #define CONFIG_LTR329_MEAS_RATE_LENGTH			2 | ||||
| #define CONFIG_BAUDRATE_INDEX_LENGTH			2 | ||||
| #define CONFIG_LED_ON_LENGTH					2 | ||||
| #define CONFIG_LED_BRIGHTNESS_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 | ||||
| @@ -77,16 +71,16 @@ config_read(&config); | ||||
| #define EEPROM_ADDR_START 						((uint32_t)0x08080000) | ||||
| #define EEPROM_ADDR_END 						((uint32_t)0x080803FF) | ||||
|  | ||||
| #define CONFIG_EEPROM_ADDR_MODBUS_ADDR			EEPROM_ADDR_START | ||||
| #define CONFIG_EEPROM_ADDR_SERIAL_NUMBER_1		(EEPROM_ADDR_START) | ||||
| #define CONFIG_EEPROM_ADDR_SERIAL_NUMBER_2		(CONFIG_EEPROM_ADDR_SERIAL_NUMBER_1		+ CONFIG_SERIAL_NUMBER_1_LENGTH) | ||||
| #define CONFIG_EEPROM_ADDR_MODBUS_ADDR			(CONFIG_EEPROM_ADDR_SERIAL_NUMBER_2		+ CONFIG_SERIAL_NUMBER_2_LENGTH) | ||||
| #define CONFIG_EEPROM_ADDR_BAUDRATE_INDEX		(CONFIG_EEPROM_ADDR_MODBUS_ADDR 		+ CONFIG_MODBUS_ADDR_LENGTH) | ||||
| #define CONFIG_EEPROM_ADDR_LED_ON				(CONFIG_EEPROM_ADDR_BAUDRATE_INDEX 		+ CONFIG_BAUDRATE_INDEX_LENGTH) | ||||
| #define CONFIG_EEPROM_ADDR_LED_BRIGHTNESS		(CONFIG_EEPROM_ADDR_LED_ON				+ CONFIG_LED_ON_LENGTH) | ||||
| #define CONFIG_EEPROM_ADDR_LED_SMOOTH			(CONFIG_EEPROM_ADDR_LED_BRIGHTNESS		+ CONFIG_LED_BRIGHTNESS_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_SCD4x_T_OFFSET		(CONFIG_EEPROM_ADDR_LED_ALERT2 			+ CONFIG_LED_ALERT2_LENGTH) | ||||
| #define CONFIG_EEPROM_ADDR_LTR329_GAIN			(CONFIG_EEPROM_ADDR_BAUDRATE_INDEX		+ CONFIG_BAUDRATE_INDEX_LENGTH) | ||||
| #define CONFIG_EEPROM_ADDR_LTR329_MODE			(CONFIG_EEPROM_ADDR_LTR329_GAIN			+ CONFIG_LTR329_GAIN_LENGHT) | ||||
| #define CONFIG_EEPROM_ADDR_LTR329_INTEG_TIME	(CONFIG_EEPROM_ADDR_LTR329_MODE			+ CONFIG_LTR329_MODE_LENGTH) | ||||
| #define CONFIG_EEPROM_ADDR_LTR329_MEAS_RATE		(CONFIG_EEPROM_ADDR_LTR329_INTEG_TIME	+ CONFIG_LTR329_INTEG_TIME_LENGTH) | ||||
|  | ||||
| #define CONFIG_EEPROM_ADDR_VENDOR_NAME			(CONFIG_EEPROM_ADDR_SCD4x_T_OFFSET 		+ CONFIG_SCD4x_T_OFFSET_LENGTH) | ||||
| #define CONFIG_EEPROM_ADDR_VENDOR_NAME			(CONFIG_EEPROM_ADDR_LTR329_MEAS_RATE	+ CONFIG_LTR329_MEAS_RATE_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) | ||||
|   | ||||
| @@ -53,6 +53,7 @@ extern "C" { | ||||
| #include "sht4x.h" | ||||
| #include "ltr329.h" | ||||
| #include "modbus.h" | ||||
| #include "crc8.h" | ||||
| #include "config.h" | ||||
| /* USER CODE END Includes */ | ||||
|  | ||||
|   | ||||
| @@ -79,7 +79,8 @@ enum | ||||
| 	REGISTER_NUM_RH = 30005, /* %, from SHT4x */ | ||||
| 	REGISTER_NUM_LIGHT_INTENSITY_0 = 30006, /* ticks, from LTR329 */ /*TODO: Find out what it is */ | ||||
| 	REGISTER_NUM_LIGHT_INTENSITY_1 = 30007, /* ticks, from LTR329 */ /*TODO: Find out what it is */ | ||||
| 	/* VOC Index has initial blackout beriod, when the data is not ready. VOC index is 0 during this period */ | ||||
| 	REGISTER_NUM_ERROR_T_RH	= 30008, /* 0 = OK, 1 I2C = ERROR, 2 = CRC ERROR */ | ||||
| 	REGISTER_NUM_ERROR_LIGHT = 30009 /* 0 = OK, 1 = I2C ERROR */ | ||||
| } data_registers_numbers; | ||||
|  | ||||
| enum | ||||
| @@ -99,7 +100,7 @@ enum | ||||
| int16_t T_SHT4x, TF_SHT4x; | ||||
| uint16_t RH_SHT4x; | ||||
| uint16_t light_ch0, light_ch1; | ||||
|  | ||||
| uint16_t error_sht, error_ltr; | ||||
| /* Struct to store the sensor config */ | ||||
| config_t sensor_config; | ||||
| /* Device ID struct */ | ||||
| @@ -108,7 +109,6 @@ uint8_t sensor_config_pending_write = 0; | ||||
| uint8_t baudrate_changed = 0; | ||||
| uint8_t ltr329_config_changed = 0; | ||||
| uint8_t modbus_address_changed = 0; | ||||
| uint8_t co2_valid = 0; | ||||
|  | ||||
|  | ||||
| /* USER CODE END PV */ | ||||
| @@ -267,8 +267,6 @@ int main(void) | ||||
|  | ||||
|   /* Initiualize LTR329 */ | ||||
|   int8_t ltr_ret; | ||||
|   uint8_t ltr_cont_reg_val; | ||||
|   uint8_t ltr_rate_reg_val; | ||||
|   do | ||||
|   { | ||||
| 	  ltr_ret = ltr329_write_settings(LTR329_GAIN_48X, LTR329_MODE_ACTIVE, LTR329_INTEGRATION_100MS, LTR329_MEAS_RATE_100MS); | ||||
| @@ -285,7 +283,7 @@ int main(void) | ||||
|   sensor_config.ltr329_integ_time = ltr329_int_time; | ||||
|   sensor_config.ltr329_meas_rate = ltr329_meas_rate; | ||||
|  | ||||
|   static uint32_t new_baud; | ||||
|   /*static uint32_t new_baud;*/ | ||||
|   /* Enter the main loop */ | ||||
|   while (1) | ||||
|   { | ||||
| @@ -329,34 +327,70 @@ int main(void) | ||||
| 	  { | ||||
| 		  while (!LL_USART_IsActiveFlag_TXE(USART2)); | ||||
| 		  uart_disable_interrupts(); | ||||
|  | ||||
| 		  LL_USART_SetBaudRate(USART2, SYSTICK_FREQ_HZ, LL_USART_OVERSAMPLING_16, config_baudrates[sensor_config.baudrate_index]); | ||||
| 		  uart_enable_interrupts(); | ||||
| 		  LL_USART_SetBaudRate(USART2, SYSTICK_FREQ_HZ, LL_USART_OVERSAMPLING_16, | ||||
| 				  	  	  	   config_baudrates[sensor_config.baudrate_index]); | ||||
| 		  LL_USART_EnableDirectionRx(USART2); | ||||
| 		  LL_USART_EnableDirectionTx(USART2); | ||||
| 		  baudrate_changed = 0; | ||||
| 		  ltr329_config_changed = 0; | ||||
| 		  uart_enable_interrupts(); | ||||
|  | ||||
| 		  new_baud = LL_USART_GetBaudRate(USART2, SYSTICK_FREQ_HZ, LL_USART_OVERSAMPLING_16); | ||||
| 		  /*new_baud = LL_USART_GetBaudRate(USART2, SYSTICK_FREQ_HZ, LL_USART_OVERSAMPLING_16);*/ | ||||
| 	  } | ||||
| 	  if(ltr329_config_changed) | ||||
| 	  { | ||||
| 		  ltr329_write_settings(sensor_config.ltr329_gain, sensor_config.ltr329_mode, sensor_config.ltr329_integ_time, sensor_config.ltr329_meas_rate); | ||||
| 		  uart_disable_interrupts(); | ||||
| 		  ltr329_write_settings(sensor_config.ltr329_gain, | ||||
| 				  	  	  	  	sensor_config.ltr329_mode, | ||||
| 								sensor_config.ltr329_integ_time, | ||||
| 								sensor_config.ltr329_meas_rate); | ||||
| 		  ltr329_config_changed = 0; | ||||
| 		  uart_enable_interrupts(); | ||||
| 	  } | ||||
| 	  /* It is time for measurement */ | ||||
| 	  if (tim21_elapsed_period == 1) | ||||
| 	  { | ||||
| 		  /* TODO: Check the data */ | ||||
| 		  /* Read SHT4x data (always connected) */ | ||||
| 		  sht4x_measure(&T_SHT4x, &RH_SHT4x); | ||||
| 		  int8_t sht_read_ret = sht4x_measure(&T_SHT4x, &RH_SHT4x); | ||||
| 		  TF_SHT4x = CELSIUS_TO_FAHRENHEIT(T_SHT4x); | ||||
| 		  if (sht_read_ret == SHT4X_OK) | ||||
| 		  { | ||||
| 			  error_sht = 0; | ||||
| 		  } else | ||||
| 		  { | ||||
| 			  /* TODO: Do something */ | ||||
| 			  if (sht_read_ret == SHT4X_ERROR) | ||||
| 			  { | ||||
| 				  error_sht = 1; | ||||
| 			  } else if (sht_read_ret == SHT4X_CRC8_ERROR) | ||||
| 			  { | ||||
| 				  error_sht = 2; | ||||
| 			  } | ||||
| 		  } | ||||
|  | ||||
| 		  /* Red LTR329 values */ | ||||
| 		  uint8_t data_valid, new_data; | ||||
| 		  ltr329_gain_t set_gain; | ||||
| 		  ltr_ret = ltr329_read_status_register(&data_valid, &new_data, &set_gain); | ||||
| 		  /* TODO: Do something with the flags */ | ||||
| 		  ltr_ret = ltr329_measure(&light_ch0, &light_ch1); | ||||
| 		  if (ltr_ret == LTR329_OK) | ||||
| 		  { | ||||
| 			  if (new_data == 1) | ||||
| 			  { | ||||
| 				  ltr_ret = ltr329_measure(&light_ch0, &light_ch1); | ||||
| 				  if (ltr_ret == LTR329_OK) | ||||
| 				  { | ||||
| 					  error_ltr = 0; | ||||
| 				  } else | ||||
| 				  { | ||||
| 					  error_ltr = 1; | ||||
| 				  } | ||||
| 			  } | ||||
| 		  } else | ||||
| 		  { | ||||
| 			  error_ltr = 1; | ||||
| 		  } | ||||
|  | ||||
| 		  /* Reset the TIM21 Elapsed Period Flag */ | ||||
| 		  tim21_elapsed_period = 0; | ||||
| @@ -705,6 +739,12 @@ int8_t modbus_slave_callback(modbus_transaction_t *transaction) | ||||
| 					case REGISTER_NUM_LIGHT_INTENSITY_1: | ||||
| 						transaction->input_registers[i] = (uint16_t)light_ch1; | ||||
| 						break; | ||||
| 					case REGISTER_NUM_ERROR_T_RH: | ||||
| 						transaction->input_registers[i] = (uint16_t)error_sht; | ||||
| 						break; | ||||
| 					case REGISTER_NUM_ERROR_LIGHT: | ||||
| 						transaction->input_registers[i] = (uint16_t)error_ltr; | ||||
| 						break; | ||||
| 					default: | ||||
| 						return MODBUS_ERROR_FUNCTION_NOT_IMPLEMENTED; | ||||
| 				} | ||||
| @@ -723,19 +763,15 @@ int8_t modbus_slave_callback(modbus_transaction_t *transaction) | ||||
| 						break; | ||||
| 					case REGISTER_NUM_LTR329_GAIN: | ||||
| 						transaction->holding_registers[i] = (uint16_t)(sensor_config.ltr329_gain); | ||||
| 						/* TODO : IMPLEMENT */ | ||||
| 						break; | ||||
| 					case REGISTER_NUM_LTR329_INTEGRATION_TIME: | ||||
| 						transaction->holding_registers[i] = (uint16_t)(sensor_config.ltr329_integ_time); | ||||
| 						/* TODO : IMPLEMENT */ | ||||
| 						break; | ||||
| 					case REGISTER_NUM_LTR329_MEAS_RATE: | ||||
| 						transaction->holding_registers[i] = (uint16_t)(sensor_config.ltr329_meas_rate); | ||||
| 						/* TODO : IMPLEMENT */ | ||||
| 						break; | ||||
| 					case REGISTER_NUM_LTR329_MODE: | ||||
| 						transaction->holding_registers[i] = (uint16_t)(sensor_config.ltr329_mode); | ||||
| 						/* TODO : IMPLEMENT */ | ||||
| 						break; | ||||
| 					default: | ||||
| 						return MODBUS_ERROR_FUNCTION_NOT_IMPLEMENTED; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 David Žaitlík
					David Žaitlík