kopia lustrzana https://github.com/SP8EBC/ParaTNC
max31865 pooling and state machine. warning! it seems that JTAG hangs up after few seconds of debugging
rodzic
f094422d92
commit
faaffd78d9
|
@ -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_ */
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
Ładowanie…
Reference in New Issue