My new "baby" is a polyphonic wavetable synth with analog filters. Costs for the project: about 100USD!
It´s an early phase of invention, so no code snippets (mostly of copyright and cleaning up reasons) and schematics so far. But when the project is finished, I promise you to feed you with all informations!Key facts:
Polyphonic “true” 8-bit synth with analog filters each voice. I’ll start the project with 4 voices.
Cheap hardware with only two kind of “special IC”: V2164 and TLC7528. (the first you get from smallbear and the DAC from ebay/aliexpress)The synthesizer is splitted into several modules:Master module:
(my choice is a Texas instruments Tiva™ C Series TM4C123G LaunchPad)
Hardware and user interface:
Display (TFT or/and 20x4 LED), Midi, physical Inputs (Potis, tact switches, encoder), LED’s
patch organization, generating ADSR (2-3 each voice) and LFO’s (2-5), communication with voice modules (via I2C), digital/analog conversation with ssm2164 VCA/VCF chips (via PWM).Voice modules
(driven by ATmegas328)
Pro mini (hey, 2$ a piece!)
8bit DAC TLC7528 (2 channels are hardware mixed into filter section!)
V2164 4-channel VCA IC (3 channels used for the analog multimode (LP,BP,HP) filter and one channel for VCA)
CD4053 for digital choosing type of filter
TL074 as standard OP.
Software (...until now: early beta!):
2 independent oscillators with 256 step wavetables (sin,tri,saw-up,saw-down,pulse, PWM)
1 LFO (for tone modulation and/or PWM)
unique protocol for communication with master module (commands implemented o far: pitch, tune and type for both OSC’s, LFO type and speed, LFO->OSC1+2 modulation)state of affairs:
one voice module tested with filter and driven by the TIVA launchpad. Works like a charme!
the first thing was choosing the right protocol for all modules:
Serial: not possible: need the whole port for the DAC
SPI: pin conflicts, didn’t managed a error-free communication (the ATmega is on top of CPU load with sample rate of 62,8kHz, 2 OSC’s and 1 LFO!)
so I tried I2C and I was amazed, because it worked without any problems. One benefit is, that you can add easily more voice modules without additional hardware (pins) and maybe I will implement a I2C eeprom with additional wavetables.adapted software (libraries):
Core routine for wavetabes: http://www.arduinoos.com/2010/05/direct-digital-synthesizer-dds/
Ideas how to manage the DAC: http://www.instructables.com/id/Stereo-Audio-with-Arduino/step2/TLC7528-Overview/
V2164 as multimode filter: various sources, especially the shruti-synth schematics and “unusual synthesizer circuits” http://www5b.biglobe.ne.jp/~houshu/synth/Findings:
progmem (reading wavetables direct from flash) is MUCH to slow, so I’ve to use the RAM and each time a the type of wave is changing I need to load it again into RAM. So 768kB (2 OSC + LFO) are permanently needed with all other variables the RAM is about 70% (safe limit) and the CPU load (within the interrupt) is HARD on limit. So don’t thing about adding more voices each module.The nasty thing with the negative voltage supply:
For all “converter IC`s”: Better take a 9V line and use a negative voltage regulator (7905), much more headroom!
There are many ways you can generate it:
ICL7660S (remember the “S”!!): easy circuit, cheap, downside: you need on IC/module, because you can only get a few milliamperes out of it. Not really “clean” sounding.
555 timer: easy circuit, ultra cheap, more components, maybe conflict with the frequency, little more power than 7660
LT1054: better facts than 7660, but expensive (didn’t tried one out)
AC wallwart conversation: http://www.musicfromouterspace.com/analogsynth_new/WALLWARTSUPPLY/WALLWARTSUPPLY.php
One of the best and cleanest solutions! (tested with my oscilloscope). downside: much components, maybe “oversized”
the trick with the 5/9V DC/DC converter:
you can get these boxes nearly for free: look at an old network card or router with “BNC” connector you own for sure such a “black magic box”. with this you can get -9V from +5V. downside: I measured about 50-60mA at idle.
some pics: (only german, scroll a little bit down): http://www.sprut.de/electronic/switch/smallup/smallup.html