SFT Synth Project
Code Name: Piranha
The second board design, 3rd circuit board prototype, with a 'blue wire of salvation' clearly visible
The 'SFT Synth' (code named 'Piranha') is a monophonic single-voice MIDI programmable synthesizer
built with a minimal number of components and controlled using an Atmel AVR (ATMega328P) processor.
The board in the photograph above is 4 inches long and 2 inches wide. It is programmable using a
computer with a MIDI adaptor, running the 'SFT Synth Programmer' application. The application is
designed to run on Windows XP or later (32-bit or 64-bit) using static-linked MFC, and X11 systems
(such as Linux and FreeBSD), and [potentially] native OSX, using wxWidgets.
A screen capture of an early version of the SFT Synth Programmer application
A similar screen capture of a preliminary wxWidgets version of the SFT Synth Programmer application
The 'SFT Synth' uses a standard MIDI interface to receive MIDI controller and program commands.
The newest prototype includes a 'MIDI through' connector so that the devices can be 'chained'.
Previously this was a 'MIDI out' but its usefulness was questionable at best, and the ability to
chain a series of devices together is FAR more important.
Additionally, there is both an external serial (5V TTL) and ISP header on the board, for easy
re-programming of the AVR microcontroller, necessary for possible open source licensing. The pin
arrangement for the serial port is compatible with popular USB/Serial devices, such as the
'FTDI friend' available from Adafruit.
NOTE: The SFT Synth Programmer software is also capable of using that type of USB/Serial adaptor to communicate with the SFTSynth
in lieu of a MIDI interface.
This project will MOST LIKELY require additional outside financing to complete. I am currently
investigating several options, INCLUDING the possibility of 'crowd sourcing'. All SERIOUS
offers will be considered. See Project Status.
- Monophonic MIDI synthesizer, single DCO voice, controlled by AVR microcontroller with minimal components
- Powered by either 9V battery or external 9V power supply
NOTE: A 9V battery tends to cause 'settings drift' when its voltage drops significantly enough, so a regulated 9V external power supply is a better option.
- Software-based AVR microcontroller solution with MINIMAL additional components
- Programmable by an external computer running the SFT Synth Programmer software via a MIDI cable, or optional (compatible) USB serial device
- Standard MIDI interface as well as an optional serial port for programming
- Uses Atmel ATMega328p, programmed via the Arduino™ developent environment.
Standard settings and firmware can easily be pre-loaded prior to assembly.
- Single tone DCO uses ATMega328p's built-in timers, C0 to C6, bendable and tunable, with 4 selectable wave shapes
The C6 note frequency is slightly over 1khz. Extending the note limit to C7 is possible by modifying
the firmware, though with a slight pitch inaccuracy in the highest octave.
- Currently stores 16 patches within the AVR device's EEPROM, selectable via a MIDI 'patch select'.
All patch banks are 'aliased' such that bank 0 and bank 'n' are effectively identical. All programmable
voice parameters are stored as part of the current patch.
NOTE: The SFT Synth Programmer software is required in order to customize patches, along with an external
MIDI cable connected between the computer and the SFT Synth. The software is designed to run on
Microsoft® Windows™ XP or later, as well as POSIX-compliant systems supported by wxWidgets
- Aligned via software using SPI electronic potentiometers
- Selectable as Low Pass, High Pass, or Band Pass, with frequency range extending from below C0 to significantly above C8
- Adjustable 'Q' (filter resonance) for all 3 filter types
- Selecting Low Pass with maximum frequency, or High Pass with minimum frequency, and minimum filter resonance, effectively bypasses filtering.
- The filter uses a non-patent-encumbered technology, first published in 1974, and uses ROHS compliant components (no cadmium, unlike vactrols)
- The filter is controlled exponentially using PWM output from ATMega328p through a proprietary exponential-conversion circuit using a minimal number of components
Three electronic potentiometers on the board are adjusted via software to account for component nonlinearity in the filter and conversion circuit. For a purely analog filter
of this type, this kind of alignment process is inevitable. The alignment process itself is designed to be performed by an untrained individual in less
than 5 minutes, using the programming software (making this viable as a kit). An experienced technician should be able to perform this in under 2 minutes.
An automated alignment process is theoretically possible, especially since the adjustments are made via software.
- Generates 'stepped' waveforms that approximate the analog equivalent, causing heavy emphasis on correct harmonics while greatly simplifying circuitry
The intent was to minimize cost while obtaining the correct 'sound'. Use of this method allowed extending the highest note by at least 1 octave.
- Select one of: Triangle, Sawtooth, Square, Pulse
(unfiltered waveforms may appear somewhat different on a scope, but will sound very similar)
- Programmable Voice Parameters
- DCO: LFO effect level, Portamento time
- LFO alters the DCO frequency up to '1/2 step' for vibrato effect
- Portamento evenly 'sweeps' across semitones over an adjustable delay time, between the previously played pitch and the currently selected one
- VCA: Attack time, Decay time, Sustain level, Release time, LFO effect level
- VCF: Cutoff frequency, Pitch effect level, Envelope effect level, Resonance, LFO effect level
- 'Cutoff' applies equally to all notes and is the 'base' value for the VCF effect
- 'Pitch' adjusts how much effect that note pitch will have on the VCF
- 'Envelope' adjust how much effect the envelope signal will have on the VCF
- 'Resonance' adjusts filter 'Q', adjustable from 0 to 7. The maximum resonance for each filter has been designed to operate just below the point of oscillation.
- LFO: Frequency, Delay time, Signal Type (Smooth, Sample, or Random)
- The LFO is emulated as a free-running cosine wave for more natural sounding effects
- 'Smooth' applies the LFO signal directly
- 'Sample' applies the LFO value captured at 'note start'
- 'Random' uses a pseudo-random value captured at the start of the LFO cycle
- Responds smoothly to MIDI 'Note Bend', full scale fixed at 2 "half steps", in either direction.
- Uses 'off the shelf' components, specifically chosen to be reasonably priced AND ROHS compliant
- Simple alignment procedure for VCF using the control software, using a simple 'walkthrough' procedure,
makes it possible to offer the SFT Synth in 'kit' form
- LFO may be optionally synchronized to MIDI timing events (useful for synchronizing the LFO with note timing).
- Identifies itself on MIDI Out via MIDI SysEx message [pending registered MIDI device identifier assignment]
- (9/3/2014) The newest 'V3' board design incorporates 5 SPI digital potentiometers to test the basic concept, as well as additional
noise filtering and a better layout to reduce background noise [which works perfectly]. Some corrections were made to the design as
'blue wires of salvation' which are visible in the photo. This design uses one SPI pot to control the VCA, one to control VCF resonance,
and 3 more to control the VCF alignment parameters. Additional tweeks to component values should improve the accuracy of the
alignment procedure and overall performance.
Summary of Improvements:
- Background noise is significantly lower
- Output level has been significantly increased (previously higher levels had excess distortion; design changes eliminate this problem)
- Overall performance of the VCA and VCF have been significantly improved.
- Digital pots enable software alignment of VCF, reduce BOM cost.
- Two 'original board' prototypes were built using the initial board design, 4" x 2" with 1/4" Phone jack output and MIDI In/Out
The first of these two prototypes was used for working out the 'kinks' and trying out various design changes.
The second prototype, using the same board as the first [but modified in a few places] incorporated various design changes,
including an SPI potentiometer for the VCA [which works better] as well as additional filtering and other design tweeks
(and corrections to the basic board design).
- Initial prototype built using 0.1" pre-drilled proto-board with single-side copper pads
- B.O.M. cost determined (source: Digikey), retail component cost appx 1/6 estimated retail price (excluding board, case)
LPR cost per unit is likely to be SIGNIFICANTLY below the expected retail price
Without the 20-turn potentiometers, it is even LESS (the digital potentiometers are less than $1 each)
- Created standard (preloaded) sound samples, 2 of which were used to create the 'Demo' song (using the original prototype)
- Initial marketing analysis performed, competing products sell for about TWICE the expected retail price
Additional Project Needs that MAY Require Financing
- FCC Verification for Part 15 subpart B (unintentional radiators, peripheral device)
This may require a 'limited production run' in order to obtain a representative sample
- (optional) Additional testing for CE mark, others
- Finalize board design (based on FCC testing, other requirements)
- Possible additional features [for marketing feasability]
- Enclosure design - 3D print of prototype design, tooling/mold for LPR
- Verify compliance with MIDI specification, and obtain registered Manufacturer/Device ID from MMA [midi.org]
- Legal research, trademarks, patent applications and applicable (existing) patent licensing requirements
- Production facilities for small-scale and large-scale assembly (outsource)
- Qualified technicians (or outsource) to perform alignment and testing
- Marketing Channels
Demo Song and Sound Samples
- 'Rumble Synth' as OGG and MP3
- Demo music featuring synth bass and synth lead using the SFT Synth [codename 'Piranha'], with backup from General MIDI and a Roland JX-3P
This song is also available for streaming and download at my
- Synth Demo - a VERY simple 'stand-alone' demo of several different patches using an earlier
version of the synth. Since then, significant quality improvements have been made, but the same kinds of effects are still possible.
NOTE: For some reason the OGG/Vorbis conversion created a few artifacts, so if something sounds odd, that might be why.
The original board design
A photo of the original prototype
Another photo of the original prototype [exploded]
A Related Project - The 'Unbricker'
This is the 'unbricker' that I can use to program the AVR CPUs directly,
or via an ISP cable. It is basically an
Arduino ISP programmer that uses a slightly
modified version of the sample program that is included with the Arduino IDE, and has a ZIF socket
wired up as if it's connected to an ISP header. With this (simply constructed) device I can flash
an AVR that has no bootloader on it [I have been using a modified version of the Adafruit bootloader
since it works so well] by inserting it into the ZIF socket. Or, I can 'unbrick' a unit that has a
CPU soldered in place by use of the ISP header.
You will notice that the ZIF socket has its own ceramic resonator. This is necessary to create a
proper circuit for an AVR processor. Additionally I've populated it with some LEDs to indicate
programming activity and status. At the top you will see a 6 pin male header. This mates up with
Adafruit's 'FTDI friend' (see link, above) and FTDI USB cable. It is the same type of USB/serial
interface that you would use with the 'Boarduino' (also from Adafruit, and seen in the original
prototype photos above).
The 16.000 Mhz ceramic resonator is basically the same as what the Boarduino uses. Thankfully
Adafruit open sourced their device, and the schematic is trivially simple, like a reference design.
Though I would definitely recommend using the Boarduino for prototyping, I would prefer to use
a CPU + resonator (or crystal) for a final design, mostly because of cost. But I think the Adafruit
people knew this. Arduino itself is open sourced, after all.
One key feature of the 'unbrick' unit is the 'reset' jumper, next to the regulator. By disabling
the 'reset on open' that happens when AVRDUDE opens the serial port, you will flash whatever
firmware or bootloader you choose onto the ZIF or SPI connected device. However, if you ENABLE
the 'reset on open', you'll be able to re-flash the programmer itself with new firmware. It is a
much simpler solution than the ones offered on the 'Arduino ISP' web page, though it requires
building your own device (soldering, etc.). If nothing else, it's a nice proof of concept for
how to use an AVR processor directly within your design, without the 3rd party device. [Still,
for breadboarding, I would prefer the Boarduino or an Arduino - they're designed for that]
©2013,2014 by Stewart~Frazier Tools, Inc. - all rights reserved
Back to S.F.T. Inc. main page
Last Update: 9/03/2014