From 757c9932ab2687424223553c81f9c36b86f3374d Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Fri, 3 Mar 2023 12:37:09 +0100 Subject: [PATCH 1/3] Add function to change DAC frequency on the fly. --- src/AdvancedDAC.cpp | 9 +++++++++ src/AdvancedDAC.h | 1 + 2 files changed, 10 insertions(+) diff --git a/src/AdvancedDAC.cpp b/src/AdvancedDAC.cpp index fc04461..064a4e1 100644 --- a/src/AdvancedDAC.cpp +++ b/src/AdvancedDAC.cpp @@ -182,6 +182,15 @@ int AdvancedDAC::stop() return 1; } +int AdvancedDAC::frequency(uint32_t frequency) +{ + if (descr && descr->pool) { + // Reconfigure the trigger timer. + dac_descr_deinit(descr, false); + hal_tim_config(&descr->tim, frequency); + } +} + AdvancedDAC::~AdvancedDAC() { dac_descr_deinit(descr, true); diff --git a/src/AdvancedDAC.h b/src/AdvancedDAC.h index 57707ee..bdba295 100644 --- a/src/AdvancedDAC.h +++ b/src/AdvancedDAC.h @@ -49,6 +49,7 @@ class AdvancedDAC { void write(SampleBuffer dmabuf); int begin(uint32_t resolution, uint32_t frequency, size_t n_samples=0, size_t n_buffers=0); int stop(); + int frequency(uint32_t frequency); }; #endif /* ARDUINO_ADVANCED_DAC_H_ */ From 0ab56386e918681b818a6b7e124fc30168bd9ad1 Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Fri, 3 Mar 2023 12:37:34 +0100 Subject: [PATCH 2/3] Waveform_Generator: Use the new function to change DAC frequency. --- .../Beginner/Waveform_Generator/Waveform_Generator.ino | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/examples/Beginner/Waveform_Generator/Waveform_Generator.ino b/examples/Beginner/Waveform_Generator/Waveform_Generator.ino index 2f8dc89..5ba5494 100644 --- a/examples/Beginner/Waveform_Generator/Waveform_Generator.ino +++ b/examples/Beginner/Waveform_Generator/Waveform_Generator.ino @@ -55,13 +55,9 @@ void generate_waveform(int cmd) } else { break; } - - dac1.stop(); - delay(500); - if (!dac1.begin(AN_RESOLUTION_8, dac_frequency * N_SAMPLES, N_SAMPLES, 32)) { - Serial.println("Failed to start DAC1 !"); - } - delay(500); + + // Change frequency. + dac1.frequency(dac_frequency * N_SAMPLES); break; default: From 20da84ec1dbdd990e4d9ab002467901ed6f0e2cb Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Mon, 6 Mar 2023 11:34:37 +0100 Subject: [PATCH 3/3] AdvancedDAC: Make frequency const. --- src/AdvancedDAC.cpp | 2 +- src/AdvancedDAC.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/AdvancedDAC.cpp b/src/AdvancedDAC.cpp index 064a4e1..3277158 100644 --- a/src/AdvancedDAC.cpp +++ b/src/AdvancedDAC.cpp @@ -182,7 +182,7 @@ int AdvancedDAC::stop() return 1; } -int AdvancedDAC::frequency(uint32_t frequency) +int AdvancedDAC::frequency(uint32_t const frequency) { if (descr && descr->pool) { // Reconfigure the trigger timer. diff --git a/src/AdvancedDAC.h b/src/AdvancedDAC.h index bdba295..da199a6 100644 --- a/src/AdvancedDAC.h +++ b/src/AdvancedDAC.h @@ -49,7 +49,7 @@ class AdvancedDAC { void write(SampleBuffer dmabuf); int begin(uint32_t resolution, uint32_t frequency, size_t n_samples=0, size_t n_buffers=0); int stop(); - int frequency(uint32_t frequency); + int frequency(uint32_t const frequency); }; #endif /* ARDUINO_ADVANCED_DAC_H_ */