MIDI Prober

A device for probing MIDI signals with an oscilloscope

Introduction

When building DIY MIDI devices it is often useful to view the MIDI signal on an oscilloscope, allowing you to see things that MIDI viewer software cannot, such as 'hidden' active sensing messages, detailed timing information such as latency, and whether or not running status bytes are transmitted. It also allows you to view an analog voltage from a sensor overlaid with its corresponding MIDI data on one screen, which is very helpful when designing interactive MIDI controllers.

The MIDI Prober connects between two MIDI devices and provides a test point for an oscilloscope probe so the MIDI signal can be viewed in real-time. It has two MIDI inputs and two MIDI outputs, so two MIDI signals can be viewed simultaneously.

What is a 'MIDI signal'?

A digital signal is a changing voltage that can be either 'high' (usually 5 volts) or 'low' (usually 0 volts). Normally, a change from high-to-low represents a one, and a change from low-to-high represents a zero. A group of eight of these 'bits' forms a single byte.

MIDI uses 7-bits of each byte for data, so a byte in a MIDI message can convey a value between 0 and 127. Most MIDI messages consist of two or three bytes. A note-on message, for example, consists of three bytes: channel, note number, and velocity. A programme change message consists of two bytes: channel and programme. An active sense message is just one byte long. A system exclusive message can consist of many bytes.

We can therefore view a MIDI message on an oscilloscope by probing the changing voltage that constitutes the digital signal.

The MIDI Prober

MIDI Prober

MIDI Prober

The MIDI Prober has a MIDI input, a MIDI output, and a test point between them to connect an oscilloscope. It actually has two channels, so you can view two MIDI signals simultaneously. Each channel has an LED that flashes when a MIDI signal is passing through. The MIDI Prober connects between two existing MIDI devices so you can probe the MIDI signal that passes between them and view it on an oscilloscope.

Circuit Description

MIDI Prober Schematic Detail

MIDI Prober Schematic Detail

Download full schematic

The MIDI Prober's MIDI inputs and MIDI outputs conform to the MIDI electrical specification. Connected devices have no idea that they are attached to a piece of test equipment. It may even have a beneficial effect, providing opto-isolation to cheap USB-MIDI cables that don't have it.

The MIDI input is isolated using a 6N136 opto-isolator. A 74HC14 hex inverter is used to buffer the test point. Two inverting stages are needed so that the signal at the test point is at the original polarity. Another inverting stage buffers the MIDI output via 220 ohm short circuit protection resistors.

The power supply is a 7805 linear regulator with a polarity protection diode and a power LED. It will work with an input voltage of 9 to 12 volts.

MIDI Prober In Use

A single message

This is a sigle continuous controller message. There are three bytes, and we can see the entire message takes just less than one millisecond to transmit.

Sensor-generated messages

In this example a sensor (an LDR light sensor) is plugged into a DIY sensor-to-MIDI converter. We can see that as the voltage changes, MIDI messages are generated at regular intervals.

And when we zoom in, we can see that the interval between messages is 20 milliseconds.

Button latency

Here we are seeing how long it take a MIDI message to be generated after a button has been pressed. In the example below, the MIDI message begins transmission 1.880 milliseconds after the button has been pressed. But on other occasions, latencies up to 15 milliseconds occured.

Active sensing

And finally, an example of an active sense message. Active sensing is optional. It can be thought of as the regular (every 270 ms or so) heart beat of a MIDI transmitter. If the MIDI receiver detects a break in the regular heart beat, it should "turn off all voices" (MIDI spec, page 32). Because an active sense message is a single byte of value 254 (which is 11111110 in binary), all we see is the single 0 of the byte.

Resources

MIDI 1.0 Specification, 1996
(midi.org require you to register before downloading, but the document can be found elsewhere online without having to register.)
Obligatory reading for MIDI enthusiasts. Of particular interest is the fascinating MIDI input flow diagram on page A-3.