Adjusted DAC to use full range + added control voltage option.

master
Gaudi 7 years ago
parent 91ab9ad85b
commit 030e673fe7
  1. 17
      Open_Theremin_V3/ihandlers.cpp

@ -4,6 +4,8 @@
#include "mcpDac.h" #include "mcpDac.h"
#include "timer.h" #include "timer.h"
#include "build.h"
#include "theremin_sintable.c" #include "theremin_sintable.c"
#include "theremin_sintable2.c" #include "theremin_sintable2.c"
#include "theremin_sintable3.c" #include "theremin_sintable3.c"
@ -24,7 +26,7 @@ const int16_t* const wavetables[] PROGMEM = {
sine_table8 sine_table8
}; };
static const uint32_t MCP_DAC_BASE = 1748; static const uint32_t MCP_DAC_BASE = 2047;
#define INT0_STATE (PIND & (1<<PORTD2)) #define INT0_STATE (PIND & (1<<PORTD2))
#define PC_STATE (PINB & (1<<PORTB0)) #define PC_STATE (PINB & (1<<PORTB0))
@ -127,6 +129,13 @@ ISR (INT1_vect) {
uint32_t scaledSample; uint32_t scaledSample;
uint16_t offset = (uint16_t)(pointer>>6) & 0x3ff; uint16_t offset = (uint16_t)(pointer>>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) // Read next wave table value (3.0us)
// The slightly odd tactic here is to provide compile-time expressions for the wavetable // 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 // 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) 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 { } 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) mcpDacSend(scaledSample); //Send result to Digital to Analogue Converter (audio out) (9.6 us)
pointer = pointer + vPointerIncrement; // increment table pointer (ca. 2us) pointer = pointer + vPointerIncrement; // increment table pointer (ca. 2us)
#endif //CV play sound
incrementTimer(); // update 32us timer incrementTimer(); // update 32us timer
if (PC_STATE) debounce_p++; if (PC_STATE) debounce_p++;

Loading…
Cancel
Save