2023-06-13 14:27:48 +02:00

54 lines
1.6 KiB
C

#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]));
}
}