nRF52832 voltage measurement using internal reference (not an external divider into an ADC pin).

I am trying to measure the battery voltage on my custom board which is based on the nRF52832 device.  I am using nRF Connect SDK 2.7.0 in VS Code.  The dts file for this custom board contains (among other things that aren't germane to this question):

/ {
    model = "rwe_152001_01_nrf52832";
    compatible = "rwe,rwe_152001_01_nrf52832";

    zephyr,user {
        io-channels = <&adc 7>;  // Use channel 0 for VDD measurement
    };  
}; 

&adc {
    status = "okay";
};
My code is as follows and I have tried various channels (0, 4, and 7 at the 'suggestion" of Copilot), but I keep getting " <err> adc_nrfx_saadc: Channel 7 not configured
ADC read failed: -22" in the console.  I think I am close but I just can't seem to figure it out.  Please forgive my newbiness.
#pragma GCC diagnostic ignored "-Wmain"

#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/drivers/adc.h>
#include <zephyr/devicetree/io-channels.h>
#include <stdio.h>

#define ADC_RESOLUTION 10
#define ADC_GAIN ADC_GAIN_1_6
#define ADC_REFERENCE ADC_REF_INTERNAL
#define ADC_ACQUISITION_TIME ADC_ACQ_TIME_DEFAULT

static const struct adc_dt_spec adc_spec = ADC_DT_SPEC_GET_BY_IDX(DT_PATH(zephyr_user), 0);
static int16_t sample_buffer;

void main(void)
{
    int err;

    printk("a\n");
    if (!device_is_ready(adc_spec.dev))
    {
        printk("ADC device not found\n");
        return;
    }

    printk("b\n");
    struct adc_channel_cfg channel_cfg = {
        .gain = ADC_GAIN,
        .reference = ADC_REFERENCE,
        .acquisition_time = ADC_ACQ_TIME_DEFAULT,
        .channel_id = adc_spec.channel_id,
    };

    err = adc_channel_setup(adc_spec.dev, &channel_cfg);
    printk("c\n");
    if (err)
    {
        printk("ADC channel setup failed: %d\n", err);
        return;
    }

    const struct adc_sequence sequence = {
        .channels = BIT(adc_spec.channel_id),
        .buffer = &sample_buffer,
        .buffer_size = sizeof(sample_buffer),
        .resolution = ADC_RESOLUTION,
    };

    while (1)
    {
        err = adc_read(adc_spec.dev, &sequence);
        if (err)
        {
            printk("ADC read failed: %d\n", err);
        }
        else
        {
            // Convert the raw sample to voltage
            //float voltage = (sample_buffer * 3.6) / 1024; // Assuming 3.6V reference and 10-bit resolution
            //char voltage_str;
            printk("ADC sample: %d\n", sample_buffer);
        }
        k_sleep(K_MSEC(1000));
    }
}
Related