Due to limitation in the 8031/8051 CPU used in JX-3P where it only has a single serial port developers took a short cut* and left it to the user to select if synth should be able to alter PG-200 tone parameter or listen to MIDI notes. This project investigate if there is a simple solution to automate this feature. Plan is not to compete with any of the project already out there where new MIDI functionality are implemented. Although MCU code will need to decode and filter MIDI messages to understand when it can activate the programmer line.
(*) On MKS-30 this issue is solved implementing an dedicated 8041A interface chip as serial to parallel receiver for the PG-200. When the programmer have tone data ready the 8041A set signal PGRDY which instruct the main CPU to cue up tone data for processing.
Looking at the schematic we learn that when the slide switch on the back are set to middle position Protect or to Programmer position the status line RX MODE are forced to
LOW state. When switch are set to MIDI position this line is pulled
HIGH width resistor R5. Logic in IC1 74LS00 are also hooked up to this slide switch and select between which data stream, MIDI or PG-200 goes to the RX D line. RX D goes to connector CN7 on Main Board, and then to serial port pin 10 on the main CPU.
Status of RX MODE are read by the CPU together with the switch matrix on the Panel Board. Signal set on DIN Board pass through Jack Board and then goes to the Panel Board connector CN3 and set transistor TR14 to on or off, which then are read by the CPU as a open or closed switch together with all the physical switches.
Project idea is a simple merger buffering MIDI data using a cheap Arduino board width a SoC (system on a chip) having a serial port to handle incoming MIDI data. Then switch from PG-200 only when relevant data are available on the MIDI In port.
JX-3P only respond to a limited set of MIDI instruction like Note On/Off, Bend, Hold (pedal) On/Off, Program Change and All Notes Off. Only MIDI channel 1 and less useful OMNI mode (all ch.) are available.
From a normal busy 16 channel MIDI bus there are lots of data we can filter out to free up time to alter tone with PG-200.
There is also an obvious modification we can implement here, the ability to select any MIDI channel for input and convert to channel 1 before passing data on to JX-3P.
While first starting to render MIDI data it's tempting to translate a few others too, like MIDI clock to sequencer clock and tone parameter to PG-200 data. But first let’s start simple. Project might stall early on as Organix Inque use a similar approach like this in its MIDI Kit, but also implement a modified firmware in a bigger EPROM. I suspect the new EPROM change how main program execute MIDI/PG-200 data in a more timely manner.
- 1x Arduino developer board
- 1x Resistor 220R
- 20-30cm (10 inch) of thin wire
Project could probably run with a small ATtiny 45/85 but I will probably use a Nano board with ATmega328 16MHz which run at 5V and has easy USB interfacing to my computer.
Principle of connection in three simple steps:
1: Disconnect MIDI in from DIN-board and hook it up to RX input on new SoC, then back to DIN-board from MIDI out of SoC.
2: Disable slide switch from logic selecting data stream.
3: Connect one pin from SoC to point RX Mode.
All connection are done on the DIN Board and no need for cutting PCB traces.
This initial scenario foresees that JX-3P will gracefully handle incomplete messages from PG-200 by clearing internal buffer when switched to MIDI mode on the fly. If not we look into use of the BUSY line.
Connection in more detail:
- Unsolder wire jumper W8 (close to IC1), this disconnect MIDI bus in.
Solder point W8 going to pin 4 of IC2 PC900 opto coupler to Arduino RXI input.
Solder point W8 going to pin 12 of IC1 to Arduino MIDI Out.
- Unsolder wire jumper W5, this disconnect the slide switch from RX MODE while retaining the function of protect mode.
- Unsolder resistor R5, this ensure that RX MODE are not pulled
Solder one end of a new 220R resistor to the R5 solder point closest to pin 1 of IC1. The other end of the new resistor connects to Arduino RX MODE.
This will retain the data stream select function for IC1 74LS00 but now under control from the new controller.
If needed we can tap into BUSY line on the W6 wire jumper.
+5V and GND power for the Arduino board from underside of CN1. Wire Jumper W7 also holds +5V.
Ideally we should connect the RAW voltage input pin on the Arduino board to the +7 Volt pin on the CN2 power connector on the DIN Board. But this have the risk of creating a ground loop as this connector has a dedicated ground (GND) pin going directly to the PG-200 DIN connector. We better use the ground potential from the DIN Board itself as we connect direcly to the output of IC2.
Early JX3P are missing MIDI Thru, but that simple circuit has no impact on this project.
This puzzle me. According to service manual BUSY line are actually not in use. On main board from connector CN7 it goes through 1K resistor R89 to 5Volt. If this is how it actually are implemented this means JX-3P do not set this (center) pin active
LOW to tell PG-200 its ready to receive data. Have to measure this, but probably just an error in the schematics.
PG-200 Protocol basics by Joakim Tysseng — Xonik Devices.
Organix Inque JX-3P MIDI Expansion kit by Laurens Schilling, new EPROM & add-on SoC NOTE: This is now become a commercial product at River Synths with a rich feature set but at 4 times the initial price.
KIWI upgrade. Nice but expensive CPU replacement. Here you also find the best scan of the service manual.
Your comment are welcome