From 030e673fe74585a191cef4d566ce9e4578a73b38 Mon Sep 17 00:00:00 2001 From: Gaudi Date: Tue, 17 Jan 2017 09:35:53 +0100 Subject: [PATCH] Adjusted DAC to use full range + added control voltage option. --- Open_Theremin_V3/ihandlers.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/Open_Theremin_V3/ihandlers.cpp b/Open_Theremin_V3/ihandlers.cpp index 14c33c2..1cc16bc 100644 --- a/Open_Theremin_V3/ihandlers.cpp +++ b/Open_Theremin_V3/ihandlers.cpp @@ -4,6 +4,8 @@ #include "mcpDac.h" #include "timer.h" +#include "build.h" + #include "theremin_sintable.c" #include "theremin_sintable2.c" #include "theremin_sintable3.c" @@ -24,7 +26,7 @@ const int16_t* const wavetables[] PROGMEM = { sine_table8 }; -static const uint32_t MCP_DAC_BASE = 1748; +static const uint32_t MCP_DAC_BASE = 2047; #define INT0_STATE (PIND & (1<>6) & 0x3ff; +#if CV_ENABLED // Generator for CV output + + vPointerIncrement = min(vPointerIncrement, 4095); + mcpDacSend(vPointerIncrement); //Send result to Digital to Analogue Converter (audio out) (9.6 us) + +#else //Play sound + // Read next wave table value (3.0us) // The slightly odd tactic here is to provide compile-time expressions for the wavetable // positions. Making addr1 the index into the wavtables array breaks the time limit for @@ -143,14 +152,16 @@ ISR (INT1_vect) { }; if (waveSample > 0) { // multiply 16 bit wave number by 8 bit volume value (11.2us / 5.4us) - scaledSample = MCP_DAC_BASE + (mul_16_8(waveSample, vScaledVolume) >> 9); + scaledSample = MCP_DAC_BASE + (mul_16_8(waveSample, vScaledVolume) >> 8); } else { - scaledSample = MCP_DAC_BASE - (mul_16_8(-waveSample, vScaledVolume) >> 9); + scaledSample = MCP_DAC_BASE - (mul_16_8(-waveSample, vScaledVolume) >> 8); } mcpDacSend(scaledSample); //Send result to Digital to Analogue Converter (audio out) (9.6 us) pointer = pointer + vPointerIncrement; // increment table pointer (ca. 2us) + +#endif //CV play sound incrementTimer(); // update 32us timer if (PC_STATE) debounce_p++;