#include "esp_adc/adc_cali.h" #include "esp_adc/adc_continuous.h" #include "esp_adc/adc_cali_scheme.h" #include "esp_err.h" #include "hal/adc_types.h" #include "measure.h" #include "soc/soc_caps.h" adc_continuous_handle_t init_measurement_inputs(measurement_input inputs[], int inputs_num){ adc_continuous_handle_cfg_t adc_h_conf = { .conv_frame_size = SOC_ADC_DIGI_DATA_BYTES_PER_CONV, // One sample per interrupt for now .max_store_buf_size = SOC_ADC_DIGI_DATA_BYTES_PER_CONV * inputs_num * 100, // TODO: averaging nb }; adc_continuous_handle_t handle; ESP_ERROR_CHECK(adc_continuous_new_handle(&adc_h_conf, &handle)); adc_digi_pattern_config_t adc_patt[inputs_num]; for(int i = 0; i < inputs_num; i++){ adc_digi_pattern_config_t patt = { .atten = ADC_ATTEN_DB_0, .bit_width = ADC_BITWIDTH_12, .channel = inputs[i].channel, .unit = ADC_UNIT_1, }; adc_patt[i] = patt; } adc_continuous_config_t adc_conf = { .adc_pattern = adc_patt, .pattern_num = inputs_num, .conv_mode = ADC_CONV_SINGLE_UNIT_1, .format = ADC_DIGI_OUTPUT_FORMAT_TYPE2, .sample_freq_hz = SOC_ADC_SAMPLE_FREQ_THRES_LOW, }; ESP_ERROR_CHECK(adc_continuous_config(handle, &adc_conf)); return handle; } void init_conv_driver(measurement_input inputs[], int inputs_num, adc_cali_handle_t* out){ for(int i = 0; i < inputs_num; i++){ adc_cali_curve_fitting_config_t cali_config = { .unit_id = ADC_UNIT_1, .atten = ADC_ATTEN_DB_0, .bitwidth = ADC_BITWIDTH_12, }; ESP_ERROR_CHECK(adc_cali_create_scheme_curve_fitting(&cali_config, &out[i])); } }