FatDuino - Paia Fatman analog synth w/ Arduino

Hello all,

I've mated an Arduino Mega to a Paia Fatman analog synth kit to create a powerful analog monosynth with midi-synced arpeggiator and step sequencer.

The Fatman is a monophonic synth available as a kit, with similar power to a Novation Basstation. With analog modifications it can do lots of weird spacey sounds too. The original controller was an 8031 with firmware in assembler - I replaced it with an Arduino. My site gives details of the interface pinouts etc, source code and some videos:

sites.google.com/site/nibblernibbles/

This is an easy way to get an Arduino-controlled synth if you can stretch to the price of the Fatman kit, or find a completed one for modification on Ebay. Only basic wiring and my source code is required.

all the best

NibblerNibbles

Here's a clickable link:

http://sites.google.com/site/nibblernibbles/

NibblerNibbles

That's nice.

Much better sounding than a lot of other synthesisers that have been made with arduino but that is probably due to the arduino not controlling everything.

Good descriptive videos too.

Mowcius

Saw it on youtube. Great job and welcome to arduino forum! :D (im neutron7 on youtube btw)

It looks like you are using a different MIDI library than i am. I would eventually like to switch over as it seems to be a bit more comprehensive, especially handling sync which i could use to modulate the wave start position

See below my email to Paia today. Wouldn’t it be good if they would sell a PCB for connecting an Arduino to the Fatman directly? This would be the easiest possible way for Arduino users to make a great analog synth with the minimum of fuss!


Dear Paia,

I recently built up a Fatman kit I had in a drawer for many years.

As I wanted some more features, I decided to update it to a more modern controller that I could program in C.

The result is the FatDuino, a Fatman controlled by an Arduino - an open source controller based on AVR Atmel. The Arduino is very popular with hobbyists.

I thought to show you this as it might be interesting for you. It would be very easy to design a daughterboard (“shield” in Arduino language) to connect the Arduino into the socket for the 8031. You can see my equivalent wiring with a ribbon cable in the videos on YouTube - linked to by my site:

There also a Excel worksheet with a table of the necessary connections. And of course the embedded code is there too.

There is a lot of interest by Arduino users to make a synth, but most people lack the analog design skils to make something as capable as the Fatman. So a simple PCB to to connect Arduino to the 8031 socket could stimulate new sales of the Fatman kit. If you sold an upgrade kit, which allowed your existing custmers to upgrade to Arduino control via a new PCB, then you could get new business from old sales too!

Just an idea.

NibblerNibbles

That is a great idea! imagine all the sequencers and stuff people could come up with.

I agree with the others, an Arduino driven Fatman synth sounds like a great idea. :)

I was planning an Arduino based TB-303 / x0xb0x clone shield but I've been put off by how difficult it is to source the original components (mainly the transistors). So instead I've been looking at the Paia's Fatman or the Voice of Saturn as an analog section with the Arduino providing the digital section.

Let us know Paia's response.

beautiful! perhaps my next project....

Hey all - I added an .mp3 of FatDuino sounds - multitracked, using the inbuilt sequencer for basslines (with realtime knobtweaks) and the arpeggiator for ...well... arpeggios... and ALSO C64-style "trills" (ie very fast arpeggios to make pseudo-chords). Some delay and reverb added but otherwise vanilla. Warning - not an artistic statement Look here: https://sites.google.com/site/nibblernibbles/file-cabinet

quick question, i am looking at your code, mainly to see how you use the timothytwillman.com (and far better then the one i was using, it seems) midi library.

Does your LFO low level and rate drift around? in

void lfo_tick()
{
  lfo_count=lfo_count+pot1*3;
  
  if (lfo_count>10000)
  {
     lfo_count-=10000;
     lfo_rand=random(0,10000);
  }

i think that when you add the pot value, and then check to see if it is over 10000 you should set it to = 0 instead of subtracting 10000

what if it adds, say 1000 and it was previously at 9999 then it will be 999 after it subtracts.

thanks for posting your code by the way :)

Hi Defex

Great to see someone reading the code! I’m sorry it isn’t more commented.

If you do as you suggest, then the effect is that the LFO frequency gets quantised, because you discard the carry amount which is over 10,000. There is no difference between overflowing by 200, and overflowing by 100. Effectively the LFO would “lock” to repeating either every 8 ticks, or every 9 ticks. This may be better for the MIDI-synced mode, because usually you want a regular repeating sequence.

With the way I’ve done it, you get continuous adjustment. You can set a LFO period to 8.5 ticks. This is because nothing ever gets discarded - in other words, there’s a difference between overflowing by 200 and overflowing by 100. Most of the time I run without MIDI-sync so I appreciate this fine control.

It might be best to switch between the two options, depending on whether sync pulses are being received from MIDI. Then you get the best of both.

My current LFO method is a bit primitive overall. It would be better to generate it with an interrupt, based on timing the period between received sync pulses, which could give an update rate of 1kHz or more. But I quite like the sound of a slowly-updated steppy LFO. It sounds like a Commodore-64 LFO (these were typically done in software, and updated at the global screen refresh rate of 25Hz as far as I know).

By the way, I saw your recent videos with the external filter module- sounds great! I wondered if you had considered using an external MIDI controller for your parameters rather than pots into the Arduino? The midi library makes it very easy to receive CC values from something like a Behringer BCR2000 or a Kenton Control Freak. This would also make your parameters recordable in your MIDI sequencer.

keep up the good work

regards

Nibbler

I will try that with my LFO, i just have it resetting to 0 when it overflows. mind you its counting to 4177919! I dont really mind having the LFO in the main loop, it is not driving a voltage like yours, only changing internal things. (by the way i bet your LFO will seem quite different once you get rid of all that serial.printing :) )

Re MIDI controllers. I used to use MIDI CC pots, you can see it in the older videos, but since this is a module i like it to have its own knobs and restart just where I left it when I upload a new sketch or power on. With MIDI every time i powered up, i would have the oscillator in a basic state until i moved each MIDI knob to where i wanted it, that was very annoying, by the time i got to where i was i would have forgot what i was listening to when i decided to make a change :P

I do have a MIDI control input array which I will set up to receive changes, probably with a local/remote switch it will also output any knob twiddling to be recorded in the sequencer. Then i could also use it as a MIDI controller.

Hi Defex

I tried the overflow discard method and it makes quite a difference to the LFO. I makes it really easy to get sync with my step sequencer which is actaully a big improvement! I think I'll switch between the two methods depending on which mode I'm in. The more frequent your LFO updates, the less significant this change is. I'm using really coarse LFO updates becuase I like the steppy sound and I'm too lazy to implement something smoother.

On the serial thing - I actually presumed that when I sent something on serial it was just added to a buffer somewhere to be clocked out by the serial library on an interrupt basis when there was idle time. If it's just being sent on demand then that's pretty worrying for timing! I've just confirmed that you're right by looking at the docs. I'm going to have to either implement a buffer (ie. print out 10 chars every loop if waiting, once all important stuff is done) or turn off the diagnostics by default and initiate with a console keypress.

That's a good point about the memories. I have the luxury of the "memory" of my analog pots which set up all the Fatman control voltages, so that the only things lost on power-down are the midi-related settings like sequencer mode (arpeg, step, chord trill) and the contents of the sequencer buffer. I was thinking of using the onboard 512 bytes of Flash to store sequences - you could do the same with your CC interface. Then you can use a pickup-latch method for incoming CC - reject incoming CC until equal to stored value, then latch up and accept CC.