[PROJECT] 8x8 (16x16) MIDI control true summing matrix mixer

From circuitbending to homebrew stompboxes & synths, keep the DIY spirit alive!

Moderators: Kent, Joe., luketeaford, lisa

User avatar
av500
Super Deluxe Wiggler
Posts: 1754
Joined: Mon Feb 02, 2015 8:11 am
Contact:

[PROJECT] 8x8 (16x16) MIDI control true summing matrix mixer

Post by av500 » Sat May 23, 2015 2:31 pm

UPDATE: 8x8 mixer PCBs finished and working, see more details on page 2

Image

Image

Image

Hi there,

inspired by the pin matrix in EMS Synthis, I'm working on a MIDI controlled matrix mixer. Unlike the (unmodified) EMS matrix, this one is fully buffered and true summing, meaning that audio signals and CVs are added up correctly. Also this is not just a crosspoint switch as in some existing devices, here one can route any input signal to any output at the same time.

I have a first set of 8x10cm PCBs that hold the mixing fabric and which allow for a 16x16 matrix when fully populated. currently I soldered the components for a 4x4 matrix and this seems to work so far. I also have the PCB layout ready for a 5x5cm sized 8x8 matrix which I have not fabbed yet. a second PCB will hold the digital part with MIDI in and whatever other UI functions. currently this is just a small STM32 dev board wired in.

The 16x16 matrix could even fit inside an EMS Synthi right behind the real matrix or it could be wired in via the Prestopatch connector for a MIDI-fied Synthi - though I am sure that's pretty close to heresy :)

The switch fabric PCB is all SMT with SO and TSSOP components and resistors down to 0402, it can be soldered by hand though I had help from a stereo microscope to do so.

my current test setup looks like this:

Image

and here is an example of summing the first four fourier components of a square wave - 4th input signal not shown as I don't have a 5-channel scope :)

Image

besides the 8 input and 8 output jacks I want to put an LED push buttons for each input and output. Holding down one input button would light up the LEDs on the output side, showing to which output channel this input is routed to. Pressing an output button while still holding down the input button would them toggle this connection, allowing to change the routing. same for holding down an output button, it would show what inputs are routed to that output and allow to toggle each state.

input and output channels could also be muted by a double click on the respective button and blinking the LED to indicate muted state.

I have not decided yet on what control signals I will put, MIDI, USB host/device and or RS232 control, currently I am switching manually through the debug UART on the CPU board.

Regards,

Vladimir
Last edited by av500 on Sat May 21, 2016 5:47 am, edited 3 times in total.

User avatar
emeb
Common Wiggler
Posts: 206
Joined: Mon Jul 13, 2009 12:35 pm
Location: Mesa, Arizona

Post by emeb » Sat May 23, 2015 2:37 pm

Nice project - looking forward to seeing the rest of the panel working.

User avatar
daverj
Vintage Video Wiggler
Posts: 8514
Joined: Fri Jun 19, 2009 11:09 am

Post by daverj » Sat May 23, 2015 3:02 pm

When you say "true summing", you mean unity gain mixing? ie: if two inputs are at +5v the output is at +10v?

If so, the problem is that you will be clipping signals that are in the +/-5v input range once you go past two inputs mixed together, since your mixed outputs can't go beyond the power rails. (at least when mixing signals that are asynchronous to each other, rather than phased harmonics like in your scope pic)

Other than that, sounds like a cool project. And I really like the button/LED idea. That's a great way to show status and make changes.

User avatar
av500
Super Deluxe Wiggler
Posts: 1754
Joined: Mon Feb 02, 2015 8:11 am
Contact:

Post by av500 » Sat May 23, 2015 3:07 pm

daverj wrote:When you say "true summing", you mean unity gain mixing? ie: if two inputs are at +5v the output is at +10v?
If so, the problem is that you will be clipping signals that are in the +/-5v input range once you go past two inputs mixed together, since your mixed outputs can't go beyond the power rails. (at least when mixing signals that are asynchronous to each other, rather than phased harmonics like in your scope pic)
correct, 5+5=10 :)

I could add a row of input attenuators in the inputs, but yes there are limitations.
daverj wrote:
Other than that, sounds like a cool project. And I really like the button/LED idea. That's a great way to show status and make changes.
thanks

old gregg
Common Wiggler
Posts: 176
Joined: Sun Mar 17, 2013 9:19 am

Post by old gregg » Sun May 24, 2015 2:15 pm

very interesting project !

how do you plan to use midi to control the matrix ?

