Hi,
I want to get Battery ADC Value.
So, I simply used nrf_drv_saadc_convert()
At first I thought it was the right value,
Later, I found out the wrong value.
If you supply 1.5v, the value should be over 400, but less than 100.
(used battery service)
CODE :
// ADC setting
static nrf_saadc_value_t m_battery;
void saadc_callback(nrf_drv_saadc_evt_t const * p_event)
{
//ret_code_t err_code;
//err_code = nrf_drv_saadc_sample_convert(0, &m_battery);
//APP_ERROR_CHECK(err_code);
}
static void bat_timeout_handler(void * p_context)
{
UNUSED_PARAMETER(p_context);
ret_code_t err_code;
// get ADV value
err_code = nrf_drv_saadc_sample_convert(0, &m_battery);
APP_ERROR_CHECK(err_code);
// (%)percent change formula
uint8_t percent = ((m_battery-MIN_ADC)/DIF_ADC)*100;
if(percent >= 100)
{
percent = 100;
}
NRF_LOG_INFO("ADC : %d%",m_battery);
NRF_LOG_INFO("battery : %d%",percent);
// send (%)percent value
err_code = ble_bas_battery_level_update(&m_bas, percent, BLE_CONN_HANDLE_ALL);
if ((err_code != NRF_SUCCESS) &&
(err_code != NRF_ERROR_INVALID_STATE) &&
(err_code != NRF_ERROR_RESOURCES) &&
(err_code != NRF_ERROR_BUSY) &&
(err_code != BLE_ERROR_GATTS_SYS_ATTR_MISSING))
{
APP_ERROR_HANDLER(err_code);
}
}
static void saadc_init(void)
{
ret_code_t err_code;
#if TEST
nrf_saadc_channel_config_t channel_config = NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(ARDUINO_A0_PIN);
#else
// SAADC configuration struct and pin setting
nrf_saadc_channel_config_t channel_config = NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(BAT_ADC_IN);
#endif
// SAADC struct init and register SAADC evnet handler
err_code = nrf_drv_saadc_init(NULL, saadc_callback);
APP_ERROR_CHECK(err_code);
// SAADC channel init
err_code = nrf_drv_saadc_channel_init(0, &channel_config);
APP_ERROR_CHECK(err_code);
}
static void application_timers_start(void)
{
ret_code_t err_code;
err_code = app_timer_start(m_battery_timer_id, BATTERY_LEVEL_MEAS_INTERVAL/*1s*/, NULL);
APP_ERROR_CHECK(err_code);
}
Let me know what's wrong.
Thank you.
<softdevice : 6.1.1, SDK : 15.2.0, nRF52-DK>