Direct digital synthesis (was: DCO)
Mikko Helin
MHELIN at tne01.ntc.nokia.com
Fri Nov 6 11:16:56 CET 1998
BJ wrote: "And regarding to the Waldorf Pulse some year ago i had
some email correnspondance with the designer of the Pulse.
We had some small talk about OSC's and he told me that
the Pulse uses two 68HC11 one for doing the DCO thing
and the other as "in house" doing midi etc."
I've been thinking of similar setup for doing direct digital
synthesis with a usual PIC16F84, PIC16C54 (there's a 20 Mhz
model) or Atmel RISC mc's (which can be clocked at 16 Mhz and can
run one instruction per cycle). Now, the delta-sigma DAC's use
modulator that outputs 1-bit data at 3.072 MHz for 48 kHz
sample rate. With 16 MHz microcontroller that would leave 13
cycles for other tasks like reading input ports for output
frequency or phase and for the calculations needed for the
output of the one-bit wave data. So you don't actually need a DSP
for this, just some clever code, which is the biggest problem.
One-bit wavetables eat a lots of memory, for a 1000 Hz voice
@3MHz you need 6000 bits, which converts to 750 bytes. Ok, it's
possible to store the data into flash rom, but is it difficult
to interpolate to other frequencies (if fixed clock is used),
how is that done? Is it possible to use timing loops between
data outputs (aliasing distortion?), or are there other means?
You could maybe use a VCO as an OSC for the microcontroller, at
least Atmel's controllers can be clocked from 1 Hz (?, maybe
more than that) upto 16 Mhz. Anyway, I think the interpolating
algorithm must not be that complex, as the aliasing frequencies
are way higher than when using multibit DAC's at 44kHz or so.
Problem is that you are accessing bit's, not bytes, and there
are no multiplication instructions available (unless you get a
better microcontroller). If you solve this problem, there are
still others, like the freqency control. Eight bit's is not
enough (except for MIDI). Maybe not so good idea after all.
-Mikko
More information about the Synth-diy
mailing list