User avatar
av500
Super Deluxe Wiggler
Posts: 1754
Joined: Mon Feb 02, 2015 8:11 am
Contact:

Post by av500 » Mon May 25, 2015 3:07 am

old gregg wrote:very interesting project !

how do you plan to use midi to control the matrix ?
actually, I have no idea, I'm a bassist :)

I am pretty new to the modular synth scene and I don't even have a system to plug this into right now. I am open to suggestions how to handle the MIDI side besides SYSEX save/recall of the matrix state.

I will put an RS232 serial connection as well, so it can be used for any kind of "automation" purposes

User avatar
Dave Kendall
Set The Controls . . .
Posts: 1230
Joined: Thu Jul 16, 2009 7:20 am
Location: England

Post by Dave Kendall » Mon May 25, 2015 6:53 am

Very interesting project ! :)

daverj makes a good point, but wasn't the danger of overload present in the original EMS matrix anyway ?
There ought to be a way to avoid the opamps risking latch-up when approaching rail voltages - voltage limiting with zeners maybe? perhaps in combination with rail-to-rail opamps, although the latter may add significantly to the build cost. . .

For real-time editing over MIDI, an easy way would be to use four unassigned regular MIDI CCs on a chosen (user-selectable) channel - eg #28, #29, #30, #31. Values for each controller would control each of the 256 matrix points' ON or OFF status, so for example;

CC#28 VALUE = O = MATRIX POINT no. 0 = OFF
CC#28 VALUE = 1 = MATRIX POINT no. 0 = ON
CC#28 VALUE = 2 = MATRIX POINT no. 1 = OFF
. . . . . . .

CC#29 VALUE = O = MATRIX POINT no. 64 = OFF

and so on up to. . .

CC#31 VALUE = 127 = MATRIX POINT no. 255 = ON

This way, the total byte count when sending a *single* message to set a matrix point's status would be less than using SYS-EX - only 3 bytes, so enabling/disabling a matrix point *whilst a track is running* is more efficient with MIDI bandwidth. For bulk dumps/loads, if running status is implemented, the byte count would be about the same as SYS-EX, but more if running status is not implemented. But bulk dumps are usually offline processes, so not a worry.

But using regular MIDI CCs means that most control surfaces, sequencers and even some workstation keyboards could be set up to control it. Not all MIDI controllers have the ability to send SYS-EX or even NRPNs, particularly older devices, and likely some newer ones can't do that either.

If there was also a way to save the entire matrix state to 127 onboard memories and recall them with MIDI PGM changes, that would be awesome.
Add dedicated RECALL and STORE buttons and a way of selecting memory locations, and I'd marry it and have its babies :)

cheers,
Dave
Want to Buy: KURZWEIL KSP8

"Everything in moderation, including moderation"

Jack Gull
Wiggling with Experience
Posts: 338
Joined: Sun Jan 26, 2014 11:46 am
Location: Italy

Post by Jack Gull » Mon May 25, 2015 8:44 am

* edit because i totally misunderstood the previous post *
Last edited by Jack Gull on Mon May 25, 2015 9:11 am, edited 1 time in total.

User avatar
av500
Super Deluxe Wiggler
Posts: 1754
Joined: Mon Feb 02, 2015 8:11 am
Contact:

Post by av500 » Mon May 25, 2015 8:53 am

Dave Kendall wrote:Very interesting project ! :)
thanks :)
daverj makes a good point, but wasn't the danger of overload present in the original EMS matrix anyway ?
No because the EMS matrix is averaging and not true summing
There ought to be a way to avoid the opamps risking latch-up when approaching rail voltages - voltage limiting with zeners maybe? perhaps in combination with rail-to-rail opamps, although the latter may add significantly to the build cost. . .
I'm not so much afraid about latch-up, the opamps should just saturate at some voltage close to the rails. It's the standard 14-pin quad opamp package so there is a wide variety of opamps to chose from.
For real-time editing over MIDI, an easy way would be to use four unassigned regular MIDI CCs on a chosen (user-selectable) channel - eg #28, #29, #30, #31. Values for each controller would control each of the 256 matrix points' ON or OFF status, so for example;

CC#28 VALUE = O = MATRIX POINT no. 0 = OFF
CC#28 VALUE = 1 = MATRIX POINT no. 0 = ON
CC#28 VALUE = 2 = MATRIX POINT no. 1 = OFF
. . . . . . .

CC#29 VALUE = O = MATRIX POINT no. 64 = OFF

and so on up to. . .

CC#31 VALUE = 127 = MATRIX POINT no. 255 = ON

