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 processor. Versions 1
and 2 used an ATMega328p. Version 3 will use an ATXMega32e5. The V2 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, as well as on 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 on Windows
A similar screen capture of a newer (wxWidgets) version of the SFT Synth Programmer application that supports V3
Update July, 2018
Version 3 will extend the capabilities of Version 2 in several VERY significant ways. First,
the DCO will feature dual tone generators and greatly improved sound quality. Second, the VCF
will be far more accurate with extended range as compared to the earlier versions. This is
primarily due to the increased speed and advanced peripherals found in the ATXmega32e5
processor, as well as improvements in the overall design.
Additionally, programming for Version 3 will take place using a USB serial interface, rather than
the MIDI interface.
A proof of concept version, using a 'proto board', significantly reduces the total parts count,
while simultaneously improving the quality WAY beyond original expectations. Version 3 will cost
less to make, be physically smaller, and likely support an on-board USB serial device (like FTDI)
rather than requiring an external serial device to be plugged into it. The proof of concept design
is working as expected and I will add information to this web page as the project moves forward.
The additional information (below) generally pertains to Version 2 and earlier (including the sound
clips). The new version is less 'buzzy' and has additional waveform capabilities that you'd expect
to find on high end synthesizers, like dual DCOs with de-tuning capability, true sine wave generation,
symmetry control, and so on.
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 (V2; V3 will have dual DCO), controlled by AVR microcontroller with minimal components
- Powered by either 9V battery or external 9V power supply
- 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
(V2 and earlier; V3 is expected to have built-in USB serial for programming)
- Standard MIDI interface as well as an optional serial port for programming (V2 shares the same port for this; V3 will use separate serial ports)
- Uses Atmel ATMega328p (V2; ATXMega32e5 for V3), programmed via the Arduino™ developent environment.
Standard settings and firmware can 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
(V3 will feature dual DCOs with advanced capabilities, including true sine wave generation, C-1 through C8)
- Currently stores 16 patches within the AVR device's EEPROM, selectable via a MIDI 'patch select'.
(V3 may include preset patches that would be alterable by changing the firmware; this is a feature I am considering)
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 (V3 - USB serial) 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 (V3 - to be determined; self-alignment possible)
- Uses a 'Steiner' active filter with ROHS compliant components. Selectable as Low Pass, High Pass, or Band Pass, with frequency range extending from below C0 to 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 ('all pass').
- Non-patent-encumbered technology, first published in 1974, with minimal drift (V3 uses compensating circuitry to eliminate drift)
- The V2 (and earlier) filter is controlled exponentially using PWM output from ATMega328p through a proprietary exponential-conversion circuit using a minimal number of components
(V3 and later uses a more sophisticated approach, where the VCF control curve slope is adjusted one time via a simple, [semi-]automated calibration step).
- V2 and earlier: Generates 'stepped' waveforms that approximate the analog equivalent, causing heavy emphasis on correct harmonics while greatly simplifying circuitry
V3 and later: Generates square, triangle, sine, and 'sharkfin' wave shapes, accurate to 0.1%, with variable symmetry and phase relationship between
two DCOs. The DCOs may also be de-tuned between 1/64 and 1/4 of a half-step in pitch, with optional up/down octave shift and '5th up'. Additional capabilities
(like free range tuning) may be added later, as needed. Additional "colored noise" capability (brown, pink, white, blue) to be determined. This DCO design
is entirely implemented in software, and eliminates many external components, while being able to directly drive the VCF.
- 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
- (V3 and later) DCO detune, polarity, phase, symmetry, and relative volume level between the two DCOs. Overall 'patch volume' sound level
capability to be determined, may be added as necessary.
- 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
(V3 and later, [semi-]automatic 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]
- (7/11/2018) Project resurrected due to new design with ATXMega32e5 CPU, which eliminates about 1/3 of the components and potentially
makes the project easier for an end-user to construct from a kit. Initial layout is 2.25 inches by 3.25 inches on a dual layer
board, but is likely to get even smaller before it has been finalized.
- (9/3/2014) The newest 'V2' 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 (including possible 'crowd fund')
- 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 (V1 only)
- 'Rumble Synth' as OGG and MP3
- Demo music featuring synth bass and synth lead using the V1 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 artefacts, so if something sounds odd, that might be why.
The second board design (V2) (3rd prototype), with a 'blue wire of salvation' clearly visible
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]