a synthesizer enthusiast in the need for your help here
I am trying to understand how to send appropriate serial messages to a synthesizer (Roland JX3P) in order to emulate the behaviour of a rare and expensive nowadays hardware Roland developed in the mid '80s.
The hardware (PG200) was intended as an interface to send tone parameters to the synth in order to create new sounds out of it.
The protocol has just been studied and valuable info are available. Unfortunately I could not get in touch with the original author.
In a nutshell:
messages are 9 bit unpaired
messages are inverted before be sent
a start message has to be sent for the synth to see them as valid
The UART of the AVR Arduinos is able to send 9bit data. The drawback: The Serial object (HardwareSerial) doesn't support it. You'd have to write your own code for this.
messages are inverted before be sent
Seems to be a simple hardware inverter.
a start message has to be sent for the synth to see them as valid
Thank you for your answer. Unfortunately I have no idea on how to rewrite hardware serial library (I am a "basic" user, not that advanced).
I have seen an old Gammon library for 9 bit messages: would it be of some use?
I really need some insight on the form of such messages...
I have seen an old Gammon library for 9 bit messages: would it be of some use?
Sure, but I would apply the patch to a current version of the HardwareSerial class to get all the bug fixes from the last years.
I really need some insight on the form of such messages...
The linked pages should give you enough inside of the form of such messages. But you cannot use the print() and println() methods of the Stream class as they don't support 9bit characters. Use the write() method for every character sent.
As Barito has pointed out, the hard work has already been done by Xonik (The MPG-200) in analysing the protocol. He/she seems to have been able to implement the functionality in their MPG-200 product also.
How has your tinkering gone Barito? I wonder if it might be worth pooling resources and getting an open-source git repository going for this?
One open question in my mind is what the JP-3X sees as low and high voltage? See the pin-out described by Xonik:
1: -15V
2: +15V
3: +7V
4: GND
5: TX
6: Busy
Looking at the PG200 circuit diagram it looks like there is a 5V regulator... That makes me hopeful that we could just use Arduino Uno's 5v UART Tx..
Another thing of not in the PG200 service manual is that that PG200 doesn't use UART, but signals directly from the CPU. I'm a serial noob so I'm not 100% sure if this is important yet but it could be. It sounds a bit closer to bit banging than traditional serial communication..
Another thing of not in the PG200 service manual is that that PG200 doesn't use UART, but signals directly from the CPU. I'm a serial noob so I'm not 100% sure if this is important yet but it could be. It sounds a bit closer to bit banging than traditional serial communication..
On the Arduino the RX/TX signals are directly from the CPU and there they use UART hardware and not bit-banging.
Oh, and you don’t need the power lines +/-15, 7) if you intend to power the Arduino elsewhere, but you could possibly use the 7v and a 5v reg to power the Arduino, that’s where I get my power from.
I've been keeping an eye on this thread and who better to pop in?
My attempt hasn't even hit the breadboard yet. Have a couple of other things to get out the door first.
That said, I've been thinking about it and specifically that inverted signal. Given you say,
I use the built in uart and the inversion is done in hardware if I remember correctly
I'm wondering why you wouldn't do the inversion in software?
My guess is that this isn't something covered in the arduino serial libraries therefor the hardware options is simplest? I say this only having glanced at posts on the topic, not really looked at the libraries.
owley83:
That said, I've been thinking about it and specifically that inverted signal. Given you say, I'm wondering why you wouldn't do the inversion in software?
My guess is that this isn't something covered in the arduino serial libraries therefor the hardware options is simplest? I say this only having glanced at posts on the topic, not really looked at the libraries.
Looking at the schematic for the PG200 (service manual for the JX-3P / PG200 is available online), the original circuit has the output from the CPU driving a transistor, which then drives the signal to the synthesizer. Replicating the original transistor circuit will give you the inversion, and will provide the original output characteristics at the same time. Its unlikely you would be able to directly connect an output from the arduino to the synthesizer, so some type of interface would be necessary anyway.
owley83:
Another thing of note in the PG200 service manual is that that PG200 doesn't use UART, but signals directly from the CPU. I'm a serial noob so I'm not 100% sure if this is important yet but it could be. It sounds a bit closer to bit banging than traditional serial communication..
The PG200 uses an M5L8048 CPU - that chip has no UART, so there was no choice at the time, other than using an external UART chip.