/** * @brief ADC interrupt handler. */ void ADC_IRQHandler(void) { unsigned adc_sample; nrf_adc_conversion_event_clean(); adc_sample = nrf_adc_result_get(); g_vcc_mv = adc_sample * 3600 / 1024; }
/**@brief Function for handling the ADC interrupt. * * @details This function will fetch the conversion result from the ADC, convert the value into * percentage and send it to peer. */ void ADC_IRQHandler(void) { if (nrf_adc_conversion_finished()) { uint8_t adc_result; uint16_t batt_lvl_in_milli_volts; uint8_t percentage_batt_lvl; uint32_t err_code; nrf_adc_conversion_event_clean(); adc_result = nrf_adc_result_get(); batt_lvl_in_milli_volts = ADC_RESULT_IN_MILLI_VOLTS(adc_result) + DIODE_FWD_VOLT_DROP_MILLIVOLTS; percentage_batt_lvl = battery_level_in_percent(batt_lvl_in_milli_volts); err_code = ble_bas_battery_level_update(&m_bas, percentage_batt_lvl); if ( (err_code != NRF_SUCCESS) && (err_code != NRF_ERROR_INVALID_STATE) && (err_code != BLE_ERROR_NO_TX_BUFFERS) && (err_code != BLE_ERROR_GATTS_SYS_ATTR_MISSING) ) { APP_ERROR_HANDLER(err_code); } } }
/**@brief Function for handling the ADC interrupt. * * @details This function will fetch the conversion result from the ADC, convert the value into * percentage and send it to peer. */ void ADC_IRQHandler(void) { uint32_t err_code; uint16_t adc_value; uint8_t percentage_batt_lvl; uint16_t batt_lvl_in_milli_volts; nrf_adc_conversion_event_clean(); nrf_adc_stop(); adc_value = nrf_adc_result_get(); batt_lvl_in_milli_volts = ADC_RESULT_IN_MILLI_VOLTS(adc_value); percentage_batt_lvl = battery_level_in_percent(batt_lvl_in_milli_volts); err_code = ble_bas_battery_level_update(&m_bas, percentage_batt_lvl); if ( (err_code != NRF_SUCCESS) && (err_code != NRF_ERROR_INVALID_STATE) && (err_code != BLE_ERROR_NO_TX_PACKETS) && (err_code != BLE_ERROR_GATTS_SYS_ATTR_MISSING) ) { APP_ERROR_HANDLER(err_code); } }
void nrfx_adc_irq_handler(void) { if (m_cb.p_buffer == NULL) { nrf_adc_event_clear(NRF_ADC_EVENT_END); NRFX_LOG_DEBUG("Event: %s.",NRFX_LOG_ERROR_STRING_GET(NRF_ADC_EVENT_END)); nrf_adc_int_disable(NRF_ADC_INT_END_MASK); nrf_adc_disable(); nrfx_adc_evt_t evt; evt.type = NRFX_ADC_EVT_SAMPLE; evt.data.sample.sample = (nrf_adc_value_t)nrf_adc_result_get(); NRFX_LOG_DEBUG("ADC data:"); NRFX_LOG_HEXDUMP_DEBUG((uint8_t *)(&evt.data.sample.sample), sizeof(nrf_adc_value_t)); m_cb.state = NRFX_DRV_STATE_INITIALIZED; m_cb.event_handler(&evt); } else if (adc_sample_process()) { NRFX_LOG_DEBUG("Event: %s.", NRFX_LOG_ERROR_STRING_GET(NRF_ADC_EVENT_END)); nrf_adc_int_disable(NRF_ADC_INT_END_MASK); nrfx_adc_evt_t evt; evt.type = NRFX_ADC_EVT_DONE; evt.data.done.p_buffer = m_cb.p_buffer; evt.data.done.size = m_cb.size; m_cb.state = NRFX_DRV_STATE_INITIALIZED; NRFX_LOG_DEBUG("ADC data:"); NRFX_LOG_HEXDUMP_DEBUG((uint8_t *)m_cb.p_buffer, m_cb.size * sizeof(nrf_adc_value_t)); m_cb.event_handler(&evt); } }
static bool adc_sample_process() { nrf_adc_event_clear(NRF_ADC_EVENT_END); nrf_adc_disable(); m_cb.p_buffer[m_cb.idx] = (nrf_adc_value_t)nrf_adc_result_get(); m_cb.idx++; if (m_cb.idx < m_cb.size) { bool task_trigger = false; if (m_cb.p_current_conv->p_next == NULL) { m_cb.p_current_conv = m_cb.p_head; } else { m_cb.p_current_conv = m_cb.p_current_conv->p_next; task_trigger = true; } nrf_adc_config_set(m_cb.p_current_conv->config.data); nrf_adc_enable(); if (task_trigger) { //nrf_adc_start(); nrf_adc_task_trigger(NRF_ADC_TASK_START); } return false; } else { return true; } }
static bool adc_sample_process() { nrf_adc_event_clear(NRF_ADC_EVENT_END); nrf_adc_disable(); m_cb.p_buffer[m_cb.idx] = (nrf_adc_value_t)nrf_adc_result_get(); m_cb.idx++; if (m_cb.idx < m_cb.size) { bool task_trigger = false; if (m_cb.p_current_conv->p_next == NULL) { // Make sure the list of channels has not been somehow removed // (it is when all channels are disabled). NRFX_ASSERT(m_cb.p_head); m_cb.p_current_conv = m_cb.p_head; } else { m_cb.p_current_conv = m_cb.p_current_conv->p_next; task_trigger = true; } nrf_adc_init(&m_cb.p_current_conv->config); nrf_adc_enable(); if (task_trigger) { nrf_adc_task_trigger(NRF_ADC_TASK_START); } return false; } else { return true; } }
/** * @brief ADC interrupt handler. */ void ADC_IRQHandler(void) { nrf_adc_conversion_event_clean(); adc_sample = nrf_adc_result_get(); // trigger next ADC conversion nrf_adc_start(); }
/** * @brief ADC interrupt handler. */ void ADC_IRQHandler(void) { //nrf_adc_int_disable(ADC_INTENSET_END_Enabled << ADC_INTENSET_END_Pos); nrf_adc_conversion_event_clean(); adc_sample = nrf_adc_result_get(); //battery_level_update(); // nrf_adc_int_enable(ADC_INTENSET_END_Enabled << ADC_INTENSET_END_Pos); // trigger next ADC conversion nrf_adc_start(); }
void ADC_IRQHandler(void) { nrf_adc_conversion_event_clean(); adc = nrf_adc_result_get(); adc2 = (adc * 3600 / 1023); BatteryVoltage = adc2 * (1800 + 6800) / 1800; if (BatteryVoltage < 6000) LowVoltage++; else LowVoltage = 0; }
/** * @brief ADC interrupt handler. */ void ADC_IRQHandler(void) { nrf_adc_conversion_event_clean(); m_adc_value = (uint16_t)nrf_adc_result_get(); // if (m_adc_value >= ADC_THRESHOLD) { // nrf_gpio_pin_clear(BSP_LED_2); // } // else { // nrf_gpio_pin_set(BSP_LED_2); // } bluetooth_adc_send(m_adc_value); }
/** * @brief Blocking function for executing single ADC conversion. * * This function selects desired input, starts single conversion, * waits for its finish and returns result. * ADC is left in STOP state, given input is selected. * This function does not check if ADC is initialized and powered. * * @param[in] input is requested input to be selected * * @return conversion result */ int32_t nrf_adc_convert_single(nrf_adc_config_input_t input) { int32_t val; nrf_adc_input_select(input); nrf_adc_start(); while (!nrf_adc_conversion_finished()) { } nrf_adc_conversion_event_clean(); val = nrf_adc_result_get(); nrf_adc_stop(); return val; }
nrfx_err_t nrfx_adc_sample_convert(nrfx_adc_channel_t const * const p_channel, nrf_adc_value_t * p_value) { nrfx_err_t err_code; NRFX_ASSERT(m_cb.state != NRFX_DRV_STATE_UNINITIALIZED); if (m_cb.state == NRFX_DRV_STATE_POWERED_ON) { err_code = NRFX_ERROR_BUSY; NRFX_LOG_WARNING("Function: %s, error code: %s.", __func__, NRFX_LOG_ERROR_STRING_GET(err_code)); return err_code; } else { m_cb.state = NRFX_DRV_STATE_POWERED_ON; nrf_adc_config_set(p_channel->config.data); nrf_adc_enable(); nrf_adc_int_disable(NRF_ADC_INT_END_MASK); nrf_adc_start(); if (p_value) { while (!nrf_adc_event_check(NRF_ADC_EVENT_END)) {} nrf_adc_event_clear(NRF_ADC_EVENT_END); *p_value = (nrf_adc_value_t)nrf_adc_result_get(); nrf_adc_disable(); m_cb.state = NRFX_DRV_STATE_INITIALIZED; } else { NRFX_ASSERT(m_cb.event_handler); m_cb.p_buffer = NULL; nrf_adc_int_enable(NRF_ADC_INT_END_MASK); } err_code = NRFX_SUCCESS; NRFX_LOG_INFO("Function: %s, error code: %s.", __func__, NRFX_LOG_ERROR_STRING_GET(err_code)); return err_code; } }
/* Interrupt handler for ADC data ready event */ void ADC_IRQHandler(void) { nrf_adc_conversion_event_clean(); adc_sample = nrf_adc_result_get(); }