I am attempting to use an ADC1 channel as an audio input via the I2S system. I have it working, however I cannot seem to set the gain on the channel to anything other than 11dB (ADC_ATTEN_DB_11). I would like to set it to ADC_ATTEN_DB_6 to better match the input signal range.
I am using IDF v4.4.2. I looked at the source code and I think the way the IDF works is as follows after I call "i2s_adc_enable" to enable sampling on the input (the I2S driver has been initialized).
1. i2s_adc_enable (in i2s.c) calls "_i2s_adc_mode_recover()"
2. _i2s_adc_mode_recover (in i2s.c) calls "adc_i2s_mode_init()"
3. adc_i2s_mode_init (in adc_deprecated.c) sets the ADC channel attenuation to DIG_ADC_ATTEN_DEFUALT (which is ADC_ATTEN_DB_11).
I thought calling adc1_config_channel_atten() after calling i2s_adc_enable() with ADC_ATTEN_DB_6 would correctly set the ADC attenuation but it does not seem to work. Does anyone know why this doesn't work or how I should do this?
As a workaround my system works if I change the constant DIG_ADC_ATTEN_DEFUALT in adc_deprecated.c to ADC_ATTEN_DB_6. However I'd rather not have to go modifying the IDF to make this program work.
How to set ADC1 channel gain when using with I2S?
Who is online
Users browsing this forum: markkuk and 349 guests