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,

    Yes, you can trigger sampling using the Zephyr API like that.

    When populating the adc_sequence struct you do not populate a pointer to options (adc_sequence_options). This is where you specify the number of samplings to perform with the extra_samplings field. You can see some examples of this in the test code in zephyr\tests\drivers\adc\adc_api\src\test_adc.c.

    Einar

Reply
  • Hi Bojan,

    Yes, you can trigger sampling using the Zephyr API like that.

    When populating the adc_sequence struct you do not populate a pointer to options (adc_sequence_options). This is where you specify the number of samplings to perform with the extra_samplings field. You can see some examples of this in the test code in zephyr\tests\drivers\adc\adc_api\src\test_adc.c.

    Einar

Children
No Data
Related