max31865 pooling and state machine. warning! it seems that JTAG hangs up after few seconds of debugging

tatry_variant
Mateusz Lubecki 2022-10-03 22:51:04 +02:00
rodzic f094422d92
commit faaffd78d9
3 zmienionych plików z 76 dodań i 22 usunięć

Wyświetl plik

@ -35,6 +35,6 @@
/** /**
* Do not uncomment this on production devices * Do not uncomment this on production devices
*/ */
//#define INHIBIT_CUTOFF #define INHIBIT_CUTOFF
#endif /* INCLUDE_PWR_SAVE_CONFIGURATION_H_ */ #endif /* INCLUDE_PWR_SAVE_CONFIGURATION_H_ */

Wyświetl plik

@ -658,9 +658,9 @@ void pwr_save_pooling_handler(const config_data_mode_t * config, const config_da
vbatt = 0xFFFFu; vbatt = 0xFFFFu;
} }
// #ifdef INHIBIT_CUTOFF #ifdef INHIBIT_CUTOFF
// vbatt = 0xFFFFu; vbatt = 0xFFFFu;
// #endif #endif
if (vbatt > PWR_SAVE_STARTUP_RESTORE_VOLTAGE_DEF) { if (vbatt > PWR_SAVE_STARTUP_RESTORE_VOLTAGE_DEF) {
pwr_save_currently_cutoff = 0; pwr_save_currently_cutoff = 0;

Wyświetl plik

@ -40,7 +40,7 @@ uint8_t max31865_vbias = 0;
uint8_t max31865_conversion_mode = 0; uint8_t max31865_conversion_mode = 0;
/** /**
* * Set to one and send config register to trigger single measurement
*/ */
uint8_t max31865_start_singleshot = 0; uint8_t max31865_start_singleshot = 0;
@ -73,6 +73,11 @@ uint8_t max31865_buffer[3] = {0u};
*/ */
uint8_t max31865_ok = 0; uint8_t max31865_ok = 0;
/**
* Last raw result read from MAX
*/
uint16_t max31865_raw_result = 0;
/** /**
* Function generates a content of configuration register basing on * Function generates a content of configuration register basing on
*/ */
@ -107,9 +112,13 @@ static void max31865_request_registers(void) {
else { else {
max31865_current_state = MAX_ERROR; max31865_current_state = MAX_ERROR;
} }
if (result != SPI_OK) {
max31865_current_state = MAX_ERROR;
}
} }
static void max31865_send_config_measurement(void) { static void max31865_send_config_register(void) {
uint8_t result = 0; uint8_t result = 0;
// check if SPI is busy now // check if SPI is busy now
@ -123,6 +132,10 @@ static void max31865_send_config_measurement(void) {
else { else {
max31865_current_state = MAX_ERROR; max31865_current_state = MAX_ERROR;
} }
if (result != SPI_OK) {
max31865_current_state = MAX_ERROR;
}
} }
void max31865_init(uint8_t rdt_type) { void max31865_init(uint8_t rdt_type) {
@ -139,26 +152,14 @@ void max31865_init(uint8_t rdt_type) {
// set filter to 50Hz // set filter to 50Hz
max31865_filter_select = 1; max31865_filter_select = 1;
max31865_vbias = 1; max31865_vbias = 0;
max31865_conversion_mode = 1; max31865_conversion_mode = 0;
// max31865_buffer[0] = 0x80; max31865_send_config_register();
// max31865_buffer[1] = max31865_get_config_register();
//
// spi_tx_data(1, SPI_TX_FROM_EXTERNAL, max31865_buffer, 2);
max31865_send_config_measurement();
spi_wait_for_comms_done(); spi_wait_for_comms_done();
// // read adres of configuation register
// max31865_buffer[0] = 0x00;
// max31865_buffer[1] = 0x00;
//
// // read data for verifiaction
// spi_rx_tx_data(1, SPI_TX_FROM_EXTERNAL, SPI_USE_INTERNAL_RX_BUF, max31865_buffer, 30, 1);
max31865_request_registers(); max31865_request_registers();
spi_wait_for_comms_done(); spi_wait_for_comms_done();
@ -167,6 +168,8 @@ void max31865_init(uint8_t rdt_type) {
if (rx_data[0] == max31865_get_config_register()) { if (rx_data[0] == max31865_get_config_register()) {
max31865_ok = 1; max31865_ok = 1;
max31865_current_state = MAX_INITIALIZED;
} }
else { else {
max31865_ok = 0; max31865_ok = 0;
@ -179,6 +182,8 @@ void max31865_init(uint8_t rdt_type) {
*/ */
void max31865_pool(void) { void max31865_pool(void) {
uint8_t * result_ptr;
switch (max31865_current_state) { switch (max31865_current_state) {
case MAX_IDLE: case MAX_IDLE:
// MAX31865 is powered up but not initialized // MAX31865 is powered up but not initialized
@ -189,23 +194,72 @@ void max31865_pool(void) {
max31865_init(MAX_4WIRE); max31865_init(MAX_4WIRE);
} }
max31865_current_state = MAX_INITIALIZED; if (max31865_ok == 1) {
max31865_current_state = MAX_INITIALIZED;
}
break; break;
case MAX_INITIALIZED: case MAX_INITIALIZED:
// initialized and ready to start measurement // initialized and ready to start measurement
max31865_current_state = MAX_MEASUREMENT_STARTED;
max31865_start_singleshot = 1; max31865_start_singleshot = 1;
max31865_vbias = 1;
// this function may change 'max31865_current_state' internally due to errors
max31865_send_config_register();
// disable VBIAS to reduce power consumption
max31865_vbias = 0;
max31865_start_singleshot = 0;
break; break;
case MAX_ERROR: case MAX_ERROR:
// go back to idle in case of any error
max31865_current_state = MAX_IDLE;
break; break;
case MAX_MEASUREMENT_STARTED: case MAX_MEASUREMENT_STARTED:
// measurement has been started before, so now it's time to request for results
max31865_request_registers();
max31865_current_state = MAX_REGISTER_REQUESTED;
break; break;
case MAX_REGISTER_REQUESTED: case MAX_REGISTER_REQUESTED:
// results shall be available
max31865_current_state = MAX_SHUTDOWN;
// check a SPI status
if (spi_get_rx_state() != SPI_RX_DONE) {
// if SPI is not done
max31865_current_state = MAX_ERROR;
}
else {
// get a pointer to results
result_ptr = spi_get_rx_data();
// disable VBIAS to reduce power consumption
max31865_vbias = 0;
// this function may change 'max31865_current_state' internally due to errors
max31865_send_config_register();
max31865_shutdown_ticks = 0;
}
break; break;
case MAX_SHUTDOWN: case MAX_SHUTDOWN:
// MAX31965 is powered up and initialized but PT bias is disabled // MAX31965 is powered up and initialized but PT bias is disabled
// and no measurement is ongoing // and no measurement is ongoing
if (max31865_shutdown_ticks++ > 9) {
max31865_current_state = MAX_INITIALIZED;
max31865_shutdown_ticks = 0;
}
break; break;
case MAX_POWER_OFF: case MAX_POWER_OFF:
// supply voltage for MAX31865 is powered off and no communication // supply voltage for MAX31865 is powered off and no communication