Started following some tutorial on att85 usi. Downloaded example code from make avr book.
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
Direct-digital synthesis
|
||||
Phasing saw waves demo
|
||||
|
||||
*/
|
||||
|
||||
#include "fatSaw.h"
|
||||
|
||||
int main(void) {
|
||||
|
||||
uint16_t accumulators[NUMBER_OSCILLATORS];
|
||||
uint8_t waveStep;
|
||||
int16_t mixer = 0;
|
||||
uint8_t i;
|
||||
|
||||
// -------- Inits --------- //
|
||||
|
||||
clock_prescale_set(clock_div_1); /* CPU clock 8 MHz */
|
||||
initTimer0();
|
||||
SPEAKER_DDR |= (1 << SPEAKER); /* speaker output */
|
||||
LED_DDR |= (1 << LED0);
|
||||
|
||||
// Init all to same phase
|
||||
for (i = 0; i < NUMBER_OSCILLATORS; i++) {
|
||||
accumulators[i] = 0;
|
||||
}
|
||||
|
||||
// ------ Event loop ------ //
|
||||
while (1) {
|
||||
|
||||
/* Load in the PWM value when ready */
|
||||
loop_until_bit_is_set(TIFR0, TOV0); /* wait until overflow bit set */
|
||||
OCR0A = 128 + mixer; /* signed-integers need shifting up */
|
||||
TIFR0 |= (1 << TOV0); /* re-set the overflow bit */
|
||||
|
||||
/* Update all accumulators, mix together */
|
||||
mixer = 0;
|
||||
for (i = 0; i < NUMBER_OSCILLATORS; i++) {
|
||||
accumulators[i] += BASEPITCH;
|
||||
waveStep = accumulators[i] >> 8;
|
||||
|
||||
// Add extra phase increment.
|
||||
// Makes shifting overtones when
|
||||
// different frequency components add, subtract
|
||||
if (waveStep == 0) { /* roughly once per cycle */
|
||||
accumulators[i] += PHASE_RATE * i; /* add extra phase */
|
||||
}
|
||||
|
||||
mixer += fullSaw15[waveStep];
|
||||
}
|
||||
mixer = mixer >> OSCILLATOR_SHIFT;
|
||||
/* Dividing by bitshift is very fast. */
|
||||
|
||||
} /* End event loop */
|
||||
return 0; /* This line is never reached */
|
||||
}
|
||||
Reference in New Issue
Block a user