From 7fb56dfd5702bc9e9598f0501141d6d726d76d79 Mon Sep 17 00:00:00 2001 From: jmdodd95682 <46497064+jmdodd95682@users.noreply.github.com> Date: Tue, 19 Mar 2024 10:16:07 -0700 Subject: [PATCH 1/9] Update AdvancedADC.cpp Revised change based on feedback. Added new class AdvancedADCDual. Modified AdvancedADC.begin() to accept optional start and fixed ADC number to allow Dual Mode to be called from AdvancedADCDual. --- src/AdvancedADC.cpp | 194 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 163 insertions(+), 31 deletions(-) diff --git a/src/AdvancedADC.cpp b/src/AdvancedADC.cpp index 49f7e23..3299e1d 100644 --- a/src/AdvancedADC.cpp +++ b/src/AdvancedADC.cpp @@ -115,42 +115,73 @@ DMABuffer &AdvancedADC::read() { return NULLBUF; } -int AdvancedADC::begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers) { +int AdvancedADC::begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers,bool do_start,uint8_t adcNum) { + ADCName instance = ADC_NP; - // Sanity checks. if (resolution >= AN_ARRAY_SIZE(ADC_RES_LUT) || (descr && descr->pool)) { return 0; } + //if ADC specified is more than the number of available ADC bail out + if(adcNum>AN_ARRAY_SIZE(adc_pin_alt)) + { + descr = nullptr; + return 0; + } + // Clear ALTx pin. for (size_t i=0; ipool == nullptr) { - ADCName tmp_instance = (ADCName) pinmap_peripheral(pin, PinMap_ADC); - if (descr->adc.Instance == ((ADC_TypeDef*) tmp_instance)) { - instance = tmp_instance; - adc_pins[0] = pin; + // Check if pin is mapped. + if (pinmap_find_peripheral(pin, PinMap_ADC) == NC) { + break; + } + + // Find the first free ADC according to the available ADCs on pin. + for (size_t j=0; instance == ADC_NP && jpool == nullptr) { + ADCName tmp_instance = (ADCName) pinmap_peripheral(pin, PinMap_ADC); + if (descr->adc.Instance == ((ADC_TypeDef*) tmp_instance)) { + instance = tmp_instance; + adc_pins[0] = pin; + selectedADC=j; + } } } } } + else if(adcNum>0) //if ADC specified use that ADC to try to map first channel + { + PinName pin = (PinName) (adc_pins[0] | adc_pin_alt[adcNum-1]); + // Check if pin is mapped. + if (pinmap_find_peripheral(pin, PinMap_ADC) == NC) { + return 0; + } + + descr = &adc_descr_all[adcNum-1]; + if (descr->pool == nullptr) { + ADCName tmp_instance = (ADCName) pinmap_peripheral(pin, PinMap_ADC); + if (descr->adc.Instance == ((ADC_TypeDef*) tmp_instance)) { + instance = tmp_instance; + adc_pins[0] = pin; + } + } + selectedADC=adcNum; //Store selected number + } + if (instance == ADC_NP) { // Couldn't find a free ADC/descriptor. descr = nullptr; @@ -159,11 +190,40 @@ int AdvancedADC::begin(uint32_t resolution, uint32_t sample_rate, size_t n_sampl // Configure ADC pins. pinmap_pinout(adc_pins[0], PinMap_ADC); - uint8_t ch_init = 1; - for (size_t i=1; i0) //If specific ADC was requested ensure all other channels map to that same ADC + { + uint8_t ch_init = 1; + for (size_t i=1; ipool = new DMABufferPool(n_samples, n_channels, n_buffers); if (descr->pool == nullptr) { return 0; } + + //Allocate two DMA buffers for double buffering descr->dmabuf[0] = descr->pool->allocate(); descr->dmabuf[1] = descr->pool->allocate(); @@ -202,7 +263,7 @@ int AdvancedADC::begin(uint32_t resolution, uint32_t sample_rate, size_t n_sampl } // Link DMA handle to ADC handle, and start the ADC. - __HAL_LINKDMA(&descr->adc, DMA_Handle, descr->dma); + __HAL_LINKDMA(&descr->adc, DMA_Handle, descr->dma); if (HAL_ADC_Start_DMA(&descr->adc, (uint32_t *) descr->dmabuf[0]->data(), descr->dmabuf[0]->size()) != HAL_OK) { return 0; } @@ -212,12 +273,24 @@ int AdvancedADC::begin(uint32_t resolution, uint32_t sample_rate, size_t n_sampl hal_dma_enable_dbm(&descr->dma, descr->dmabuf[0]->data(), descr->dmabuf[1]->data()); HAL_NVIC_EnableIRQ(descr->dma_irqn); + if(do_start) + { + return(start(sample_rate)); + } + + return 1; +} + +int AdvancedADC::start(uint32_t sample_rate) +{ // Init, config and start the ADC timer. hal_tim_config(&descr->tim, sample_rate); + + //Start Timer and ADC Capture. If Dual Mode was enabled, then this will also start ADC2 if (HAL_TIM_Base_Start(&descr->tim) != HAL_OK) { return 0; } - + return 1; } @@ -227,11 +300,70 @@ int AdvancedADC::stop() return 1; } +void AdvancedADC::clear() +{ + descr->pool->flush(); +} + AdvancedADC::~AdvancedADC() { dac_descr_deinit(descr, true); } +int AdvancedADCDual::begin(AdvancedADC *in1, AdvancedADC *in2,uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers) +{ + adcIN1=in1; + adcIN2=in2; + + int result=0; + + //Configure first pin on ADC1 + result=adcIN1->begin(resolution,sample_rate,n_samples,n_buffers,1,&(adc_pins_unmapped[0]),false,1); + if(result!=1) + { + return(0); + } + //Configure all other pins on ADC2 + result=adcIN2->begin(resolution,sample_rate,n_samples,n_buffers,n_channels-1,&(adc_pins_unmapped[1]),false,2); + if(result!=1) + { + return(0); + } + + result=hal_enable_dual_mode(); + + result=adcIN1->start(sample_rate); + + if(result!=1) + { + return(0); + } + + return(1); + +} + +int AdvancedADCDual:: stop() +{ + if(adcIN1!=nullptr) + { + adcIN1->stop(); + } + if(adcIN2!=nullptr) + { + adcIN2->stop(); + } + //Always disable dual mode when stopped + int result=hal_disable_dual_mode(); + return(1); + +} + +AdvancedADCDual::~AdvancedADCDual() +{ + int result=stop(); +} + extern "C" { void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *adc) { adc_descr_t *descr = adc_descr_get(adc->Instance); From 44f57bd5b7d2e78a905186b0685e9494f03c3b4c Mon Sep 17 00:00:00 2001 From: jmdodd95682 <46497064+jmdodd95682@users.noreply.github.com> Date: Tue, 19 Mar 2024 10:16:59 -0700 Subject: [PATCH 2/9] Update AdvancedADC.h --- src/AdvancedADC.h | 61 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/src/AdvancedADC.h b/src/AdvancedADC.h index 844985b..4173146 100644 --- a/src/AdvancedADC.h +++ b/src/AdvancedADC.h @@ -31,6 +31,8 @@ class AdvancedADC { size_t n_channels; adc_descr_t *descr; PinName adc_pins[AN_MAX_ADC_CHANNELS]; + bool dualMode; + uint8_t selectedADC; public: template @@ -41,21 +43,74 @@ class AdvancedADC { for (auto p : {p0, args...}) { adc_pins[n_channels++] = analogPinToPinName(p); } + dualMode=false; + selectedADC=0; } AdvancedADC(): n_channels(0), descr(nullptr) {} ~AdvancedADC(); bool available(); SampleBuffer read(); - int begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers); - int begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers, size_t n_pins, pin_size_t *pins) { + int begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers, bool do_start=true,uint8_t adcNum=0); + int begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers, size_t n_pins, pin_size_t *pins, bool start=true,uint8_t fixed_adc=0) { if (n_pins > AN_MAX_ADC_CHANNELS) n_pins = AN_MAX_ADC_CHANNELS; for (size_t i = 0; i < n_pins; ++i) { adc_pins[i] = analogPinToPinName(pins[i]); } + n_channels = n_pins; - return begin(resolution, sample_rate, n_samples, n_buffers); + return begin(resolution, sample_rate, n_samples, n_buffers,start,fixed_adc); } + + void clear(); + + int start(uint32_t sample_rate); + + //void setADCDualMode(bool dm); + //int enableDualMode(); + //int disableDualMode(); + int stop(); }; +class AdvancedADCDual { + private: + size_t n_channels; + pin_size_t adc_pins_unmapped[AN_MAX_ADC_CHANNELS]; + AdvancedADC *adcIN1; + AdvancedADC *adcIN2; + public: + + //For now ADC1 will always be one pin, and ADC2 will sample the rest + template + AdvancedADCDual(pin_size_t p0, T ... args):n_channels(0), adcIN1(nullptr), adcIN2(nullptr){ + static_assert(sizeof ...(args) < AN_MAX_ADC_CHANNELS+1, + "A maximum of 5 channels can be sampled successively."); + static_assert (sizeof ...(args) >=2, + "At least two channels are required for Dual Mode ADC."); + for (auto p : {p0, args...}) { + adc_pins_unmapped[n_channels++] = p; + } + } + + AdvancedADCDual(): n_channels(0), adcIN1(nullptr), adcIN2(nullptr) + { + } + ~AdvancedADCDual(); + + int begin(AdvancedADC *in1, AdvancedADC *in2,uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers); + int begin(AdvancedADC *in1, AdvancedADC *in2,uint32_t resolution, uint32_t sample_rate, + size_t n_samples, size_t n_buffers, size_t n_pins, pin_size_t *pins) { + if (n_pins > AN_MAX_ADC_CHANNELS) n_pins = AN_MAX_ADC_CHANNELS; + if(n_pins<2) //Cannot run Dual mode with less than two input pins + return(0); + for (size_t i = 0; i < n_pins; ++i) { + adc_pins_unmapped[i] = pins[i]; + Serial.println("Pin: "+String(pins[i])); + } + n_channels = n_pins; + return begin(in1, in2, resolution, sample_rate, n_samples, n_buffers); + } + int stop(); +}; + #endif /* ARDUINO_ADVANCED_ADC_H_ */ From 7550c29130c4852b4cef0c8fa8a9aa9b62f5c9d1 Mon Sep 17 00:00:00 2001 From: jmdodd95682 <46497064+jmdodd95682@users.noreply.github.com> Date: Tue, 19 Mar 2024 10:18:19 -0700 Subject: [PATCH 3/9] Update HALConfig.cpp Added enable_dual_mode and disable_dual_mode to support Dual Mode ADC --- src/HALConfig.cpp | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/HALConfig.cpp b/src/HALConfig.cpp index 984d9f7..87ac058 100644 --- a/src/HALConfig.cpp +++ b/src/HALConfig.cpp @@ -46,18 +46,18 @@ int hal_tim_config(TIM_HandleTypeDef *tim, uint32_t t_freq) { sConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE; if (tim->Instance == TIM1) { - __HAL_RCC_TIM1_CLK_ENABLE(); + __HAL_RCC_TIM1_CLK_ENABLE(); } else if (tim->Instance == TIM2) { __HAL_RCC_TIM2_CLK_ENABLE(); - } else if (tim->Instance == TIM3) { + } else if (tim->Instance == TIM3) { __HAL_RCC_TIM3_CLK_ENABLE(); - } else if (tim->Instance == TIM4) { + } else if (tim->Instance == TIM4) { __HAL_RCC_TIM4_CLK_ENABLE(); - } else if (tim->Instance == TIM5) { + } else if (tim->Instance == TIM5) { __HAL_RCC_TIM5_CLK_ENABLE(); - } else if (tim->Instance == TIM6) { + } else if (tim->Instance == TIM6) { __HAL_RCC_TIM6_CLK_ENABLE(); - } + } // Init and config the timer. __HAL_TIM_CLEAR_FLAG(tim, TIM_FLAG_UPDATE); @@ -167,10 +167,22 @@ static uint32_t ADC_RANK_LUT[] = { ADC_REGULAR_RANK_1, ADC_REGULAR_RANK_2, ADC_REGULAR_RANK_3, ADC_REGULAR_RANK_4, ADC_REGULAR_RANK_5 }; +int hal_enable_dual_mode() +{ + LL_ADC_SetMultimode(__LL_ADC_COMMON_INSTANCE(ADC1), LL_ADC_MULTI_DUAL_REG_SIMULT); + return(1); +} + +int hal_disable_dual_mode() +{ + LL_ADC_SetMultimode(__LL_ADC_COMMON_INSTANCE(ADC1), LL_ADC_MULTI_INDEPENDENT); + return(1); +} + int hal_adc_config(ADC_HandleTypeDef *adc, uint32_t resolution, uint32_t trigger, PinName *adc_pins, uint32_t n_channels) { // Set ADC clock source. __HAL_RCC_ADC_CONFIG(RCC_ADCCLKSOURCE_CLKP); - + // Enable ADC clock if (adc->Instance == ADC1) { __HAL_RCC_ADC12_CLK_ENABLE(); @@ -206,7 +218,7 @@ int hal_adc_config(ADC_HandleTypeDef *adc, uint32_t resolution, uint32_t trigger sConfig.OffsetNumber = ADC_OFFSET_NONE; sConfig.SingleDiff = ADC_SINGLE_ENDED; sConfig.SamplingTime = ADC_SAMPLETIME_8CYCLES_5; - + for (size_t rank=0; rank Date: Tue, 19 Mar 2024 10:18:59 -0700 Subject: [PATCH 4/9] Update HALConfig.h Added enable_dual_mode and disable_dual_mode declarations --- src/HALConfig.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/HALConfig.h b/src/HALConfig.h index 7ab6711..a906a47 100644 --- a/src/HALConfig.h +++ b/src/HALConfig.h @@ -31,5 +31,7 @@ void hal_dma_update_memory(DMA_HandleTypeDef *dma, void *addr); int hal_dac_config(DAC_HandleTypeDef *dac, uint32_t channel, uint32_t trigger); int hal_adc_config(ADC_HandleTypeDef *adc, uint32_t resolution, uint32_t trigger, PinName *adc_pins, uint32_t n_channels); int hal_i2s_config(I2S_HandleTypeDef *i2s, uint32_t sample_rate, uint32_t mode, bool mck_enable); +int hal_enable_dual_mode(); +int hal_disable_dual_mode(); #endif // __HAL_CONFIG_H__ From 888232d71c449ce0850ba67856460382e0f6556f Mon Sep 17 00:00:00 2001 From: jmdodd95682 <46497064+jmdodd95682@users.noreply.github.com> Date: Tue, 19 Mar 2024 11:28:25 -0700 Subject: [PATCH 5/9] Update AdvancedADC.cpp Fixed formatting --- src/AdvancedADC.cpp | 41 +++++++++++++++-------------------------- 1 file changed, 15 insertions(+), 26 deletions(-) diff --git a/src/AdvancedADC.cpp b/src/AdvancedADC.cpp index 3299e1d..ac19df7 100644 --- a/src/AdvancedADC.cpp +++ b/src/AdvancedADC.cpp @@ -115,7 +115,7 @@ DMABuffer &AdvancedADC::read() { return NULLBUF; } -int AdvancedADC::begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers,bool do_start,uint8_t adcNum) { +int AdvancedADC::begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers, bool do_start, uint8_t adcNum) { ADCName instance = ADC_NP; // Sanity checks. @@ -124,8 +124,7 @@ int AdvancedADC::begin(uint32_t resolution, uint32_t sample_rate, size_t n_sampl } //if ADC specified is more than the number of available ADC bail out - if(adcNum>AN_ARRAY_SIZE(adc_pin_alt)) - { + if(adcNum>AN_ARRAY_SIZE(adc_pin_alt)) { descr = nullptr; return 0; } @@ -137,8 +136,7 @@ int AdvancedADC::begin(uint32_t resolution, uint32_t sample_rate, size_t n_sampl // If ADC not specified find an ADC that can be used with these set of pins/channels. - if(adcNum==0) - { + if(adcNum==0) { for (size_t i=0; instance == ADC_NP && i0) //if ADC specified use that ADC to try to map first channel - { + else if(adcNum>0) { //if ADC specified use that ADC to try to map first channel PinName pin = (PinName) (adc_pins[0] | adc_pin_alt[adcNum-1]); // Check if pin is mapped. @@ -192,8 +189,7 @@ int AdvancedADC::begin(uint32_t resolution, uint32_t sample_rate, size_t n_sampl pinmap_pinout(adc_pins[0], PinMap_ADC); //If ADC was not specified ensure the remaining channels are mappable to same ADC - if(adcNum==0) - { + if(adcNum==0) { uint8_t ch_init = 1; for (size_t i=1; idma, descr->dmabuf[0]->data(), descr->dmabuf[1]->data()); HAL_NVIC_EnableIRQ(descr->dma_irqn); - if(do_start) - { + if(do_start){ return(start(sample_rate)); } return 1; } -int AdvancedADC::start(uint32_t sample_rate) -{ +int AdvancedADC::start(uint32_t sample_rate){ // Init, config and start the ADC timer. hal_tim_config(&descr->tim, sample_rate); @@ -294,24 +288,22 @@ int AdvancedADC::start(uint32_t sample_rate) return 1; } -int AdvancedADC::stop() -{ +int AdvancedADC::stop(){ + dac_descr_deinit(descr, true); + return 1; } -void AdvancedADC::clear() -{ +void AdvancedADC::clear() { descr->pool->flush(); } -AdvancedADC::~AdvancedADC() -{ +AdvancedADC::~AdvancedADC(){ dac_descr_deinit(descr, true); } -int AdvancedADCDual::begin(AdvancedADC *in1, AdvancedADC *in2,uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers) -{ +int AdvancedADCDual::begin(AdvancedADC *in1, AdvancedADC *in2, uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers){ adcIN1=in1; adcIN2=in2; @@ -343,8 +335,7 @@ int AdvancedADCDual::begin(AdvancedADC *in1, AdvancedADC *in2,uint32_t resolutio } -int AdvancedADCDual:: stop() -{ +int AdvancedADCDual:: stop(){ if(adcIN1!=nullptr) { adcIN1->stop(); @@ -356,11 +347,9 @@ int AdvancedADCDual:: stop() //Always disable dual mode when stopped int result=hal_disable_dual_mode(); return(1); - } -AdvancedADCDual::~AdvancedADCDual() -{ +AdvancedADCDual::~AdvancedADCDual(){ int result=stop(); } From 1d11f4fd01266d99269acf3da26acd44b3d1916b Mon Sep 17 00:00:00 2001 From: jmdodd95682 <46497064+jmdodd95682@users.noreply.github.com> Date: Tue, 19 Mar 2024 11:33:13 -0700 Subject: [PATCH 6/9] Update HALConfig.cpp Fixed formatting --- src/HALConfig.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/HALConfig.cpp b/src/HALConfig.cpp index 87ac058..98d96ae 100644 --- a/src/HALConfig.cpp +++ b/src/HALConfig.cpp @@ -167,14 +167,12 @@ static uint32_t ADC_RANK_LUT[] = { ADC_REGULAR_RANK_1, ADC_REGULAR_RANK_2, ADC_REGULAR_RANK_3, ADC_REGULAR_RANK_4, ADC_REGULAR_RANK_5 }; -int hal_enable_dual_mode() -{ +int hal_enable_dual_mode() { LL_ADC_SetMultimode(__LL_ADC_COMMON_INSTANCE(ADC1), LL_ADC_MULTI_DUAL_REG_SIMULT); return(1); } -int hal_disable_dual_mode() -{ +int hal_disable_dual_mode() { LL_ADC_SetMultimode(__LL_ADC_COMMON_INSTANCE(ADC1), LL_ADC_MULTI_INDEPENDENT); return(1); } From 998716a73730b14521c44eec6b13d4d4a1d00763 Mon Sep 17 00:00:00 2001 From: jmdodd95682 <46497064+jmdodd95682@users.noreply.github.com> Date: Tue, 19 Mar 2024 12:33:29 -0700 Subject: [PATCH 7/9] Update AdvancedADC.cpp More formatting fixes and removed need for adc_num. --- src/AdvancedADC.cpp | 118 ++++++++++++++------------------------------ 1 file changed, 37 insertions(+), 81 deletions(-) diff --git a/src/AdvancedADC.cpp b/src/AdvancedADC.cpp index ac19df7..ffe580f 100644 --- a/src/AdvancedADC.cpp +++ b/src/AdvancedADC.cpp @@ -115,7 +115,12 @@ DMABuffer &AdvancedADC::read() { return NULLBUF; } -int AdvancedADC::begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers, bool do_start, uint8_t adcNum) { +int AdvancedADC::getAssignedADC() +{ + return(selected_adc); +} + +int AdvancedADC::begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers, bool do_start) { ADCName instance = ADC_NP; // Sanity checks. @@ -123,12 +128,6 @@ int AdvancedADC::begin(uint32_t resolution, uint32_t sample_rate, size_t n_sampl return 0; } - //if ADC specified is more than the number of available ADC bail out - if(adcNum>AN_ARRAY_SIZE(adc_pin_alt)) { - descr = nullptr; - return 0; - } - // Clear ALTx pin. for (size_t i=0; ipool == nullptr) { - ADCName tmp_instance = (ADCName) pinmap_peripheral(pin, PinMap_ADC); - if (descr->adc.Instance == ((ADC_TypeDef*) tmp_instance)) { - instance = tmp_instance; - adc_pins[0] = pin; - selectedADC=j; - } - } - } - } - } - else if(adcNum>0) { //if ADC specified use that ADC to try to map first channel - PinName pin = (PinName) (adc_pins[0] | adc_pin_alt[adcNum-1]); + + for (size_t i=0; instance == ADC_NP && ipool == nullptr) { - ADCName tmp_instance = (ADCName) pinmap_peripheral(pin, PinMap_ADC); - if (descr->adc.Instance == ((ADC_TypeDef*) tmp_instance)) { - instance = tmp_instance; - adc_pins[0] = pin; + + // Find the first free ADC according to the available ADCs on pin. + for (size_t j=0; instance == ADC_NP && jpool == nullptr) { + ADCName tmp_instance = (ADCName) pinmap_peripheral(pin, PinMap_ADC); + if (descr->adc.Instance == ((ADC_TypeDef*) tmp_instance)) { + instance = tmp_instance; + adc_pins[0] = pin; + selected_adc=j+1; + } } } - selectedADC=adcNum; //Store selected number } if (instance == ADC_NP) { @@ -189,37 +169,11 @@ int AdvancedADC::begin(uint32_t resolution, uint32_t sample_rate, size_t n_sampl pinmap_pinout(adc_pins[0], PinMap_ADC); //If ADC was not specified ensure the remaining channels are mappable to same ADC - if(adcNum==0) { - uint8_t ch_init = 1; - for (size_t i=1; i0) //If specific ADC was requested ensure all other channels map to that same ADC - { - uint8_t ch_init = 1; - for (size_t i=1; ipool = new DMABufferPool(n_samples, n_channels, n_buffers); @@ -310,15 +264,17 @@ int AdvancedADCDual::begin(AdvancedADC *in1, AdvancedADC *in2, uint32_t resoluti int result=0; //Configure first pin on ADC1 - result=adcIN1->begin(resolution,sample_rate,n_samples,n_buffers,1,&(adc_pins_unmapped[0]),false,1); - if(result!=1) + result=adcIN1->begin(resolution,sample_rate,n_samples,n_buffers,1,&(adc_pins_unmapped[0]),false); + if(result!=1 || adcIN1->getAssignedADC()!=1) { + Serial.println("First ADC Assigned: "+String(adcIN1->getAssignedADC())); return(0); } //Configure all other pins on ADC2 - result=adcIN2->begin(resolution,sample_rate,n_samples,n_buffers,n_channels-1,&(adc_pins_unmapped[1]),false,2); - if(result!=1) + result=adcIN2->begin(resolution,sample_rate,n_samples,n_buffers,n_channels-1,&(adc_pins_unmapped[1]),false); + if(result!=1 || adcIN2->getAssignedADC()!=2) { + Serial.println("Second ADC Assigned: "+String(adcIN1->getAssignedADC())); return(0); } From 4f467e252a1670f54ee337d46670b150c1c69262 Mon Sep 17 00:00:00 2001 From: jmdodd95682 <46497064+jmdodd95682@users.noreply.github.com> Date: Tue, 19 Mar 2024 12:34:10 -0700 Subject: [PATCH 8/9] Update AdvancedADC.h --- src/AdvancedADC.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/AdvancedADC.h b/src/AdvancedADC.h index 4173146..3fad9b1 100644 --- a/src/AdvancedADC.h +++ b/src/AdvancedADC.h @@ -32,7 +32,7 @@ class AdvancedADC { adc_descr_t *descr; PinName adc_pins[AN_MAX_ADC_CHANNELS]; bool dualMode; - uint8_t selectedADC; + uint8_t selected_adc; public: template @@ -44,21 +44,22 @@ class AdvancedADC { adc_pins[n_channels++] = analogPinToPinName(p); } dualMode=false; - selectedADC=0; + selected_adc=0; } AdvancedADC(): n_channels(0), descr(nullptr) {} ~AdvancedADC(); bool available(); SampleBuffer read(); - int begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers, bool do_start=true,uint8_t adcNum=0); - int begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers, size_t n_pins, pin_size_t *pins, bool start=true,uint8_t fixed_adc=0) { + int getAssignedADC(); + int begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers, bool do_start=true); + int begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers, size_t n_pins, pin_size_t *pins, bool start=true) { if (n_pins > AN_MAX_ADC_CHANNELS) n_pins = AN_MAX_ADC_CHANNELS; for (size_t i = 0; i < n_pins; ++i) { adc_pins[i] = analogPinToPinName(pins[i]); } n_channels = n_pins; - return begin(resolution, sample_rate, n_samples, n_buffers,start,fixed_adc); + return begin(resolution, sample_rate, n_samples, n_buffers,start); } void clear(); From e3d00aaa667a896fcc6043a1f8d9aaa8c44b2ad7 Mon Sep 17 00:00:00 2001 From: jmdodd95682 <46497064+jmdodd95682@users.noreply.github.com> Date: Tue, 19 Mar 2024 14:59:16 -0700 Subject: [PATCH 9/9] Update AdvancedADC.cpp Removed a couple of debug statements I left hanging around --- src/AdvancedADC.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/AdvancedADC.cpp b/src/AdvancedADC.cpp index ffe580f..195f8ec 100644 --- a/src/AdvancedADC.cpp +++ b/src/AdvancedADC.cpp @@ -267,14 +267,12 @@ int AdvancedADCDual::begin(AdvancedADC *in1, AdvancedADC *in2, uint32_t resoluti result=adcIN1->begin(resolution,sample_rate,n_samples,n_buffers,1,&(adc_pins_unmapped[0]),false); if(result!=1 || adcIN1->getAssignedADC()!=1) { - Serial.println("First ADC Assigned: "+String(adcIN1->getAssignedADC())); return(0); } //Configure all other pins on ADC2 result=adcIN2->begin(resolution,sample_rate,n_samples,n_buffers,n_channels-1,&(adc_pins_unmapped[1]),false); if(result!=1 || adcIN2->getAssignedADC()!=2) { - Serial.println("Second ADC Assigned: "+String(adcIN1->getAssignedADC())); return(0); }