FLuXo Build Notes
This is an ongoing project of mine to create an inexpensive stand-alone synthesizer utilizing wavetable synthesis. I’ll be building on the Modern Device Fluxamasynth Arduino Shield as a foundation. My version of this synth (I’ve dubbed it “FLuXo”) will have serial 5-pin DIN MIDI-IN and MIDI-THRU connectors and several physical controls – maybe even an LCD screen.
» Stage One – Configuring the Arduino UNO R3 or Mega2560 as a USB MIDI Device
» Stage Two – Adding 5-pin DIN MIDI-IN/THRU Connectors (In development)
» Stage Three – Adding a Power Supply and Potentiometers (In development)
Configuring the Arduino UNO R3 or Mega2560 as a USB MIDI Device
I know this looks like a lot of steps, but it’s just very detailed so it’s easy to follow along. These are Mac and Linux instructions, but they also generally apply to Windows users. The terminology and software tools referenced may vary, but the process and concepts can be applied across computer platforms.
There will be four processes taking place:
1. Resetting the ATmega328 processor.
2. Replacing the Arduino firmware with the MocoLUFA firmware.
3. Testing the dual boot modes used by the MocoLUFA firmware.
4. Connecting the Fluxamasynth serial MIDI-IN port to the Arduino’s USB-MIDI serial connection.
Note: You will need a 2-pin jumper for this project to make use of the MocoLUFA’s Dual Firmware modes. The 2-pin jumper is placed on the ICSP for USB interface header pins to switch between the two firmware boot-load modes.
When we’re finished, the Arduino and Fluxamasynth shield combination will be recognized by the computer as a USB-MIDI device with the name ‘MocoLUFA’.
Helpful Things To Know
ICSP = In Circuit Serial Programming.
The Arduino R3 has two ICSP locations. One location is used for accessing the USB connector Atmega16U2 IC chip. The other for is used for programing the Atmel ATmega328 processor. These two header locations allow developers to upload or “flash” code to the IC chips by using external programers.
Atmega16U2 ICSP Pin-out Definitions for the Arduino R3 and Mega 2560:
1 MISO 2 VCC
3 SCK 4 MOSI
5 RESET 6 GND
TX and RX Properties
TX and RX are abbreviations for Transmit (TX) and Receive (RX). Keep in mind that these abbreviations are in the context of where you find them. So on an Arduino circuit board, a TX marking indicates that the Arduino “Transmits” signals from that location. An RX marking on an Arduino indicates a location where signals can “Receive”. Sometimes you’ll see these written as RxD and TxD, and in those cases the letter D represents “Data”.
More information than you require:
Rx is short-hand for the latin imperative Recipere, meaning to “take”. Tx is shorthand for Tramitto or to “transfer”.
1. Download and install a DFU Programer
The Device Firmware Update (DFU) software is a command line application used to upload or “flash” code to IC chips. If you’ve never done this before, it’s not as complicated as you’d think. In this instance, we’re going to be copy and pasting most of the commands so hopefully nobody gets lost.
Before we get to that, you’ll need to download a DFU programmer and make sure it’s installed on your computer. I suggest one of the following choices:
Atmel FLIP: http://www.atmel.com/tools/flip.aspx
2. Download The Moco for LUFA Bootloader File
Firmware for the Arduino is stored in a .hex file, a format used to store machine language code in hexadecimal form. The file needed is called ‘dualMoco.hex’ and it can be found at the kuwatay/mocolufa Github repository. This is the file we’re going to use to replace the official Arduino firmware.
Leave the file in your Downloads directory to avoid issues later on in the instruction steps.
Moco for LUFA: https://github.com/kuwatay/mocolufa
3. Reset the Arduino’s Atmega16U2 IC Chip
– Connect the Arduino to the computer with a USB cable.
– Open the Arduino IDE software and verify that the board is connected to a serial port by looking at: Menu: Tools > Port > Serial ports. Also, make sure the correct board has been selected in the Boards Manager menu: Menu: Tools > Board > Boards Manager.
– We’ll now reset the Atmega16U2 and place it into DFU programming mode. Reset the Atmega16U2 by sliding a jumper pin over the ‘Reset2’ and ‘GND’ pins on the ICSP header, then remove the jumper pin and set it aside where it wont become lost.
– Verify the Atmega16U2 IC chip has been reset. The board should no longer show up in the Arduino IDE serial port list Menu: Tools > Port > Serial ports. If you see your Arduino listed in the serial ports menu, you havn’t reset the Atmega16U2 properly and you’ll need to try the process again.
4. Replace the Arduino firmware with the MocoLUFA firmware
– Open Terminal.app
Install the dfu-programmer if you haven’t done so by using the command:
sudo port install dfu-programmer
– Change the Terminal directory to the location where the MocoLUFA firmware .hex file was downloaded. If you haven’t moved the dualMoco.hex file, the command will be:
– Erase the existing Arduino Firmware. You will most likely be asked to enter your Admin password. Use the following command:
sudo dfu-programmer Atmega16U2 erase
– Upload the new firmware hex file with this command:
sudo dfu-programmer Atmega16U2 flash dualMoco.hex
– Software Reset the Atmega16U2 IC with this command:
sudo dfu-programmer Atmega16U2 reset
– Unplug the Arduino from the USB cable if there are no errors have been reported.
Error: “dfu-programmer: no device present.”
The Arduino is not connected or you need to reset the Atmega16U2 and make sure it’s in DFU Mode.
Error: “Something went wrong with creating the memory image.”
You are not pointing to the correct directory where your dualMoco.hex file is located. Or, the .hex file may be damaged so download it again.
5. Test the MocoLUFA Dual Firmware modes
– Test Arduino-Serial Mode
While the Arduino is disconnected, use the jumper to connect pins (GND) and (MOSI2). With the pin jumper in place, connect the Arduino to your computer with a USB cable.
You should now be in the MocoLUFA “Arduino-Serial” mode and you can program the Arduino by uploading sketches using the IDE program. Verify this is correct by opening the Arduino IDE program to see if your Arduino is listed in the serial ports menu.
– Test USB-MIDI firmware Mode
With the Arduino disconnected, remove the jumper from connecting pins (GND) and (MOSI2). Connect the Arduino to your computer with a USB cable. You should now be in the MocoLUFA “USB-MIDI” mode.
Verify that you’re in the correct mode by making sure the Arduino is recognized as a USB/MIDI device when it’s connected to one of your USB ports. In OSX, the easiest way to verify this is to open the Audio MIDI Setup.app. In the MIDI Studio window, you should see a MIDI device called “MocoLUFA”.
– Switching MocoLUFA Modes For Development Purposes
If you need to upload Arduino sketches or you’re developing MIDI applications, place the jumper back onto the Arduino (GND) and (MOSI2) pins while it’s disconnected from your computer. Then, reconnect the Arduino to the USB cable to initiate the Arduino-serial Mode.
You can switch back-and-forth between Arduino-serial and USB-MIDI modes like this for programing or troubleshooting purposes as needed by simply adding or removing the pin jumper while the Arduino is disconnected from your computer.
6. Connecting the Fluxamasynth serial MIDI-IN
– Disconnect the Arduino from your computer. Make sure the jumper has been removed from the ICSP header so the Arduino will boot into USB-MIDI mode. Mount the Fluxamasynth shield circuit board to your Arduino.
– Using a short jumper wire (Male-Female), connect the Arduino RX serial port, labeled RX on the Arduino and labeled Pin 0 on the Fluxamasynth shield, to the Fluxamasynth’s middle pin found above the PIN SELECT label.
– Connect the Arduino USB to your computer and the Fluxamasynth shield should now be recognized as a General MIDI synthesizer by your DAW software. It’s now playable by sending MIDI data to the Fluxamasynth’s MIDI-IN by using the Arduino’s USB connection.
If everything goes pear-shaped and you want to revert back to the original Arduino firmware, here’s the link to download it:
After downloading the official Arduino firmware, follow my directions in steps 3 and 4, or go to this URL for further instructions:
Stage Two – Adding 5-pin DIN MIDI-IN and MIDI-THRU Connectors (Coming)
Stage Three – Adding a Power Supply and Potentiometers (Coming)
The Fluxamasynth Shield home at Modern Device:
Moco for LUFA Arduino MIDI Firmware page:
My Fluxamasynth Arduino Shield Synthesizer demo video: