Feat: add adc continuous driver initialization

Refs: #4
adc-init
rkcf 2023-02-21 05:14:38 -06:00
parent d4a9c429cc
commit 86f6026a1c
1 changed files with 48 additions and 2 deletions

View File

@ -4,8 +4,18 @@
#include "esp_log.h"
#include "esp_adc/adc_cali.h"
#include "esp_adc/adc_cali_scheme.h"
#include "esp_adc/adc_continuous.h"
#include "hal/adc_types.h"
/* ADC input pins */
#define ADC_INPUT_1_PIN 4
#define ADC_INPUT_2_PIN 6
#define ADC_INPUT_3_PIN 9 /* TODO Reroute from pin 46 to 9 on schematic, cant do ADC */
#define ADC_INPUT_4_PIN 10
/* ADC channels */
static adc_channel_t channel[4] = {ADC_CHANNEL_3, ADC_CHANNEL_5, ADC_CHANNEL_8, ADC_CHANNEL_9};
static const char *TAG = "EERG";
@ -21,10 +31,46 @@ static void adc_cali_init(void)
.bitwidth = ADC_BITWIDTH_DEFAULT
};
ESP_ERROR_CHECK(adc_cali_create_scheme_curve_fitting(&cali_config, &cali_handle));
ESP_ERROR_CHECK(adc_cali_delete_scheme_curve_fitting(cali_handle));
}
/* Initializes internal 12bit ADC */
static void adc_init(void)
{
/* Initialize calibration driver */
adc_cali_init();
ESP_LOGI(TAG, "Initializing ADC continuous mode driver");
/* Create continuous mode driver handle */
adc_continuous_handle_t adc_handle = NULL;
adc_continuous_handle_cfg_t adc_handle_config = {
.max_store_buf_size = 1024,
.conv_frame_size = 100
};
ESP_ERROR_CHECK(adc_continuous_new_handle(&adc_handle_config, &adc_handle));
/* Configure continuous driver */
adc_continuous_config_t adc_config = {
.sample_freq_hz = 20 * 1000, /* 20kHz TODO calculate proper sampling rate */
.conv_mode = ADC_CONV_SINGLE_UNIT_1,
.format = ADC_DIGI_OUTPUT_FORMAT_TYPE2,
.pattern_num = 4
};
/* Loop through channels for their configs */
adc_digi_pattern_config_t adc_pattern[4] = {0};
for (int i = 0; i < 4; i++){
adc_pattern[i].atten = ADC_ATTEN_DB_0;
adc_pattern[i].channel = channel[i] & 0x7;
adc_pattern[i].unit = ADC_UNIT_1;
adc_pattern[i].bit_width = ADC_BITWIDTH_12;
}
adc_config.adc_pattern = adc_pattern;
ESP_ERROR_CHECK(adc_continuous_config(adc_handle, & adc_config));
}
void app_main(void)
{
adc_cali_init();
/* Initialize internal ADC */
adc_init();
}