diff --git a/system/include/drivers/max31865.h b/system/include/drivers/max31865.h index 35b53ca..586617e 100644 --- a/system/include/drivers/max31865.h +++ b/system/include/drivers/max31865.h @@ -24,7 +24,7 @@ typedef enum max31865_qf_t { extern uint8_t max31865_current_fault_status; -void max31865_init(uint8_t rdt_type, uint8_t reference_resistor); +void max31865_init(uint8_t rdt_type, uint8_t reference_resistor_index); void max31865_init_average(void); void max31865_pool(void); int32_t max31865_get_pt100_result(); diff --git a/system/src/drivers/max31865.c b/system/src/drivers/max31865.c index bb0d19c..b38ddf7 100644 --- a/system/src/drivers/max31865.c +++ b/system/src/drivers/max31865.c @@ -76,6 +76,11 @@ max31865_pool_state_t max31865_current_state = MAX_UNINITIALIZED; */ float max31865_rref = 0; +/** + * And it's index from the table + */ +uint8_t max31865_rref_index = 0; + /** * This variable is incremented from 0 up to 9 to pause measurement * state machine into MAX_SHUTDOWN state. When it reach 9 measurement @@ -151,6 +156,7 @@ max31865_qf_t max31865_quality_factor = MAX_QF_UNKNOWN; * */ uint8_t max31865_measurements_counter = 0; +uint8_t max31865_merasurements_error_counter = 0; int_average_t max31865_average; @@ -219,7 +225,7 @@ static void max31865_send_config_register(void) { } } -void max31865_init(uint8_t rdt_type, uint8_t reference_resistor) { +void max31865_init(uint8_t rdt_type, uint8_t reference_resistor_index) { uint8_t * rx_data; @@ -235,15 +241,17 @@ void max31865_init(uint8_t rdt_type, uint8_t reference_resistor) { return; } - if (reference_resistor > 31) { + if (reference_resistor_index > 31) { max31865_current_state = MAX_UNINITIALIZED; return; } else { - max31865_rref = max31865_rref_lookup_table[reference_resistor]; + max31865_rref = max31865_rref_lookup_table[reference_resistor_index]; } + max31865_rref_index = reference_resistor_index; + // set filter to 50Hz max31865_filter_select = 1; @@ -287,10 +295,10 @@ void max31865_pool(void) { case MAX_IDLE: // MAX31865 is powered up but not initialized if (max31865_rdt_sensor_type == 1) { - max31865_init(MAX_3WIRE, max31865_rref); + max31865_init(MAX_3WIRE, max31865_rref_index); } else { - max31865_init(MAX_4WIRE, max31865_rref); + max31865_init(MAX_4WIRE, max31865_rref_index); } if (max31865_ok == 1) { @@ -374,6 +382,8 @@ void max31865_pool(void) { max31865_quality_factor = MAX_QF_FULL; } else { + max31865_merasurements_error_counter++; + max31865_current_state = MAX_ERROR; max31865_quality_factor = MAX_QF_NOT_AVALIABLE; @@ -383,18 +393,18 @@ void max31865_pool(void) { max31865_vbias = 0; // this function may change 'max31865_current_state' internally due to errors - max31865_send_config_register(); + //max31865_send_config_register(); max31865_shutdown_ticks = 0; } - break; case MAX_SHUTDOWN: // MAX31865 is powered up and initialized but PT bias is disabled // and no measurement is ongoing if (max31865_shutdown_ticks++ > MAX31865_INTERVAL) { - max31865_current_state = MAX_INITIALIZED; + + max31865_current_state = MAX_IDLE; // max31865_shutdown_ticks = 0; }