Summerhall, Edinburgh, 7 April 2013
The FatDuino is a home-made sythesiser with a nice line in bloops, bleeps, whangs and (if I'm honest) the occasional floop.
It also does a mean analog-style sequence, so if you're a fan of Tangerine Dream, Acid House or Demented Microwave Ovens, don't miss it!
Visit my stall and learn how synthesisers work, why I built it, and what else you could do with an Arduino.
See the Project Update for details.
Check out the Videos section to see and hear the FatDuino in action.
The Fatduino is a combination of the Paia Fatman analog synth with an Arduino controller. This site gives some more info on the project in case anyone else wants to do the same.
The Paia Fatman is a digitally-controlled analog monophonic synth kit. It has 2 sawtooth oscillators, a resonant filter, ADSR for amplitude and ASR for filter cutoff.
I bought the Paia Fatman kit years ago and recently found the PCB hidden in a drawer. I decided to build it up and sourced as many of the components as I could. However, I had difficulty buying the 8031 microcontroller, and then had a thought - why not upgrade to a more modern controller? After all, I wanted to modify the synth and the firmware from Paia is in assembler (which I don't enjoy working with). I had been looking for an Arduino project for a while and so hatched a plan to link an Arduino to the Fatman to make... the "FatDuino".
I started by populating the basic Fatman board, making some interesting mistakes along the way - mostly to do with components I had presumed had the same pinouts as the components I was substituting. I thought I would save money by sourcing the components myself. But I couldn't always find pin-compatible components, so had to get into the details of the function of every chip. This was pretty useful learning, which I wouldn't have got by just buying the complete kit from Paia.
Once I had a working board, without controller, I started to interface the Arduino.
The function of the controller in the orignal Fatman is:
1. receive midi note messages and convert into octaves and frequency
2. send frequency and velocity control voltages to the analog circuits via the DAC
3. send pulses to the transient generators to trigger envelopes.
I selected an Arduino Mega due to its generous supply of I/O lines.
I started by interfacing the 8-bit DAC and associated control lines - pinouts are given in the Excel sheet in the "Files" section.
The Fatman uses a Volts/Hz scheme which means that the DAC output is nonlinear with respect to note number. Once I had basic control of the oscillators with test signals, I had to get Midi signals in. I used the Midi library from
Thanks to Timothy Willman for writing this library!!
Once the synth was playing notes, I decided to add some features that the basic Fatman didn't have but that I'd grown to love from other synths.
The original Fatman always retriggers when it receives a new note, regardless of how many notes are already being held down. It doesn't remember the history of notes held and "spring back" to the last note when you release the current one. I prefer monosynths to play legato when I hit a second note without releasing the first (ie. change the pitch but not retrigger). I realised that to do this I needed a memory of past notes and used an array to do this (although a linked list may have been better...). Later on I used this same array to implement the arpeggio and step sequencer modes.
Another major addition is the software LFO, which can be routed either to vibrato (with mod wheel, cc1) or to the velocity CV, which then (with my mods) can control PWM, osc 1 pitch, filter cutoff and amp. Arduino Pot1 controls the frequency, and Pot2 mixes the Velocity CV between LFO and velocity from MIDI. The vibrato feature required changing over to centi-notes internally, so that vibrato and pitch bend could be added to the incoming note to give a continuously variable note out with one-hundredth of a note resolution - this involves interpolating the non-linear voltage/frequency map which turned out to be harder than it sounds!
I've always liked midi-synced lfo's and arpeggio, so I added that in a fairly crude way. The arpeggio simply plays in play order, with either retriggering or legato (which allows the ASR transient generator to create a nice filter or PWM sweep over the top of an arpeggio. The arpeggio can run fast enough to sound similar to the chirping pseudo-chords (very fast arpeggios) of the Commodore 64 of my youth... a sound that is now back in fashion.
The step sequencer allows up to 16 steps to be edited in real time, then held and transposed by the keyboard.
Finally, I added some randmising features that cause the sequence or arpeggio to randomly jump to a new note, octave, or reverse direction. The randomness is adjustable from always to never, and the random number generator can be re-seeded at regular intervals to create repeating complex pseudo-random sequences... just from holding down a few notes.
I added a keyed portamento feature by shorting the portamento capacitor with a back-to-back MOSFET pair (solid state relay) switchably driven from the gate signal. This means that you can glide slowly when a key is already held, but the pitch jumps instantly when single notes are played. This is more playable than glide on every note I think.
The PWM is simply an op-amp comparing Osc2 sawtooth with a control voltage, a mix between ASR and Velocity CV. The resulting square wave is also the carrier for the ring modulator.
The ring mod is using a spare LM13700, using a circuit from its data sheet. The modulator is Osc1.
I added a switch to disconnect Osc1 from the pitch CV, fixing it - this is useful with the ring mod.
I added a pot and switch to mix in some of Velocity CV or ASR to the pitch of Osc1, allowing frequency sweeps and LFOs, for classic Vangelis and spaceship sounds.
I added an opamp mixer, with PWM, Oscillators, Ring Mod and External mixed together before the filters.
The external input can be mixed with the oscillators (good for noise from an AM radio) or used like an insert effect - great for adding distortion before the filter.