This is the third part of the Nexus documentation series. The first part documents the Basic Kit, the second part details the Mixer Module. This time, we explore the MIDI Module. Eventually, all of this will end up in a single document.
The MIDI Module converts control voltages (CV) from the guitar to MIDI. The basic firmware supports up to 6 analog and 7 digital inputs. The Multichannel Guitar Input (see Basic Kit) can carry up to seven control voltages or switches. Some of the back panel 1/4″ jacks may also be repurposed to carry additional control voltages or switches. The MIDI output is sent through a standard 5-pin DIN connector at the back panel.
Note: Please do not be confused with MIDI control and MIDI conversion. The MIDI module does not do any pitch tracking and MIDI conversion of the notes.
Nexus is configured to support these MIDI messages:
Main
- Channel Volume (analog, channel 10)
- Pitch Bend (analog, channel 11)
- Program Change (analog 5-way switch, channel 12)
- Modulation (analog, channel 13)
- Effect 1 (analog, channel 14)
- Effect 2 (analog, channel 15)
- Sustain (digital, channel 9)
Aux
- Program Change +5 (momentary switch)
- Program Change -5 (momentary switch)
- Program Change +1 (momentary switch)
- Program Change -1 (momentary switch)
- Bank Select +1 (momentary switch)
- Bank Select -1 (momentary switch)
The Main inputs typically come from in-guitar controls. There is really no distinction between switches (digital) and analog. Each expect a control voltage from 0v to 5v. For switches, the threshold is 2.5V. Anything less than the threshold corresponds to logic 0, anything above to logic 1.
Aux inputs are for additional switches only. Unlike the Main inputs, these are expected to be connected to simple momentary switches that shunt the input to digital ground. Aux inputs should connect directly to the MCU board digital ports (see below).
Note: The types of MIDI messages the MIDI module sends are not user configurable. Nexus itself is intentionally kept as simple as possible and does not have a user interface. Typically, your gear or DAW can be configured or “taught” about the type of control sent by a MIDI device and routes that to whatever parameter you need to control.
MIDI Messages
Pitch Bend is 14 bits, but the on-board analog to digital converter (ADC) is currently limited to 10 bits. MIDI CC messages send both the MSB (most significant byte; 7 bits) and LSB (least significant byte; 7 bits), hence 14 bits too. But again, the ADC is currently limited to 10 bits.
Here are the actual MIDI messages sent:
- Pitch Bend: 0xE0, LSB, MSB
- Program Change: 0xC0, VAL
- Control Change: 0xC0, CC(LSB), LSB, 0xC0, CC(MSB), MSB
- channel_volume: CC(MSB): 0x07, CC(LSB): 0x27
- modulation: CC(MSB): 0x01,CC(LSB): 0x21
- effect_1: CC(MSB): 0x0C,CC(LSB): 0x2C
- effect_2: CC(MSB): 0x0D,CC(LSB): 0x2D
- Sustain: 0xC0, 0x40, VAL
- Bank Select: 0xC0, 0x00, VAL
Program Change is a special form of control voltage that divides the 0-5v range into 5 voltage zones corresponding to a relative value from 0 to 4. This value (0 to 4) is then added to a base number which defaults to 0 but can be incremented and decremented using Aux switches. For example, if the base is zero (default from the factory), then the 5-way switch generates program change 0 to 4. If the base is 10, then the 5-way switch generates program change 10 to 14.
Tip: If you use the in-guitar 5-way switch, use foot switches to increment and decrement the base program change setting so you can access all 127 program change settings that MIDI allows. Use bank up/down switches to give you even more control.
Firmware Programming
For the tech savvy hacker, it is possible to re-program the firmware using the supplied Spy-Bi-Wire JTAG programming pins. The code is available as Open Source. The code is intentionally kept as simple as possible using Arduino (Energia) “sketch” and C++ to program the on-board MSP430 MCU.
The MIDI Board
Pinout
MCU Module | MCU board piggybacks using these pins (see MCU Board below). |
Digital Ground | Separate ground path for typically noisy digital electronics. |
5V | Regulated 5 volts supply (150mA max). |
3.3V | Regulated 3.3 volts supply (150mA max). |
12V | Regulated 12 volts supply from main board. |
CV Input Pins | Control voltage inputs (0v-5v). These are converted to 10bits digital using the MCU’s on-board ADCs. For switches, the threshold is 2.5V. Anything less than the threshold corresponds to logic 0, otherwise, logic 1. |
NC | Unused. Reserved for future expansion. |
The MCU Board
The MIDI module includes a small, general purpose MCU dev-board based on Texas Instrument’s MSP430. The dev-board is compatible with Arduino Software & Libraries. All MCU pins are provided. The MCU’s main task is to convert control voltages and switch inputs to MIDI as defined in the specification above. But being general purpose, you can use it to perform other tasks. The MCU is programmed using the supplied Spy-Bi-Wire JTAG programming pins.
Pinout
Digital I/O | P1.0 – P3.0 |
Analog In | P1.0 – P1.7 (10 bits SAR ADC) |
UART | Tx: P1_1, Rx: P1_2 |
I2C | SCL: P1.6, SDA: P1.7 |
SPI | MOSI: P1.7, MISO: P1.6, SCK: P1.5, CS: P2.0 |
GND | Ground |
VCC | 4.3V – 16V |
Programming Pins | 3.3V, GND, RST, TEST |
Specs
Microcontroller | MSP430G2553 – Low Power 16-bit MCU |
Operating Voltage | 3.3V |
Input Supply Voltage | 4.3V – 16V |
GPIO Pins | 24 pins (3.3V, 2mA max) |
Analog Input Pins | 8 channels (10-bit ADC, 0 to 3.3v) |
Flash Memory | 16KB |
SRAM | 512B |
Clock Speed | 16Mhz |
Communication Peripherals | UART, SPI, I2C, IrDA |
Programming and Debugging | Spy-Bi-Wire JTAG |
Board Dimensions | 38 mm x 25 mm |
Open Source
The Nexus Project is entirely Open Source. The designs (schematics, PCB layout, software, bill of materials, CAD drawings) are freely shared and 100% free, under the Creative Commons Attribution-ShareAlike 4.0 International License. Nexus source code is distributed under the MIT License.
All hardware design files and source code are available in the Nexus Github Repository: https://github.com/cycfi/nexus
Hardware design files licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.Software source code distributed under the MIT License.
All trademarks and registered trademarks are the property of their respective holders. The use of these trademarks does not imply any affiliation or endorsement by the trademark holders.