Nexus Update: MIDI Module

      Documentation, Electronics, Nexus, Support Electronics

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

  1. Channel Volume (analog, channel 10)
  2. Pitch Bend (analog, channel 11)
  3. Program Change (analog 5-way switch, channel 12)
  4. Modulation (analog, channel 13)
  5. Effect 1 (analog, channel 14)
  6. Effect 2 (analog, channel 15)
  7. Sustain (digital, channel 9)

Aux

  1. Program Change +5 (momentary switch)
  2. Program Change -5 (momentary switch)
  3. Program Change +1 (momentary switch)
  4. Program Change -1 (momentary switch)
  5. Bank Select +1 (momentary switch)
  6. 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:

  1. Pitch Bend: 0xE0, LSB, MSB
  2. Program Change: 0xC0, VAL
  3. Control Change: 0xC0, CC(LSB), LSB, 0xC0, CC(MSB), MSB
    1. channel_volume: CC(MSB): 0x07, CC(LSB): 0x27
    2. modulation: CC(MSB): 0x01,CC(LSB): 0x21
    3. effect_1: CC(MSB): 0x0C,CC(LSB): 0x2C
    4. effect_2: CC(MSB): 0x0D,CC(LSB): 0x2D
  4. Sustain: 0xC0, 0x40, VAL
  5. 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

Creative Commons License
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.