From 1ecf73ae11c07541684d3036c31a60995f101980 Mon Sep 17 00:00:00 2001 From: rkcf Date: Mon, 20 Feb 2023 09:46:24 -0600 Subject: [PATCH 01/13] Feat: add ADC calibration driver initialization function Refs: #4 --- src/main/esp32_eurorack_generic.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/esp32_eurorack_generic.c b/src/main/esp32_eurorack_generic.c index 7b66f33..71e0bf0 100644 --- a/src/main/esp32_eurorack_generic.c +++ b/src/main/esp32_eurorack_generic.c @@ -1,6 +1,30 @@ #include +#include "esp_err.h" +#include "esp_log.h" +#include "esp_adc/adc_cali.h" +#include "esp_adc/adc_cali_scheme.h" +#include "hal/adc_types.h" + +static const char *TAG = "EERG"; + + +/* Initializes calibration driver of internal 12bit ADC */ +static void adc_calibrate(void) +{ + ESP_LOGI(TAG, "Initializing ADC calibration driver"); + adc_cali_handle_t cali_handle; + /* Create and apply calibration driver configuration */ + adc_cali_curve_fitting_config_t cali_config = { + .unit_id = ADC_UNIT_1, + .atten = ADC_ATTEN_DB_0, + .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)); +} + void app_main(void) { - + adc_calibrate(); } -- 2.40.1 From d4a9c429cc51e1918f3e642b30a5bf0810d5b4c7 Mon Sep 17 00:00:00 2001 From: rkcf Date: Mon, 20 Feb 2023 09:51:43 -0600 Subject: [PATCH 02/13] Refactor: rename adc_calibrate function Refs: #4 --- src/main/esp32_eurorack_generic.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/esp32_eurorack_generic.c b/src/main/esp32_eurorack_generic.c index 71e0bf0..e201d78 100644 --- a/src/main/esp32_eurorack_generic.c +++ b/src/main/esp32_eurorack_generic.c @@ -10,7 +10,7 @@ static const char *TAG = "EERG"; /* Initializes calibration driver of internal 12bit ADC */ -static void adc_calibrate(void) +static void adc_cali_init(void) { ESP_LOGI(TAG, "Initializing ADC calibration driver"); adc_cali_handle_t cali_handle; @@ -26,5 +26,5 @@ static void adc_calibrate(void) void app_main(void) { - adc_calibrate(); + adc_cali_init(); } -- 2.40.1 From 86f6026a1c908e4eb657ff02deae10f2e6adee19 Mon Sep 17 00:00:00 2001 From: rkcf Date: Tue, 21 Feb 2023 05:14:38 -0600 Subject: [PATCH 03/13] Feat: add adc continuous driver initialization Refs: #4 --- src/main/esp32_eurorack_generic.c | 50 +++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/src/main/esp32_eurorack_generic.c b/src/main/esp32_eurorack_generic.c index e201d78..ebc6e7e 100644 --- a/src/main/esp32_eurorack_generic.c +++ b/src/main/esp32_eurorack_generic.c @@ -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(); } -- 2.40.1 From 3d7a783905c583b5a551fca0ad2f1404ef637f01 Mon Sep 17 00:00:00 2001 From: rkcf Date: Tue, 21 Feb 2023 05:29:42 -0600 Subject: [PATCH 04/13] Feat: add section to main for adc continuous and calibration init Refs: #4 --- src/main/esp32_eurorack_generic.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/main/esp32_eurorack_generic.c b/src/main/esp32_eurorack_generic.c index ebc6e7e..e2fdb89 100644 --- a/src/main/esp32_eurorack_generic.c +++ b/src/main/esp32_eurorack_generic.c @@ -20,7 +20,7 @@ static const char *TAG = "EERG"; /* Initializes calibration driver of internal 12bit ADC */ -static void adc_cali_init(void) +static void adc_cali_init(adc_cali_handle_t *handle) { ESP_LOGI(TAG, "Initializing ADC calibration driver"); adc_cali_handle_t cali_handle; @@ -31,14 +31,14 @@ static void adc_cali_init(void) .bitwidth = ADC_BITWIDTH_DEFAULT }; ESP_ERROR_CHECK(adc_cali_create_scheme_curve_fitting(&cali_config, &cali_handle)); + + /* Update caller's handle */ + *handle = cali_handle; } /* Initializes internal 12bit ADC */ -static void adc_init(void) +static void adc_cont_init(adc_continuous_handle_t *handle) { - /* Initialize calibration driver */ - adc_cali_init(); - ESP_LOGI(TAG, "Initializing ADC continuous mode driver"); /* Create continuous mode driver handle */ @@ -67,10 +67,26 @@ static void adc_init(void) } adc_config.adc_pattern = adc_pattern; ESP_ERROR_CHECK(adc_continuous_config(adc_handle, & adc_config)); + + /* Update caller's handle */ + *handle = adc_handle; } void app_main(void) { /* Initialize internal ADC */ - adc_init(); + adc_cali_handle_t adc_cali_handle = NULL; + adc_continuous_handle_t adc_handle = NULL; + /* Initialize calibration driver */ + adc_cali_init(&adc_cali_handle); + /* Initialize continuous driver */ + adc_cont_init(&adc_handle); + + /* Start the continuous driver */ + ESP_ERROR_CHECK(adc_continuous_start(adc_handle)); + + /* Cleanup adc */ + ESP_ERROR_CHECK(adc_continuous_stop(adc_handle)); + ESP_ERROR_CHECK(adc_continuous_deinit(adc_handle)); + ESP_ERROR_CHECK(adc_cali_delete_scheme_curve_fitting(adc_cali_handle)); } -- 2.40.1 From 1d2d1ce6bcbfd912f5de9b0c539a34fdfdaf9acc Mon Sep 17 00:00:00 2001 From: rkcf Date: Tue, 21 Feb 2023 05:40:34 -0600 Subject: [PATCH 05/13] Refactor: move adc cleanup steps to seperate function and made adc handles global Refs: #4 --- src/main/esp32_eurorack_generic.c | 40 +++++++++++++++---------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/main/esp32_eurorack_generic.c b/src/main/esp32_eurorack_generic.c index e2fdb89..84ff232 100644 --- a/src/main/esp32_eurorack_generic.c +++ b/src/main/esp32_eurorack_generic.c @@ -16,33 +16,41 @@ /* ADC channels */ static adc_channel_t channel[4] = {ADC_CHANNEL_3, ADC_CHANNEL_5, ADC_CHANNEL_8, ADC_CHANNEL_9}; +/* ADC handles */ +static adc_continuous_handle_t adc_handle; +static adc_cali_handle_t adc_cali_handle; + static const char *TAG = "EERG"; +/* Deinitializes ADC handles */ +static void adc_cleanup(void) +{ + ESP_LOGI(TAG, "Cleaning up ADC"); + ESP_ERROR_CHECK(adc_continuous_stop(adc_handle)); + ESP_ERROR_CHECK(adc_continuous_deinit(adc_handle)); + ESP_ERROR_CHECK(adc_cali_delete_scheme_curve_fitting(adc_cali_handle)); +} + /* Initializes calibration driver of internal 12bit ADC */ -static void adc_cali_init(adc_cali_handle_t *handle) +static void adc_cali_init(void) { ESP_LOGI(TAG, "Initializing ADC calibration driver"); - adc_cali_handle_t cali_handle; /* Create and apply calibration driver configuration */ adc_cali_curve_fitting_config_t cali_config = { .unit_id = ADC_UNIT_1, .atten = ADC_ATTEN_DB_0, .bitwidth = ADC_BITWIDTH_DEFAULT }; - ESP_ERROR_CHECK(adc_cali_create_scheme_curve_fitting(&cali_config, &cali_handle)); - - /* Update caller's handle */ - *handle = cali_handle; + ESP_ERROR_CHECK(adc_cali_create_scheme_curve_fitting(&cali_config, &adc_cali_handle)); } /* Initializes internal 12bit ADC */ -static void adc_cont_init(adc_continuous_handle_t *handle) +static void adc_cont_init(void) { 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 @@ -67,26 +75,18 @@ static void adc_cont_init(adc_continuous_handle_t *handle) } adc_config.adc_pattern = adc_pattern; ESP_ERROR_CHECK(adc_continuous_config(adc_handle, & adc_config)); - - /* Update caller's handle */ - *handle = adc_handle; } void app_main(void) { /* Initialize internal ADC */ - adc_cali_handle_t adc_cali_handle = NULL; - adc_continuous_handle_t adc_handle = NULL; /* Initialize calibration driver */ - adc_cali_init(&adc_cali_handle); + adc_cali_init(); /* Initialize continuous driver */ - adc_cont_init(&adc_handle); - + adc_cont_init(); /* Start the continuous driver */ ESP_ERROR_CHECK(adc_continuous_start(adc_handle)); - /* Cleanup adc */ - ESP_ERROR_CHECK(adc_continuous_stop(adc_handle)); - ESP_ERROR_CHECK(adc_continuous_deinit(adc_handle)); - ESP_ERROR_CHECK(adc_cali_delete_scheme_curve_fitting(adc_cali_handle)); + /* Cleanup ADC */ + adc_cleanup(); } -- 2.40.1 From 2abdd7be0cc77d23ba36734704ef48cca84cf56f Mon Sep 17 00:00:00 2001 From: rkcf Date: Tue, 21 Feb 2023 05:57:42 -0600 Subject: [PATCH 06/13] Feat: add ADC callback on conversion done Refs: #4 --- src/main/esp32_eurorack_generic.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/esp32_eurorack_generic.c b/src/main/esp32_eurorack_generic.c index 84ff232..bd39c74 100644 --- a/src/main/esp32_eurorack_generic.c +++ b/src/main/esp32_eurorack_generic.c @@ -1,10 +1,14 @@ #include +#include "esp_attr.h" #include "esp_err.h" #include "esp_log.h" #include "esp_adc/adc_cali.h" #include "esp_adc/adc_cali_scheme.h" #include "esp_adc/adc_continuous.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/portmacro.h" #include "hal/adc_types.h" /* ADC input pins */ @@ -19,10 +23,20 @@ static adc_channel_t channel[4] = {ADC_CHANNEL_3, ADC_CHANNEL_5, ADC_CHANNEL_8, /* ADC handles */ static adc_continuous_handle_t adc_handle; static adc_cali_handle_t adc_cali_handle; +static TaskHandle_t adc_task_handle; static const char *TAG = "EERG"; +/* ADC conversion finished callback */ +static bool IRAM_ATTR adc_conv_cb(adc_continuous_handle_t handle, const adc_continuous_evt_data_t *edata, void *user_data) +{ + BaseType_t mustYield = pdFALSE; + /* Send notification to handler task */ + vTaskNotifyGiveFromISR(adc_task_handle, &mustYield); + return (mustYield == pdTRUE); +} + /* Deinitializes ADC handles */ static void adc_cleanup(void) { @@ -75,6 +89,12 @@ static void adc_cont_init(void) } adc_config.adc_pattern = adc_pattern; ESP_ERROR_CHECK(adc_continuous_config(adc_handle, & adc_config)); + + /* Configure callbacks */ + adc_continuous_evt_cbs_t cbs = { + .on_conv_done = adc_conv_cb + }; + ESP_ERROR_CHECK(adc_continuous_register_event_callbacks(adc_handle, &cbs, NULL)); } void app_main(void) @@ -85,6 +105,7 @@ void app_main(void) /* Initialize continuous driver */ adc_cont_init(); /* Start the continuous driver */ + adc_task_handle = xTaskGetCurrentTaskHandle(); ESP_ERROR_CHECK(adc_continuous_start(adc_handle)); /* Cleanup ADC */ -- 2.40.1 From 284f9e4d7164e6a1f86d6fb73bad69c2b43d0315 Mon Sep 17 00:00:00 2001 From: rkcf Date: Tue, 21 Feb 2023 06:26:47 -0600 Subject: [PATCH 07/13] Feat: add loop to main to read adc data Refs: #4 --- src/main/esp32_eurorack_generic.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/main/esp32_eurorack_generic.c b/src/main/esp32_eurorack_generic.c index bd39c74..2d1faed 100644 --- a/src/main/esp32_eurorack_generic.c +++ b/src/main/esp32_eurorack_generic.c @@ -10,6 +10,7 @@ #include "freertos/task.h" #include "freertos/portmacro.h" #include "hal/adc_types.h" +#include "soc/soc_caps.h" /* ADC input pins */ #define ADC_INPUT_1_PIN 4 @@ -17,6 +18,8 @@ #define ADC_INPUT_3_PIN 9 /* TODO Reroute from pin 46 to 9 on schematic, cant do ADC */ #define ADC_INPUT_4_PIN 10 +#define ADC_READ_LEN 256 + /* ADC channels */ static adc_channel_t channel[4] = {ADC_CHANNEL_3, ADC_CHANNEL_5, ADC_CHANNEL_8, ADC_CHANNEL_9}; @@ -67,7 +70,7 @@ static void adc_cont_init(void) /* Create continuous mode driver handle */ adc_continuous_handle_cfg_t adc_handle_config = { .max_store_buf_size = 1024, - .conv_frame_size = 100 + .conv_frame_size = ADC_READ_LEN }; ESP_ERROR_CHECK(adc_continuous_new_handle(&adc_handle_config, &adc_handle)); @@ -108,6 +111,29 @@ void app_main(void) adc_task_handle = xTaskGetCurrentTaskHandle(); ESP_ERROR_CHECK(adc_continuous_start(adc_handle)); + esp_err_t adc_ret; + uint32_t ret_num = 0; + uint8_t result[ADC_READ_LEN] = {0}; + + while (1) { + /* Perform a read */ + adc_ret = adc_continuous_read(adc_handle, result, ADC_READ_LEN, &ret_num, 0); + if (adc_ret == ESP_OK) { + for (int i = 0; i < ret_num; i+= SOC_ADC_DIGI_RESULT_BYTES) { + /* Grab the data and channel number */ + adc_digi_output_data_t *p_data = (void*)&result[i]; + uint32_t chan = ((p_data)->type2.channel); + uint32_t data = ((p_data)->type2.data); + /* Check channel number to see if data is bogus */ + if (chan < SOC_ADC_CHANNEL_NUM(ADC_UNIT_1)) { + ESP_LOGI("adc", "ADC_1_%"PRIu32" value: %"PRIx32, chan, data); + } else { + ESP_LOGW("adc", "Invalid data from ADC_1_%"PRIu32, chan); + } + } + } + } + /* Cleanup ADC */ adc_cleanup(); } -- 2.40.1 From 63033f73f4d46fa009eabeecae2928bd7a16c5a5 Mon Sep 17 00:00:00 2001 From: rkcf Date: Tue, 21 Feb 2023 06:32:54 -0600 Subject: [PATCH 08/13] Fix: memset results first time Refs: #4 --- src/main/esp32_eurorack_generic.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/esp32_eurorack_generic.c b/src/main/esp32_eurorack_generic.c index 2d1faed..544c50e 100644 --- a/src/main/esp32_eurorack_generic.c +++ b/src/main/esp32_eurorack_generic.c @@ -1,4 +1,5 @@ #include +#include #include "esp_attr.h" #include "esp_err.h" @@ -114,6 +115,8 @@ void app_main(void) esp_err_t adc_ret; uint32_t ret_num = 0; uint8_t result[ADC_READ_LEN] = {0}; + /* Fill result with 0xcc */ + memset(result, 0xcc, ADC_READ_LEN); while (1) { /* Perform a read */ -- 2.40.1 From 0aa43c5f5bcf199671f40b6c222c9f312fb18bc8 Mon Sep 17 00:00:00 2001 From: rkcf Date: Tue, 21 Feb 2023 07:15:46 -0600 Subject: [PATCH 09/13] Refactor: move read loop to its own task function Refs: #4 --- src/main/esp32_eurorack_generic.c | 56 +++++++++++++++++++------------ 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/src/main/esp32_eurorack_generic.c b/src/main/esp32_eurorack_generic.c index 544c50e..14c2c5e 100644 --- a/src/main/esp32_eurorack_generic.c +++ b/src/main/esp32_eurorack_generic.c @@ -31,6 +31,38 @@ static TaskHandle_t adc_task_handle; static const char *TAG = "EERG"; +/* ADC continuous read task */ +static void adc_read_task(void *pvParameter) +{ + ESP_LOGI(TAG, "Starting adc read task"); + esp_err_t adc_ret; + uint32_t ret_num = 0; + uint8_t result[ADC_READ_LEN] = {0}; + /* Fill result with 0xcc */ + memset(result, 0xcc, ADC_READ_LEN); + + /* Wait here until notified that the conversion is done */ + ulTaskNotifyTake(pdTRUE, portMAX_DELAY); + + while (1) { + /* Perform a read */ + adc_ret = adc_continuous_read(adc_handle, result, ADC_READ_LEN, &ret_num, 0); + if (adc_ret == ESP_OK) { + for (int i = 0; i < ret_num; i+= SOC_ADC_DIGI_RESULT_BYTES) { + /* Grab the data and channel number */ + adc_digi_output_data_t *p_data = (void*)&result[i]; + uint32_t chan = ((p_data)->type2.channel); + uint32_t data = ((p_data)->type2.data); + /* Check channel number to see if data is bogus */ + if (chan < SOC_ADC_CHANNEL_NUM(ADC_UNIT_1)) { + ESP_LOGI("adc", "ADC_1_%"PRIu32" value: %"PRIx32, chan, data); + } else { + ESP_LOGW("adc", "Invalid data from ADC_1_%"PRIu32, chan); + } + } + } + } +} /* ADC conversion finished callback */ static bool IRAM_ATTR adc_conv_cb(adc_continuous_handle_t handle, const adc_continuous_evt_data_t *edata, void *user_data) @@ -109,32 +141,12 @@ void app_main(void) /* Initialize continuous driver */ adc_cont_init(); /* Start the continuous driver */ - adc_task_handle = xTaskGetCurrentTaskHandle(); ESP_ERROR_CHECK(adc_continuous_start(adc_handle)); - esp_err_t adc_ret; - uint32_t ret_num = 0; - uint8_t result[ADC_READ_LEN] = {0}; - /* Fill result with 0xcc */ - memset(result, 0xcc, ADC_READ_LEN); + xTaskCreate(adc_read_task, "adc read", 2048, NULL, 0, &adc_task_handle); while (1) { - /* Perform a read */ - adc_ret = adc_continuous_read(adc_handle, result, ADC_READ_LEN, &ret_num, 0); - if (adc_ret == ESP_OK) { - for (int i = 0; i < ret_num; i+= SOC_ADC_DIGI_RESULT_BYTES) { - /* Grab the data and channel number */ - adc_digi_output_data_t *p_data = (void*)&result[i]; - uint32_t chan = ((p_data)->type2.channel); - uint32_t data = ((p_data)->type2.data); - /* Check channel number to see if data is bogus */ - if (chan < SOC_ADC_CHANNEL_NUM(ADC_UNIT_1)) { - ESP_LOGI("adc", "ADC_1_%"PRIu32" value: %"PRIx32, chan, data); - } else { - ESP_LOGW("adc", "Invalid data from ADC_1_%"PRIu32, chan); - } - } - } + } /* Cleanup ADC */ -- 2.40.1 From 25ac658b28b81f7c2a956dc06bdcbcd48d06d6b8 Mon Sep 17 00:00:00 2001 From: rkcf Date: Tue, 21 Feb 2023 09:58:22 -0600 Subject: [PATCH 10/13] Fix: creating task was failing due to stack limits Refs: #4 --- src/main/esp32_eurorack_generic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/esp32_eurorack_generic.c b/src/main/esp32_eurorack_generic.c index 14c2c5e..09fa69f 100644 --- a/src/main/esp32_eurorack_generic.c +++ b/src/main/esp32_eurorack_generic.c @@ -143,7 +143,7 @@ void app_main(void) /* Start the continuous driver */ ESP_ERROR_CHECK(adc_continuous_start(adc_handle)); - xTaskCreate(adc_read_task, "adc read", 2048, NULL, 0, &adc_task_handle); + xTaskCreate(adc_read_task, "adc read", 4096, NULL, 0, &adc_task_handle); while (1) { -- 2.40.1 From 15de31d03593bf212e9cc6ba7c64299f214ba1a5 Mon Sep 17 00:00:00 2001 From: rkcf Date: Tue, 21 Feb 2023 13:21:03 -0600 Subject: [PATCH 11/13] Fix: conversion buffer too large Refs: #4 --- src/main/esp32_eurorack_generic.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/esp32_eurorack_generic.c b/src/main/esp32_eurorack_generic.c index 09fa69f..5d2a8e9 100644 --- a/src/main/esp32_eurorack_generic.c +++ b/src/main/esp32_eurorack_generic.c @@ -19,7 +19,7 @@ #define ADC_INPUT_3_PIN 9 /* TODO Reroute from pin 46 to 9 on schematic, cant do ADC */ #define ADC_INPUT_4_PIN 10 -#define ADC_READ_LEN 256 +#define ADC_READ_LEN 16 /* ADC channels */ static adc_channel_t channel[4] = {ADC_CHANNEL_3, ADC_CHANNEL_5, ADC_CHANNEL_8, ADC_CHANNEL_9}; @@ -41,13 +41,14 @@ static void adc_read_task(void *pvParameter) /* Fill result with 0xcc */ memset(result, 0xcc, ADC_READ_LEN); - /* Wait here until notified that the conversion is done */ - ulTaskNotifyTake(pdTRUE, portMAX_DELAY); - while (1) { + /* Wait here until notified that the conversion is done */ + ulTaskNotifyTake(pdTRUE, portMAX_DELAY); + /* Perform a read */ adc_ret = adc_continuous_read(adc_handle, result, ADC_READ_LEN, &ret_num, 0); if (adc_ret == ESP_OK) { + ESP_LOGI("adc", "Got a reading"); for (int i = 0; i < ret_num; i+= SOC_ADC_DIGI_RESULT_BYTES) { /* Grab the data and channel number */ adc_digi_output_data_t *p_data = (void*)&result[i]; @@ -61,6 +62,7 @@ static void adc_read_task(void *pvParameter) } } } + vTaskDelay(1000 / portTICK_PERIOD_MS); } } -- 2.40.1 From 937300d34619a2dae078027e9f828fdba554e896 Mon Sep 17 00:00:00 2001 From: rkcf Date: Tue, 21 Feb 2023 13:59:19 -0600 Subject: [PATCH 12/13] Fix: ADC not using correct channel numbers Refs: #4 --- src/main/esp32_eurorack_generic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/esp32_eurorack_generic.c b/src/main/esp32_eurorack_generic.c index 5d2a8e9..af3d868 100644 --- a/src/main/esp32_eurorack_generic.c +++ b/src/main/esp32_eurorack_generic.c @@ -121,7 +121,7 @@ static void adc_cont_init(void) 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].channel = channel[i]; adc_pattern[i].unit = ADC_UNIT_1; adc_pattern[i].bit_width = ADC_BITWIDTH_12; } -- 2.40.1 From 0a1cd0743e783674ef6877d53b65e4d54f7ce565 Mon Sep 17 00:00:00 2001 From: rkcf Date: Tue, 21 Feb 2023 14:02:18 -0600 Subject: [PATCH 13/13] Fix: max buffer stored too long Refs: #4 --- src/main/esp32_eurorack_generic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/esp32_eurorack_generic.c b/src/main/esp32_eurorack_generic.c index af3d868..80bbb5a 100644 --- a/src/main/esp32_eurorack_generic.c +++ b/src/main/esp32_eurorack_generic.c @@ -104,7 +104,7 @@ static void adc_cont_init(void) /* Create continuous mode driver handle */ adc_continuous_handle_cfg_t adc_handle_config = { - .max_store_buf_size = 1024, + .max_store_buf_size = ADC_READ_LEN, .conv_frame_size = ADC_READ_LEN }; ESP_ERROR_CHECK(adc_continuous_new_handle(&adc_handle_config, &adc_handle)); -- 2.40.1