Is there any ADC examples for nRF Connect SDK?

Hello,

I can see there are some ADC examples on Github https://github.com/NordicPlayground/nRF52-ADC-examples But those examples are nRF SDK5. Are there any ADC examples for the nRF Connect SDK?

I am using the NCS 2.2.0 on Window

#include <zephyr/kernel.h>
#include <zephyr/logging/log.h>
#include <zephyr/drivers/gpio.h>
#include <zephyr/drivers/adc.h>

//LOG_MODULE_REGISTER(sensor, LOG_LEVEL_DBG);
LOG_MODULE_REGISTER(ctrl, LOG_LEVEL_DBG);

#define SLEEP_INTERVAL 30000
#define ADC_NODE DT_NODELABEL(adc)
static const struct device *adc_dev = DEVICE_DT_GET(ADC_NODE);

// nRF52840 AnalogInput0 - pin
// AIN0 p0.02
// AIN1 p0.03
// AIN2 p0.04
// AIN3 p0.05
// AIN4 p0.028
// AIN5 p0.029
// AIN6 p0.030
// AIN7 p0.031
#define ADC_RESOLUTION 10                                // the reading value range is 0 to 1023
#define ADC_CHANNEL    0
#define ADC_PORT       SAADC_CH_PSELP_PSELP_AnalogInput2 // AIN2
#define ADC_REFERENCE  ADC_REF_INTERNAL                  // 0.6v
#define ADC_GAIN       ADC_GAIN_1_5                      // ADC_REFERENCE*5

struct adc_channel_cfg ch0_cfg = 
{
	.gain = ADC_GAIN,
	.reference = ADC_REFERENCE,
	.acquisition_time = ADC_ACQ_TIME_DEFAULT,
	.channel_id = ADC_CHANNEL,
#ifdef CONFIG_ADC_NRFX_SAADC
	.input_positive = ADC_PORT
#endif
};

int16_t buffer[1];
struct adc_sequence seq = {
	.channels    = BIT(ADC_CHANNEL),
	.buffer      = buffer,
	.buffer_size = sizeof(buffer),
	.resolution  = ADC_RESOLUTION
};

void main(void)
{
	int err = 0;

	if(!device_is_ready(adc_dev)) {
		LOG_ERR("ADC device is not ready");
		return;
	}

	err = adc_channel_setup(adc_dev, &ch0_cfg);

	while (1)
	{
	    err = adc_read(adc_dev, &seq)
		if(0 != err) {
			LOG_ERR("adc device read erro %dr, terminating", err);
			return;
		}
		int32_t mv = buffer[0];
		int32_t adv_vref = adc_ref_internal(adc_dev);
		adc_raw_to_millivolts(adv_vref, ADC_GAIN, ADC_RESOLUTION, &mv);
		LOG_INF("ADC value, ADC voltage: %d mV", mv);
		k_msleep(SLEEP_INTERVAL);
	}
}

I tried to read the voltage from AIN2 but the code has the following compile error:

c:/ncs/toolchains/v2.2.0/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.1.0/../../../../arm-zephyr-eabi/bin/ld.exe: app/libapp.a(main.c.obj): in function `adc_raw_to_millivolts':
C:\ncs\v2.2.0\zephyr\include\zephyr\drivers\adc.h:750: undefined reference to `adc_gain_invert'
c:/ncs/toolchains/v2.2.0/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.1.0/../../../../arm-zephyr-eabi/bin/ld.exe: app/libapp.a(main.c.obj): in function `main':
D:\projects\Nordic\2.2.0\ADC_Controller\build\zephyr\include\generated\syscalls\kernel.h:100: undefined reference to `__device_dts_ord_72'
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
FATAL ERROR: command exited with status 1: 'c:\ncs\toolchains\v2.2.0\opt\bin\cmake.EXE' --build 'd:\projects\Nordic\2.2.0\ADC_Controller\build'

It seems that I need to link a library. Any suggestions? Cheers

Parents Reply Children
No Data
Related