Hey everyone. I'm trying to read ADC value from sensor and send it via ble.
I use timer to get the value from sensor every 5 seconds, however ADC interruption correlates with BLE interruption and I get an error via serial port
APP_ERROR:ERROR:Fatal
:INFO:Health Themometer Sensor Start!
:INFO:Fast advertising
:INFO:ADC event counter: 1
:INFO:Temperature: 24°C
:INFO:ADC event counter: 2
:INFO:Temperature: 24°C
APP_ERROR:ERROR:Fatal
:INFO:Health Themometer Sensor Start!
:INFO:Fast advertising
I looked at hts example where it uses timer for simulation battery level and it works, but my not.
I have 3 main functions:
static void lmt70_event_handler(nrf_drv_adc_evt_t const * p_event) // this is adc conversion interruption, if I remove everything below, I don't have errors, but even though I remove everything instead of first NRF_LOG I get this error again
{
if (p_event->type == NRF_DRV_ADC_EVT_DONE)
{
adc_counter++;
NRF_LOG_INFO("ADC event counter: %d\r\n", adc_counter);
float LMT70_reading = ADC_RESULT_IN_MILLI_VOLTS(p_event->data.done.p_buffer[0]);
float A_val = LMT70_AMul * (LMT70_reading * LMT70_reading * LMT70_reading);
float B_val = LMT70_BMul * (LMT70_reading * LMT70_reading);
float C_val = LMT70_CMul * LMT70_reading;
float degC = A_val + B_val + C_val + LMT70_DMul;
if (isConnected)
temperature_measurement_send(degC);
NRF_LOG_INFO("Temperature: %d°C\r\n", degC);
}
}
static void lmt70_timeout_handler(void * p_context) // this is timer interruption
{
UNUSED_PARAMETER(p_context);
APP_ERROR_CHECK(nrf_drv_adc_buffer_convert(adc_buffer, ADC_BUFFER_SIZE));
for (uint32_t i = 0; i < ADC_BUFFER_SIZE; i++)
{
nrf_drv_adc_sample();
__SEV();
__WFE();
__WFE();
NRF_LOG_FLUSH();
}
}
I use 2.0.1 softdevice