This way, the total byte count when sending a *single* message to set a matrix point's status would be less than using SYS-EX - only 3 bytes, so enabling/disabling a matrix point *whilst a track is running* is more efficient with MIDI bandwidth. For bulk dumps/loads, if running status is implemented, the byte count would be about the same as SYS-EX, but more if running status is not implemented. But bulk dumps are usually offline processes, so not a worry.

But using regular MIDI CCs means that most control surfaces, sequencers and even some workstation keyboards could be set up to control it. Not all MIDI controllers have the ability to send SYS-EX or even NRPNs, particularly older devices, and likely some newer ones can't do that either.
here I'm basically open to anything, the people that do actually stuff with MIDI control need to tell me how they like to control this thing. Running status is not a problem, I have that already working for my MIDI2CV module Also, it's "just" software, so it can be flexible :)
If there was also a way to save the entire matrix state to 127 onboard memories and recall them with MIDI PGM changes, that would be awesome.
sounds doable
Add dedicated RECALL and STORE buttons and a way of selecting memory locations, and I'd marry it and have its babies :)

cheers,
Dave
Ah, didn't think of that, but yes. one easy way would be to add a SAVE and a RECALL button and use the 8+8 buttons as the memory locations. if more than 16 locations are needed we need to come up with some other mechanism.

Jack Gull
Wiggling with Experience
Posts: 338
Joined: Sun Jan 26, 2014 11:46 am
Location: Italy

Post by Jack Gull » Mon May 25, 2015 9:17 am

now that i've re-read everything more carefully...
just a couple of thoughts...
1) very nice. :D i've been toying with a simillar idea for some time (about the same time the ericasynth matrix mix came out, then i paused everything)
2) to me the simplest approach would be using midi notes for editing... if i undestood it correctly you basically have a 8x8 "pin" matrix like in the EMS synths, so you would need 8x8=64 "pins" to connect every input to every output.
press note 0 to connect in 1 to out 1. press note 0 again to disconnect it
note 1 to in 1, out 2
note 2 to in 1, out 3
and so on.

User avatar
av500
Super Deluxe Wiggler
Posts: 1754
Joined: Mon Feb 02, 2015 8:11 am
Contact:

Post by av500 » Mon May 25, 2015 9:43 am

Jack Gull wrote:now that i've re-read everything more carefully...
just a couple of thoughts...
1) very nice. :D i've been toying with a simillar idea for some time (about the same time the ericasynth matrix mix came out, then i paused everything)
thanks :)

yes, the Erica uses very similar technology.
2) to me the simplest approach would be using midi notes for editing... if i undestood it correctly you basically have a 8x8 "pin" matrix like in the EMS synths, so you would need 8x8=64 "pins" to connect every input to every output.
press note 0 to connect in 1 to out 1. press note 0 again to disconnect it
note 1 to in 1, out 2
note 2 to in 1, out 3
and so on.
the EMS has a 16x16 matrix so 256 possible pins. in that case using notes would not be enough. for a 8x8 matrix this doable of course, but I cannot judge how practical it is

Jack Gull
Wiggling with Experience
Posts: 338
Joined: Sun Jan 26, 2014 11:46 am
Location: Italy

Post by Jack Gull » Mon May 25, 2015 9:47 am

well i was just describing the principle.
to me this is the easiest approach.

maybe because ALL grids control surfaces send note on/offs ;)

User avatar
av500
Super Deluxe Wiggler
Posts: 1754
Joined: Mon Feb 02, 2015 8:11 am
Contact:

Post by av500 » Mon May 25, 2015 9:50 am

Jack Gull wrote:well i was just describing the principle.
to me this is the easiest approach.

maybe because ALL grids control surfaces send note on/offs ;)
since this module has no real notes to play anyway, I'm happy to add note on/off

User avatar
av500
Super Deluxe Wiggler
Posts: 1754
Joined: Mon Feb 02, 2015 8:11 am
Contact:

Post by av500 » Mon May 25, 2015 9:55 am

double post

Jack Gull
Wiggling with Experience
Posts: 338
Joined: Sun Jan 26, 2014 11:46 am
Location: Italy

Post by Jack Gull » Mon May 25, 2015 10:21 am

my point was that
- you only need to switch on or off that particular channel
- if you look at what most popular control surfaces do, at least all akais and novations use this convention (note on-off) to describe the pushbutton element.
i also find that pressing a note to activate this or that out is much more immediate than calculate a specific number for a cc... or using 64 different CCs :)

