Fixed up the duration timers, clockTick needs a cleanup.
This commit is contained in:
parent
31eb465ebf
commit
2f4d17e4ed
15
DDS.cpp
15
DDS.cpp
|
@ -57,10 +57,11 @@ void DDS::setFrequency(unsigned short freq) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Clean this up a bit..
|
||||||
void DDS::clockTick() {
|
void DDS::clockTick() {
|
||||||
accumulator += stepRate;
|
|
||||||
if(running) {
|
if(running) {
|
||||||
if(tickDuration == 0) {
|
accumulator += stepRate;
|
||||||
|
if(timeLimited && tickDuration == 0) {
|
||||||
#ifdef DDS_IDLE_HIGH
|
#ifdef DDS_IDLE_HIGH
|
||||||
// Set the duty cycle to 50%
|
// Set the duty cycle to 50%
|
||||||
OCR2B = pow(2,COMPARATOR_BITS)/2;
|
OCR2B = pow(2,COMPARATOR_BITS)/2;
|
||||||
|
@ -69,11 +70,21 @@ void DDS::clockTick() {
|
||||||
OCR2B = 0;
|
OCR2B = 0;
|
||||||
#endif
|
#endif
|
||||||
running = false;
|
running = false;
|
||||||
|
accumulator = 0;
|
||||||
} else {
|
} else {
|
||||||
OCR2B = getDutyCycle();
|
OCR2B = getDutyCycle();
|
||||||
}
|
}
|
||||||
// Reduce our playback duration by one tick
|
// Reduce our playback duration by one tick
|
||||||
tickDuration--;
|
tickDuration--;
|
||||||
|
} else {
|
||||||
|
// Hold it low
|
||||||
|
#ifdef DDS_IDLE_HIGH
|
||||||
|
// Set the duty cycle to 50%
|
||||||
|
OCR2B = pow(2,COMPARATOR_BITS)/2;
|
||||||
|
#else
|
||||||
|
// Set duty cycle to 0, effectively off
|
||||||
|
OCR2B = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
3
DDS.h
3
DDS.h
|
@ -121,6 +121,7 @@ public:
|
||||||
|
|
||||||
// Start the PWM output, or stop it
|
// Start the PWM output, or stop it
|
||||||
void on() {
|
void on() {
|
||||||
|
timeLimited = false;
|
||||||
running = true;
|
running = true;
|
||||||
}
|
}
|
||||||
// Provide a duration in ms for the tone
|
// Provide a duration in ms for the tone
|
||||||
|
@ -128,6 +129,7 @@ public:
|
||||||
// Duration in ticks from milliseconds is:
|
// Duration in ticks from milliseconds is:
|
||||||
// t = (1/refclk)
|
// t = (1/refclk)
|
||||||
tickDuration = (duration * refclk) / 1000;
|
tickDuration = (duration * refclk) / 1000;
|
||||||
|
timeLimited = true;
|
||||||
running = true;
|
running = true;
|
||||||
}
|
}
|
||||||
void off() {
|
void off() {
|
||||||
|
@ -165,6 +167,7 @@ public:
|
||||||
private:
|
private:
|
||||||
volatile bool running;
|
volatile bool running;
|
||||||
volatile unsigned long tickDuration;
|
volatile unsigned long tickDuration;
|
||||||
|
volatile bool timeLimited;
|
||||||
volatile unsigned char amplitude;
|
volatile unsigned char amplitude;
|
||||||
#ifdef SHORT_ACCUMULATOR
|
#ifdef SHORT_ACCUMULATOR
|
||||||
volatile unsigned short accumulator;
|
volatile unsigned short accumulator;
|
||||||
|
|
Loading…
Reference in New Issue