ItsyBitsy M0 Synth | Sigma-6 Voice Module
Digital Sound Synthesizer based on SAMD21 Microcontroller

A DIY project by M.J. Bauer

proto board
Experimental prototype / minimal development & test platform

Introduction

This project should appeal to a diverse range of DIY synth enthusiasts from beginners to experts. Don't be misled by the simplicity of the hardware... the micro-controller firmware implements a complete sound synthesizer comprising 6 oscillators, mixer, 3 envelope shapers, LFO with ramp, variable-gain attenuator, audio limiter/clipper (overdrive) and reverb effect. 

Audio quality is excellent using a 12-bit SPI DAC and 32-bit (fixed-point) precision DSP computations.

A hardware variant may be a simple low-cost MIDI-controlled sound module, with or without control panel. Another variant may be a eurorack module with analog (CV) inputs and a control panel comprising OLED display, 2 push-buttons and 'data entry' pot. Several sigma-6 "voice modules" may be connected to a "master controller" to make a respectable polyphonic synthesizer. (More about that later.)

The design is based on the "ItsyBitsy M0 Express" (ATSAMD21) MCU board from Adafruit. For makers on a tight budget, it may be possible to substitute a dirt cheap SAMD21 breakout board (e.g. RoboDyn 'SAMD21 M0-Mini' - available on AliExpress) but it isn't pin compatible. My decision to use a SAMD21 MCU should make the design "future proof" (contrary to my original Sigma-6 synth which used a PIC32MX dev board).

Details of the "Sigma 6" synth concept and software design can be found in this PDF document:

Sigma-6 Synth Design Notes

(Ignore sections on the user interface -- the document was written for another hardware platform.)

For anyone curious about the software, the source code is available already on GitHub (link below). Keep in mind, this is a preliminary release with minimal functionality. Support for the control panel (OLED display) and analog control (CV inputs with 12-bit resolution) will be added later. The software is being developed in the Arduino environment to make it easier to program (compared to using a more professional IDE).

Sigma-6 Synth software repository

...


Hardware Design

Below is a schematic of the minimum practical build. It can be simplified further by omitting the SPI DAC (MCP4921). The SAMD21 on-chip DAC (10 bits) may be used instead for audio output. The control panel (OLED display, 2 buttons and 'data entry' pot) is optional, depending on your intended application.

SCHEM P1 V2

There is a choice of MIDI IN circuit configurations. The opto-coupler (6N138) is optional, but recommended for applications where only one Sigma-6 synth module will be connected to a MIDI controller. The MIDI IN circuit was designed with a view to connect multiple synth modules to a common MIDI bus. For these applications, the opto may be omitted and R1 replaced with 2k2. The common bus connection is pin2 of header P5 (and GND of course). The MIDI bus scheme requires a simple "MIDI distribution board" having a standard (opto-isolated) MIDI IN receiver circuit and an open-collector output driver.

Hardware variants requiring analog (CV) inputs will need additional circuitry, as shown in part 2 of the schematic below. The PCB will have provision for the extra parts, of course.

chem p2

SAMD21 ADC inputs are 3.3V full-scale. The external CV inputs are scaled to accept a 0 to +5V signal range. The op-amp buffers ensure that the voltage at the ADC inputs cannot exceed +3.5V, or go negative. (The LM2904 and LM358 have a common-mode input range 0 to +3.5V.)  The op-amps also allow a high input resistance (50k ohm) at the external CV inputs and a low output resistance to feed into the ADC inputs.

The GATE input is fed into a 555 timer IC which is not wired as a timer, but as a Schmitt Trigger to provide noise immunity. The upper input threshold (VH) is about 2V; the lower threshold (VL) about 1.25V, which is more-or-less TTL and CMOS 5V logic compatible. The 555 "discharge" output is open-collector which makes a simple 5V to 3.3V level translator using a pull-up resistor.  I'm not sure what happens to the 555 if the input voltage exceeds +5.5V or goes negative. Put it in a socket and regard it as a fuse! (They're dirt cheap.)


Project collaborator Jean-Pierre Meyer (in France) has kindly offered to design circuit boards and other hardware to facilitate construction of synth modules, from the "minimal build" (board only, no control panel) up to a complete eurorack module. The picture below shows my impression of what the eurorack module might look like. I'm sure Jean-Pierre's panel artwork will look much more elegant than this...

euro panel

Examples of Sigma-6 Synth variants proposed...



Properties
Option 1:
Minimal build
(board only)
Option 2:
Stand-alone box
(control panel)
Option 3:
Eurorack module
(CV inputs)
MIDI INYesYesYes
Control Panel
(OLED display,  etc)
NoYesYes
Analog (CV) inputsNoNoYes
ApplicationsExperimentation,
Polyphonic synth
Single or multi-
module system
Modular synth -
analog / hybrid

Note 1:  Multi-module systems will require a "MIDI Distribution board" to provide a standard opto-isolated MIDI input receiver and bus driver circuit.  (Details TBA.)

Note 2:  Polyphonic systems will require a "Master Controller" to decode MIDI messages from a polyphonic keyboard (or sequencer) and to assign notes to respective Sigma-6 "voice modules". The Master Controller needs only a "low-end" 8-bit MCU, e.g. Arduino Nano, Pro Micro (AT_32U4), etc.  (Details TBA.)

...

... to be continued! ...

...


Firmware  Installation

Download and install the latest version of Arduino IDE and follow the instructions here:

Arduino IDE Setup

To build the ItsyBitsy M0 synth firmware, you also need to install a "fast timer" library in the Arduino IDE.
Follow the instructions in the "READ_ME" file here:

Fast Timer Library for SAMD21

Steps to build and "upload" the firmware:

  • Download the Sigma-6 source files from the GitHUb repository (see 'Introduction', top of page).
  • Create a project folder in your computer local drive named "ItsyBitsy_M0_synth".
  • Copy the downloaded source files into the project folder.
  • Double-click on the file "ItsyBitsy_M0_synth.ino" -- this should open Arduino IDE and load
    all source files into the editor window. (Alternatively, open Arduino IDE first, then open the
    source file
    "ItsyBitsy_M0_synth.ino".)
  • Compile the code and upload the firmware to your Sigma-6 module(s).

If you have any problems, send me an email inquiry.

It should be possible to program the firmware into the target board from a prebuilt ".hex" object file, without needing to use Arduino, but first I need to get my head around Adafruit's SAMD21 USB bootloader. Then I'll enlighten you with the procedure.
Meanwhile, I would be grateful to hear from anyone who has done this already and can explain it more clearly than Adafruit's convoluted setup guide!
...


Thanks for taking an interest in this project. Feel free to send comments and queries, either post on the Synth-DIY Facebook group (search for my posts), or email direct to me (address below). 

Be sure to inform me of any further developments you make to the project.
...

Other projects by MJB that you might be interested in:

MIDI Device Tester

MIDI-to-CV Translator Box

'REMI 2' - EWI MIDI Controller

'REMI  Synth' - Monophonic digital synth  (based on PIC32MX MCU)



Send email enquiries, comments, suggestions, etc, to...

link to email address

Last update: 16-JAN-2025

MJB's Home Page

___