User avatar
av500
Super Deluxe Wiggler
Posts: 1754
Joined: Mon Feb 02, 2015 8:11 am
Contact:

Post by av500 » Mon May 25, 2015 11:23 am

Jack Gull wrote:my point was that
- you only need to switch on or off that particular channel
- if you look at what most popular control surfaces do, at least all akais and novations use this convention (note on-off) to describe the pushbutton element.
i also find that pressing a note to activate this or that out is much more immediate than calculate a specific number for a cc... or using 64 different CCs :)
Got your point. as said above I am pretty new to all this, so pardon my ignorance :despair:

User avatar
Dave Kendall
Set The Controls . . .
Posts: 1230
Joined: Thu Jul 16, 2009 7:20 am
Location: England

Post by Dave Kendall » Mon May 25, 2015 11:41 am

No because the EMS matrix is averaging and not true summing
Sorry - my bad there.

There's a danger in using MIDI notes to switch the matrix points on and off. As well as precluding using NOTE ON and OFF from a keyboard to play something like a synthi using the matrix (which would be a very useful option), you could easily screw things up when inadvertently sending the matrix MIDI NOTE info intended for another device on the same MIDI cable.
IMO, it's best to leave NOTES for what they're intended in the MIDI spec.

Many CCs are undefined - they'd be ideal, as they are unlikely to interfere with other units using several CCs. Most control surfaces can specify CCs' behaviours I believe. Looking at MIDI mode in my ageing Yamaha 03/D, it would be easy to set up 8 x 8 matrix control using all 4 User Def locations. In a software controller, it should be dead easy.

You only need 4 CCs to switch all 256 points in a 16 x 16 matrix. If you omit CC's #32-63 which are the LSBs for CCs #0-31, you still have well over 80 CCs available, as well as NOTE ON/OFF, AFTERTOUCH and PITCH BEND on the same MIDI channel, so with a bit of juggling and multiple DACs and extra hardware, a single MIDI channel could probably control all parameters of something like a synthi :)

cheers,
Dave
Want to Buy: KURZWEIL KSP8

"Everything in moderation, including moderation"

User avatar
av500
Super Deluxe Wiggler
Posts: 1754
Joined: Mon Feb 02, 2015 8:11 am
Contact:

Post by av500 » Mon May 25, 2015 1:17 pm

both CC and note ON/OFF control can be implemented in parallel and selected by a jumper if needed :)

User avatar
av500
Super Deluxe Wiggler
Posts: 1754
Joined: Mon Feb 02, 2015 8:11 am
Contact:

Post by av500 » Tue May 26, 2015 4:34 am

and here is a version with LOAD/SAVE buttons added.

Image

button samples arrived from China today, so I made a little board to mount them:

Image

Image

User avatar
av500
Super Deluxe Wiggler
Posts: 1754
Joined: Mon Feb 02, 2015 8:11 am
Contact:

Post by av500 » Wed May 27, 2015 10:58 am

and after drilling some holes a day later:

Image

User avatar
daverj
Vintage Video Wiggler
Posts: 8514
Joined: Fri Jun 19, 2009 11:09 am

Post by daverj » Wed May 27, 2015 12:27 pm

Those are interesting buttons. Do you have a part number/manufacturer, or a data sheet?

Jack Gull
Wiggling with Experience
Posts: 338
Joined: Sun Jan 26, 2014 11:46 am
Location: Italy

Post by Jack Gull » Wed May 27, 2015 1:28 pm

+1

also a photo of the illuminated buttons?

User avatar
av500
Super Deluxe Wiggler
Posts: 1754
Joined: Mon Feb 02, 2015 8:11 am
Contact:

Post by av500 » Wed May 27, 2015 3:06 pm

daverj wrote:Those are interesting buttons. Do you have a part number/manufacturer, or a data sheet?
here you go: http://www.khan.cn/product_read.asp?id=579

User avatar
av500
Super Deluxe Wiggler
Posts: 1754
Joined: Mon Feb 02, 2015 8:11 am
Contact:

Post by av500 » Wed May 27, 2015 3:07 pm

Jack Gull wrote:+1

also a photo of the illuminated buttons?
not yet wired up, hopefully tomorrow.

Jack Gull
Wiggling with Experience
Posts: 338
Joined: Sun Jan 26, 2014 11:46 am
Location: Italy

Post by Jack Gull » Wed May 27, 2015 4:04 pm

where did you get those? directly from them or by a supplier (mouser/digikey/...)
i'm on the phone right now and thore are surely not mobole friendly websites :hihi:

Post Reply

Return to “Music Tech DIY”