Hello,
I have been trying to get the ADC working but for some reason, the adc_read function throws an error of invalid argument ( -EINVAL (-22)). The adc_channel_setup function returns 0.
I'm using SDK v1.3.0 and given below is my code and config:
void main(void)
{
struct device *dev;
struct device *adc;
bool led_is_on = true;
int ret;
s16_t buffer;
const struct adc_sequence_options options = { 0, NULL, 0 };
const struct adc_channel_cfg ch_cfg = {
.gain = ADC_GAIN_1_6,
// .differential = 0,
.reference = ADC_REF_INTERNAL,
.acquisition_time = ADC_ACQ_TIME(ADC_ACQ_TIME_MICROSECONDS, 40),
.channel_id = 0,
#if defined(CONFIG_ADC_CONFIGURABLE_INPUTS)
.input_positive = NRF_SAADC_NS_BASE,
#endif
};
const struct adc_sequence seq = {
.options = &options,
.channels = BIT(0),
.buffer = &buffer,
.buffer_size = sizeof(buffer),
.resolution = 14,
.oversampling = 4,
.calibrate = false,
};
adc = device_get_binding(DT_LABEL(DT_ALIAS(adc_0)));
if (!adc) {
printk("adc device not found\n");
return;
}
else {
printk("ADC has been bound\n");
}
int err = adc_channel_setup(adc, &ch_cfg);
if (err) {
printk("failed to setup ADC channel -- %d\n", err);
return;
}
else{
printk("ADC setup is done!\n");
}
while (1) {
int ret = adc_read(adc, &seq);
printk("ADC %u , %i , %i\n", 0, ret, buffer);
k_sleep(K_MSEC(1000));
}
}
Project config file:
CONFIG_GPIO=y CONFIG_ADC=y CONFIG_CONSOLE=y CONFIG_STDOUT_CONSOLE=y CONFIG_PRINTK=y CONFIG_ADC_ASYNC=y
overlay file:
&adc {
status = "okay";
};
Some help would be much appreciated.
Thank you!