54 lines
1.6 KiB
C
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]));
|
|
}
|
|
} |