Zephyr Battery Voltage Measurement

Hello, guys!

My goal is to monitor battery voltage by using a voltage divider and ADC peripheral of nRF51822 SoC. I find that this example perfectly fits my needs. Consequently, I included the device tree node that describes the voltage divider for battery monitoring:

/ {
	vbatt {
		compatible = "voltage-divider";
		io-channels = <&adc 6>;
		output-ohms = <1000>;
		full-ohms = <(1000 + 3000)>;
		power-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
	};
};

prj.conf file contains the following ADC-related line:

CONFIG_ADC=y

However, when I try to build the example, I get the Unsupported ADC error that is a consequence of this part of the code (in battery.c file):

#ifdef CONFIG_ADC_NRFX_SAADC
	*accp = (struct adc_channel_cfg){
		.gain = BATTERY_ADC_GAIN,
		.reference = ADC_REF_INTERNAL,
		.acquisition_time = ADC_ACQ_TIME(ADC_ACQ_TIME_MICROSECONDS, 40),
	};

	if (cfg->output_ohm != 0) {
		accp->input_positive = SAADC_CH_PSELP_PSELP_AnalogInput0
			+ iocp->channel;
	} else {
		accp->input_positive = SAADC_CH_PSELP_PSELP_VDD;
	}

	asp->resolution = 14;
#else /* CONFIG_ADC_var */
#error Unsupported ADC
#endif /* CONFIG_ADC_var */

I tried including CONFIG_NRFX_SAADC=y or CONFIG_ADC_NRFX_SAADC=y lines in prj.conf file but to no avail. Adding #include <nrfx_saadc.h> in battery.c file did not help as well.

Do you have any idea what I am missing here in order to be able to compile and try this example with nRF51822 SoC?

Thanks in advance for your time and efforts.

Cheers Beers

Bojan.

Parents Reply
  • Hello, !

    Where can I find an appropriate example of reading ADC voltage with nRF51 SoCs in the Zephyr environment?  I started looking at the Analog-to-Digital Converter (ADC) sample from here but the Note says that:

    The sample does not work on Nordic platforms where there is a distinction between channel and analog input that requires additional configuration. See samples/boards/nrf/battery for an example of using the ADC infrastructure on Nordic hardware.

    However, samples/boards/nrf/battery is using SAADC peripheral which is not supported in nRF51 SoCs. Can you help me find the appropriate way of using the ADC peripheral of nRF51 SoCs in the Zephyr environment?

    Thanks in advance.

    Regards,

    Bojan.

Children
Related