What you see in the picture above is a hand-made 4-oscillator synthesizer with MIDI input, multi-mode filter and a handful of modulation options. It was built by [Matt], an AVR accustomed electronics enthusiast who made an exception to his habits for this project. The core of the platform is a DIP packaged 32-bit Cortex-M0 ARM processor (LPC1114), stuffed with ‘hand’ written assembly code and compiled C functions. With a 50MHz clock speed, the microcontroller can output samples at 250kHz on the 12bit DAC while being powered by 3 AA batteries.
Reading [Matt]’s write-up, we discover that the firmware he created uses 4 oscillators (sawtooth or pulse shape) together with a low frequency oscillator (triangle, ramp, square, random shapes). It also includes a 2-pole state-variable filter and the ability to adjust the attack-release envelopes (among others). The system takes MIDI commands from a connected device. We embedded videos of his creation in action after the break.
Arduino + Mozzi lib ne1?
I wonder if you could play “Honor – Narodowy Socjalizm” on this thing.
And why the hell would you want to?
Why not output 44 kHz instead of 250 kHz samples, and leave much more time for the software ?
maybe he can rent out the spare cycles on a cloud service or find some other useful task for them
I was more thinking of using the extra cycle for writing the code in C, instead of self-modifying assembly code, and adding a few more voices and/or effects.
If he outputs at 250khz and filters down to 44khz, he’d effectively have a little higher than 14-bit resolution.
Wouldn’t it be easier to grab a 14 bit (or better) DAC ? Or, alternatively, generate a 14 bit * 44 kHz signal, and dither it in the last stage.
Dithering doesn’t increase your resolution, it just smooths out the noise over multiple frequencies.
Next thing you’re going to be telling me that sigma-delta DACs don’t work.
Author here. Outputting single samples at 44kHz without any antialiasing/filtering results in “wobbly” effects at certain frequencies, as well as distortion due to harmonics above the Nyquist frequency.
I considered two options: 1) use a higher sample rate, or 2) generate multiple samples per interrupt and filter/decimate them. Option 1 sounded “good enough” to me (and it was much less code) so I stuck with it.
It needs bigger knobs.
I was limited by the size of the perfboard I had on hand, so I had to forgo knobs on the potentiometers.
Very cool, thanks for sharing the sauce. I have one of these chips I’ve been meaning to play with.
how many notes can you play at a time?
One, but the 4 oscillators can be tuned independently.
Matt, I am a novice with programming. I am a musician and truly like the build and form factor of this synth. I have an arduino uno. Is it possible to build this without an arm processor? Would you be willing to give the schematics/help me build one if I run into problems? Also, have you considered putting in an arpeggiator?