This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

saadc input voltage range

Hello.

I have a issue about saadc input range.

First, using 52832, SDK 15.3.0 S332 Softdevice.

I using ble ant both and 2 rtc time and gpiote also used.

my goal is measureing coin cell voltage.

coin cell is CR2032.

I success getting data. however max voltage is under 3.2V.

I use usb power. 

under below is my Configure Setting.

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static void Config_value_init()
{
memset(&saadc_config, 0 , sizeof(saadc_config));
saadc_config.resolution = (nrf_saadc_resolution_t)NRFX_SAADC_CONFIG_RESOLUTION; // 10bit
saadc_config.oversample = (nrf_saadc_oversample_t)NRFX_SAADC_CONFIG_OVERSAMPLE; // disable
saadc_config.interrupt_priority = NRFX_SAADC_CONFIG_IRQ_PRIORITY;
saadc_config.low_power_mode = NRFX_SAADC_CONFIG_LP_MODE;
memset(&channel_config, 0 , sizeof(channel_config));
channel_config.resistor_p = NRF_SAADC_RESISTOR_DISABLED;
channel_config.resistor_n = NRF_SAADC_RESISTOR_DISABLED;
channel_config.gain = NRF_SAADC_GAIN1_6;
channel_config.reference = NRF_SAADC_REFERENCE_INTERNAL;
channel_config.acq_time = NRF_SAADC_ACQTIME_40US;
channel_config.mode = NRF_SAADC_MODE_SINGLE_ENDED;
channel_config.burst = NRF_SAADC_BURST_DISABLED;
channel_config.pin_p = (nrf_saadc_input_t)(NRF_SAADC_INPUT_AIN5);
channel_config.pin_n = NRF_SAADC_INPUT_DISABLED;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

under below is handler func.

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static void user_battery_saadc_handler(nrf_drv_saadc_evt_t const * p_event)
{
nrf_saadc_value_t *value = p_event->data.done.p_buffer; // nrf_saadc_value_t = uint16_t
switch(p_event->type)
{
case NRF_DRV_SAADC_EVT_CALIBRATEDONE :
NRF_LOG_INFO("SAADC Calibration Done");
CaliState = false;
break;
case NRF_DRV_SAADC_EVT_DONE :
Calculate_Voltage(value, &voltage);
NRF_LOG_INFO("DATA = %d BUFFER SIZE = %d Voltage : %f"NRF_LOG_FLOAT_MARKER, *value, p_event->data.done.size, NRF_LOG_FLOAT(voltage) );
Set_battery_Voltage_Ble_Ant();
break;
case NRF_DRV_SAADC_EVT_LIMIT :
break;
default:
break;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

using internal reference 0.6V and gain is 1/6. So I thought max voltage is 3.6V

But I Can't measure 3.2~3.6V.

I Changed ACQTIME . it was not work.

First screenshot is 3.1V. it works well.

Second screenshot is 3.3V. but the data is more lower.

 

Thank you.