I am trying to read ADC values for 8 different channel, in order. It's just to test if the ADC and its API.
I successfully receive the ADC binding (it returns 0), and the channel setup also return 0 for all 8 channels.
However, the adc_read() returns -EINVAL (-22). I don't see why. Any help would be nice!
int16_t sampleBuffer[64];
const struct adc_sequence_options options = { 0, NULL, 0 };
const struct adc_sequence sequence = {
.options = &options,
.channels = BIT(0),
.buffer = &sampleBuffer,
.buffer_size = sizeof(sampleBuffer),
.resolution = 10,
.oversampling = 0,
.calibrate = false,
};
int ret = adc_read(adc_dev, &sequence);
printk("Reading ADC %u : %i : %i\n", 0, ret, sampleBuffer[0]);
I have initialized the channels like this:
adc_dev = device_get_binding("ADC_0");
if (!adc_dev)
{
printk("Failed to bind ADC\n");
}
static struct adc_channel_cfg adc_channel_cfg = {
.gain = ADC_GAIN_1_6,
.reference = ADC_REF_INTERNAL,
.acquisition_time = ADC_ACQ_TIME_DEFAULT,
.channel_id = 0,
};
printk("Setting up ADC channel %u: %i...\n", 0, adc_channel_setup(adc_dev, &adc_channel_cfg));
And my prj.conf contains
CONFIG_ADC=y