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

Continuous periodic nRF52840 ADC sampling with Zephyr

Hello, guys.

We are using Zephyr RTOS (NCS v1.4.2) with nRF52840 development kit.

The idea is to have continuous ADC sampling on two ADC channels. So far, I was able to properly initialize the ADC device, and get one single ADC read with the following piece of code:

const struct adc_sequence sequence = {
	.channels = BIT(ADC_1ST_CHANNEL_ID),
	.buffer = m_sample_buffer,
	.buffer_size = sizeof(m_sample_buffer),
	.resolution = ADC_RESOLUTION,
};

ret = adc_read(adc_dev, &sequence);
if (ret) {
    printk("adc_read() failed with code %d\n", ret);
}

There is an issue even with this piece of code because, when I call adc_read(adc_dev, &sequence) function, only the first value of m_sample_buffer is updated, the rest of the m_sample_buffer values remain 0. What I am missing here?

Other than that, is there any way that we configure ADC device to do periodic sampling in the background without our intervention?

Thanks in advance for your time and efforts.

Sincerely,

Bojan.

Parents
  • Hi Bojan,

    The ADC calibration time depends on the previously configured acquisition time. If not yet configured, the default acquisition time of 10 us is used. The total calibration time is a few microseconds more as it includes conversion.

    Calibration is done to sets the correct offset, so that measuring GND will give a sample value of 0. This will normally not change over time unless the temperature changes. So you should calibrate after reset, and either regularly or when there are temperature changes.

Reply
  • Hi Bojan,

    The ADC calibration time depends on the previously configured acquisition time. If not yet configured, the default acquisition time of 10 us is used. The total calibration time is a few microseconds more as it includes conversion.

    Calibration is done to sets the correct offset, so that measuring GND will give a sample value of 0. This will normally not change over time unless the temperature changes. So you should calibrate after reset, and either regularly or when there are temperature changes.

Children
No Data
Related