instructables PICO MIDI SysEx Patcher Instruction Manual
- June 9, 2024
- instructables
Table of Contents
instructables PICO MIDI SysEx Patcher
Product Information
- The PICO MIDI SysEx Patcher by baritonomarchetto is a hardware solution designed to increase the programmability of vintage synthesizers that lack programmability. It is based on the Raspberry Pi Pico microcontroller board and features a built-in LED display, two rotary encoders with built-in push buttons, and a push button. It also includes a MIDI input for serial operation and open firmware. The programmer can be placed between the master controller and the synthesizer to allow for real-time modifications of parameters while playing a sequence, and the transfer of any other MIDI message from the master controller to the target synth.
- The PICO MIDI SysEx Patcher supports several vintage synths, including Roland Alpha Juno (1/2), Korg DW8000/EX8000, and Oberheim Matrix 6/6R (> 2.14 firmware).
Product Usage Instructions
- Connect the PICO MIDI SysEx Patcher between your master controller and the vintage synthesizer you want to create a patch for.
- Turn on the master controller and the vintage synthesizer.
- Use the two rotary encoders to navigate and modify parameters in real-time while playing a sequence.
- Use the push button to transfer any other MIDI message from the master controller to the target synth.
- Refer to the user manual for more detailed information on how to use the display and how parameters are grouped at software level.
Note: Make sure that your vintage synth is supported by the PICO MIDI SysEx Patcher before using it. Also, refer to the hardware description section of the user manual for information on the required components and how to assemble them.
ABOUT PRODUCT
- I have a soft spot for vintage synthesizers. The current music production scene is exciting, don’t get me wrong, but I nd myself playing with “obsolete” keyboards the most.
- One drawback with instruments from the mid 80’s is sometimes the lack of programmability. Programming some of them can be tedious, and the fact that third party softwares often do not support SysEx protocol doesn’t help.
- There are two approaches to face this problem anyway: software (who said Ctrlr?) and hardware.
- Needless to say, we are dealing with a hardware solution here.
- I have (I think) already boosted the programmability of some iconic instruments from the golden era like Roland a-Juno, Oberheim Matrix 6, Korg DW8000, SCI Multitrack and others with a combi SysEx programmer and sequencer based on arduino MEGA. My recent addiction to the Raspberry Pi Pico microcontroller board made me think back at how to solve the issue.
- Raspberry Pi Pico is a cheap and powerful microcontroller and it’s my favourite choice, lately. I am adopting it for new projects, but also to revisit some old project of mine.
- With IC’s memory limits gone (but a limited number of GPIOs) I ended up with something with a very di9erent interface and work:ow with respect to the previous project.
- Better? Worse? You decide 🙂
Supplies
Follows the Bill of Materials (BOM):
-
Microcontrollers, ICs, Display
- 1x Raspberry Pi Pico (30 GPIO clone)
- 1x 6N138 optocoupler
- 1x 1602A LED display
-
Capacitors, Resistors, and trimmers
- 3x 220 ohm resistor
- 1x 330 ohm resistor
- 1x 10K ohm resistor
- 2x 1000 ohm trimmers
1x 100nF non polarized capacitor
-
Diodes and encoders
- 1x 1N4148 diode
- 1x 1N4004 diode
- 2x incremental optical encoders
-
Others
- 2x pot knobs (optional)
- 1x DC barrel
- 1x B3F 4050 Omron momentary push button
- 2x MIDI (DIN 5) connectors
PRODUCT LAYOUTS
INSTALLATION INSTRUCTION
Step 1: Programmer Features
- PICO MIDI SysEx programmer main functions are:
- Built-in LED display
- Simple operation with only two rotary encoders and a push button
- MIDI input, for serial operation
- Open Firmware
- Yes, technically those rotary encoders have a built-in push button and actually are-in-use,so the button count is”three”, not “one”.
- The programmer should be placed in between your master controller and the synthesizer you want to create a patch for.
- This makes possible real time modications of parameters while playing a sequence and the transfer of any other MIDI message you want to deliver from the master controller to the target synth.
- Currently supported synths are:
- Roland Alpha Juno (1/2)
- Korg DW8000/EX8000
- Oberheim Matrix 6/6R (> 2.14 rmware)
- As more verbosely described in the next few Steps, the display and the grouping of parameters at software level play a major role in this project. Continue reading for more details 🙂
Step 2: Hardware Description
-
Interface
- In this programmer I wanted to adopt an opposite approach with respect to the previous project: The interface elements are here kept at a minimum, with only two rotative incremental encoders and a menu button (ok: three buttons).
- It may seem a step backward reducing the number of knobs in a programmer born to face the lack of programmability of mid ’80s synths. It’s not if you consider the sinergy with a rmware where all parameters are reasonably cathegorized (see next Step) and a LED display showing in real time the patch parameter cathegory, name and value.
-
LED Display
A reasonably sized LED display makes the patching more pleasant, especially if you want to spend time on it. My previous hardware programmer project is equipped with a tiny OLED display. It is enought for that hardware because information displayed are limited to the sequence properties, but in this case all patch parameters names are visible, without the need for a comparison sheet. -
Microcontroller
- As said, the microcontroller in use is the Raspberry Pi Pico. This microcontroller is powerful both in terms of computational power (up to 133Mhz, dual core) and memory storage (up to 16Mb). That huge – as per today standards – memory allows to include verbose strings in the rmware, makeing the new approach adoptable.
- The Raspberry Pi Pico is also cheap, at the moment, soo…
-
MIDI
- Both MIDI IN and MIDI OUT circuits are built-in.
- MIDI OUT is mandatory to be able to send MIDI messages and in no way could be left out.
- MIDI IN is necessary too, because the synth could not otherwise receive messages from any other instrument (i.e. master keyboard or DAW) when the programmer is connected. This means that patching and sequencing phases would be necessarily separated/distinct. With a built-in MIDI IN circuit you can have both a sequence running and the possibility to modiy the patch at the same time (i.e. you could send a nice lter sweep in real time).
- The MIDI IN circuit is an opto-isolated circuit respecting the MIDI association specications. Nothing new under the sun.
-
Power Supply
- The SysEx programmer can be powered in two di9erent ways: directly from the USB-C connector of the microcontroller board, or by using the PCB mounted DC barrel. Both are legit, but I woud prefer the latest because:
- the DC barrel is more robust
- DC barrel input is directly connected with the PICO’s +5V line (the so called “Vsys” pin) which bypasses an internal
diode protection in series.
- A center positive PSU must be used. Even if a inverse polarity protection diode is there, you don’t want to apply inverted polarity because it could damage your PSU (not the programmer because of the diode protection shorting GND and +5V in such situation).
-
Microcontroller Board
I have already sung the praises of Raspberry Pi Pico microcontroller board. Here I want just add a warning. There exist two versions of this microcontroller board (if we neglect the fact that you can buy it with memory ranging from 2Mb to 16Mb). Here I have been using the 30 pins clone, which has a di9erent pinout with respect to the oKcial Pico. At the moment, the 2Mb version is suKcient.
Step 3: Programmer Parameters Cathegorizations
-
Scrolling through 30+ parameters in a sequential way (one after the other) is not practical. Nonetheless, this Programmer claims the simplication of the “single data slider” interface of supported synthesizers. How is that?
-
A possible solution to sight the target was, for me, grouping parameters within cathegories. Cathegorization makes parameters more accessible by reducing their number, and makes it easier to actually locate them.
-
Cathegorization followed the same principle for all the supported synthesizers and, in my intentions, resembles the typical phisical block structure of our beloved analog synthesizers: oscillators -> voltage controlled lters -> voltage controlled ampliers. Modulation sources and e9ects are next (more details in the followings
-
Korg DW8000
-
DW8000 (and EX8000) patch parameters where already layed down well by Korg, so the Programmer cathegorizationfollows slavishly the front panel grouping.
-
Parameters are grouped in 8 cathegories:
-
Oscillator 1
-
Oscillator 2
-
Voltage Controlled Filter
-
Voltage Controlled Amplier
-
Low Frequency Oscillator
-
Wheel
-
Digital Delay
-
Others (portamento)
See Step headersheet for details aboutsubcathegories. -
Filter and amplier have one dedicated envelope each. In this case, envelopes paramenters are grouped withing the voltage controlled element of destination.
-
All DW8000 parameters are supported, with the exception of MIDI modes/channel.
-
-
Roland a-JUNO
-
Even if the Roland a-Juno has a limited number of patch parameters, their sequence in the MIDI implementation is the most confusing between the supported synthesizer. It took me some time to group the MIDI implementation in a similar way to the front panel sequence (even if not the same).
-
Mission accomplished, though:
-
Oscillator
-
Voltage Controlled Filter
-
Voltage Controlled Amplier
-
Envelope
-
LFO
-
Chorus and bending
See Step headersheet for details aboutsubcathegories. -
All 36 Roland a-Juno parmeters are supported by the Programmer. The single (assignable) envelope parameters are grouped under a dedicated group.
-
-
Oberheim Matrix 6
-
The Oberheim M6/M6r is the most advanced synthesizer of the lot and features an incredible routing complexity even compared with nowadays instruments.
-
The time tought us that “complexity” can be a two blades knife in the musical production world, and the absence of direct parameters manipulation possibilities makes the Matrix 6 one of the most underrated “sounds factory” out there in terms of sound engineering.
-
Of the 99 parameters the synth supports, “only” 52 have been included in the Programmer rmware. I cathegorized them into 9 groups:
-
Oscillator 1
-
Oscillator 2
-
Voltage Controlled Filter
-
Voltage Controlled Amplier
-
Ramps
-
Envelope 1
-
Envelope 2
-
LFO 1
-
LFO 2
See Step headersheet for details aboutsubcathegories. -
I tried to limit parameters to a reasonable number by leaving out of the equation the third envelope, track points, clicks, etc. It would be possible to handle them all, anyway, thanks to the Raspberry Pi Pico memory size.
-
Parameters not handled by the Programmer are not “disabled”, but accessible through the synth panel, anyway!
-
The Matrix Modulation was too complex to be included, so it was left out.
-
Step 4: How to Use
- At rst power on, the synth selection and MIDI channel menu page is displayed.
- Rotate the LEFT knob (PARAMETER knob) to select which MIDI channel the target synth is listening to.
- Rotate the RIGHT knob (VALUE knob) to select the synthesizer you want to send your MIDI messages to.
- You will need to do this operation any time you reset the Programmer. It is very simple to have the two variables dening the starting synth and MIDI channel permanently changed thanks to the open source nature of the rmware.
- Now we can exit menu mode by pressing the “Menu” button. To Change any supported patch parameter:
- Rotate the left hand rotary encoder (PARAMETER knob) to select the parameter’s cathegory of interest (names in the upper part of the LED display)
- Pess the left hand rotary encoder push button to switch to the actual parameter selection (names in the lower part of the LED display)
- Select the actual parameter you want to modify by rotating the left hand encoder (PARAMETER knob)
- Rotate the right hand rotary encoder to the desired parameter value. You can advance parameter values 10-by-10 by pressing the right hand rotary encoder push button
- Patch parameter values are MIDI transmitted as soon as the value is changed for “real-time” patching.
- Repeat the procedure for any parameter of your interest.
- If you want to return to menu screen, simply press the menu button.
- Please notice that:
- Programmer’s parameters are all initialized to a value of “zero” when the Programmer is rst turned on after a shut down or when you select a di9erent synthesizer in the menu.
- When a parameter value is changed, that value is kept in memory as long as the Programmer has not been reset or turned o9.
- If you change a parameter value from the synthesizer front panel, the Programmer parameter is not updated (they are not in sync).
HERE<< is the sketch repository (Github) with the latest version. Being open source, you are welcome to modify the sketch at your will and x the bugs (see next Step) 😉
Step 5: Sketch Limits/bugs
- There is room for major improvements in the current, preliminary, sketch.
- In example, we could add a function to save the midi channel and synthesizer instead of having to select it on startup every time the Programmer is turned on. Given the amount of memory still free it would also be nice to support some other synthesizers. It would also be nice to get and store the current patch parameters and have Programmer and synthesizer synced.
- I have to report also a couple of annoying bugs in this rst iteration of the code. The rst time you turn one of the two optical encoders, a library (i suppose it’s the LCD library, but I am not sure) initializes and makes the Programmer unresponsive for some (two or three) seconds. Not a big deal, but annoying.
- Another bug is the loss of some SysEx send (every single optical encoder turn is recorded, but sometimes nothing is transferred to the MIDI out). This is denitely something to x.
Step 6: Acknowledgments
- The PCB pictured in this Instructable was sponsored by JLCPCB, a high-tech manufacturer specialized in the production of high-reliable and cost-e9ective PCBs.
- They o9er a :exible PCB assembly service with a huge library of more than 350.000 components in stock. 3D printing has “recently” been added to their portfolio of services so one can create a full nished product all in one place!
- Their customer service is responsive and helpful and PCBs a great value for the money.
- Their contribution in the realization of this project was essential sooo… many thanks! 🙂
- By registering at JLCPCB site via THIS LINK (a,liated link) you will receive a series of coupons for your orders. Registering costs nothing,so it could be a nice opportunity to give their service a try 😉
References
- Yours for the making - Instructables
- Baritonomarchetto's Profile - Instructables
- Ctrlr – Control your MIDI life (MIDI editor for all your hardware)
- PCB Prototype & PCB Fabrication Manufacturer - JLCPCB
- Whirlwind - PC to JAMMA Arcade Cabinet Interface : 5 Steps - Instructables
Read User Manual Online (PDF format)
Read User Manual Online (PDF format) >>