Chaos Matrix

70 posts in this topic

Some news

I've worked during long nights to enhance the ChaosMatrix application. The hardest has been to understand all the philosophy of the original firmware. It's a good philosophy, well documented and there are some fun tricks.

So now it has :

- Bankstick support. Up to 8 BS of 32KB, each contains 100 patches. Possibility to save patch into bankstick and recall them later. Still possibility to save into Matrix1000.

from that :

- Naming of patch is possible (2nd page of EDIT), name is stored into bankstick with the parameters of the patch (in fact EditBuffer[0,1,2,3,4,5,6,7] is stored as in Matrix6)

- Internal router : possibility to route incoming midi signals to 4 IIC modules output, each one deriving its midi channel from the midi channel mentioned in PATCH menu (e.g channel 2 on IIC1, channel 3 on IIC2, channel 4 on IIC3, channel 5 on IIC4, midichannel set up is channel 2 in PATCH). By editing device.h, you still can force midi signal to default core midi out (replace 0x12, 0x14, 0x16, 0x10 by 0x00). Possibility to edit up to 4 Matrix using a single ChaosMatrix.

- single patch dump from Matrix1000 : possibility to store a single patch from a Matrix 1000 to a bankstick memory (last page of PATCH menu). Memory location is defined by the encoder.

to improve :

- Bank dump : possibility to get a full Bank of 100 patches from the Matrix 1000 directly stored into one BS. Doesn't work except for 1st patch. Don't know if the dump goes too fast for the algorythm or if the algorythm is not good.

-arpegiator : it arpégiates !! UP motif for the moment, works in beta0.53 but still in test. Arpegiator needs an extra button called DIN_ARP, or code must be moved (move ui_arp.c in ui_patch.c for example)

Rq :

if using an ultracore, remove ALL jumpers for IIC

u069 indicates user Bankstick 0, patch 69

m000 indicate patch 000 on the matrix1000

A special BIG UP to JackChaos, TK and Bill as i've used some of their code blocks

[edit : post edit due to bug in code ; now WORK :shifty: ]

MatrixBoxSource_JV_beta v0.53.zip

Edited by julienvoirin

Share this post

Link to post
Share on other sites

dear julienvoirin

thats a perfect job!

is it a 3u rack panel?

do you think if it's possible to fit the sound-engine of matrix 1000 into the same rack-box?

thank you

Share this post

Link to post
Share on other sites

I agree, Nice work Julien.

Does the Arpeggiator work?

Share this post

Link to post
Share on other sites

Matrix1000 can't fit the same rack as it is too deep

it is a 3U rack

for the moment i work on the firmware, especially a good manner to get back the matrix 6 patches (it doesn't have the same sysex system as the matrix 1000, but it has the patchname :rolleyes:

the arpegiator works, but you need a normal midi keyboard (i mean, note on AND note off , 0x90 & 0x80) as my roland Juno2 doesn't do the job for example( only note on, note off are produced as note on with a velocity null).

i am still working on the arp code, as today you can change arp speed (from 1/32 to several bars)

need to implement octave, other pattern like updown and maybe "swing"

once firmware rather well developed, i will do a real PCB -not veroboard with wires- (or not, i still do not know)

Share this post

Link to post
Share on other sites

demo of the arpegiator using 1/16 sync speed and 2 bars sync speed

it sends midi clock and start message to the drummachine

next step : external sync clock

MatrixBoxSource_JV_beta v0.62.zip

Edited by julienvoirin

Share this post

Link to post
Share on other sites

You're officially in the 'fun phase' of development.

Share this post

Link to post
Share on other sites

Because you have the hardware working and you have the development environment working. As long as you still have flash ROM available, you can make it do whatever you want! That's the fun part.

Share this post

Link to post
Share on other sites
MatrixBoxSource_JV_beta changelog


arp patterns updown1, updown 2

hold function in arp + sustain pedal msg

hold function in arp

arp.c : optimise against ghost notes, stackflush,

mclock.c : clean code with more comprehensive var & fcts

multieditbuffer (enough memory ?)

beta 0.80 :

ARP now automatically synced to external MIDI beat clock.

BPM shown as "EXT" in this case. Beat LED automaticcally beating at external tempo while receiving external MIDI beat clock.

Heartbeat LED moved to SHIFT Led for easier handling.

bug fixes :

tempo ranged 49-251 without artifacts

no more 0xf8 event on I2C outputs

beta 0.71 :

3200 patches memories (8x100x4) : needs 8 BS of 64K

autonaming of patch while getting them from Matrix1000 (bank 200-900)

bug correction :

encoder increment & decrement patch normally

minors enhancements in display

beta 0.62 :

supports non standard midi note off messages (e.g from Roland Juno2 alpha)

up & down motif in arp, tested and working :)

beta 0.61 :

code optimised for compatibility with Matrix 6

previous versions :

initial relaease

any help welcome :thumbsup:

code size = 50 KBytes !!

MatrixBoxSource_JV_beta v0.80_ext_clk.zip

Edited by julienvoirin

Share this post

Link to post
Share on other sites

Dear Julien,

I bought a matrix 1000 and i would like to built the controler

I know that i need :

-Pic Core module

-1x AIN

-1x DIN

-1x DOUT

-1x I2C module

But i don't know how did you connect the DIN, DOUT , AIN on your Pot, Switch and Led

Could you please tell me how do you do ?

Thank you


Share this post

Link to post
Share on other sites

hi xaro

the easiest is to get :

an Ultracore (as you will need 8 bankstick and I2C)

one DINx4 module from smash tv

one DOUTx4 "

4 analog multiplexer CD4051 (as you will solder them on the control surface containing pots ans switches)

Things are connected as in midibox64. Unused analog inputs are clamped to ground.

Then din, dout and pots are defined in the application :

din.c & din.h

pots.c and pots.h

numbers refer to http://svnmios.midibox.org/filedetails.php?repname=svn.mios&path=%2Ftrunk%2Fdoc%2Fmios%2Fmios_din_dout_pin_numbers.txt


Has to be filled in (DIN_ConfigMap[32])

The dins need to be listed in order that correspond to their pin number in the array. And of course each entry must point to the the DOUT pin for its corresponding LED.

din.h has a few of the pins in din.c #defined to improve code readability wherever its used. So make sure anything in din.h that starts off with #define DIN_ or #define DOUT_


Rearrange the entries in PotConfigMap[] to correspond to their pin positions.

Then edit the #define POT_OSC1_***, POT_FILTER***, etc. in pots.h to match their config in pots.c

i followed jackchaos design, i only defined different pin numbers in order to simplify my building (shorter wires and copper). i also add some more buttons ans leds to enhance functions.

have a look and come back if needed.


Edited by julienvoirin

Share this post

Link to post
Share on other sites

thx for zour fast answer

I already have the Ultracore but how did you connect the matrix 1000 in Midi?

Midi In MX1000 to Midi Out Core

Midi Out MX1000 to Midi In Core

Keyboard out to Midi In I2C

is it good like this ?

An other thing .

Why, in your din.h file do you define two time the DOUT pin 4. once for DOUT_DCO2_CLICK and the second for DOUT_DCO2_NOISE

Is it the same Led?

Edited by xarolium

Share this post

Link to post
Share on other sites

i do not use the midi out of Matrix (no handshake). i only plug the i2c out to their midi in

the only one time you will get midi data from Matrix is when you will save its presets in the bankstick

ultracore uses its core midi in (receive midi notes, program change, CC, clock and forward them to I2C) and core midi out (program change, clock ...)

Is it the same Led?

yep, check Matrix 6 user manual

Share this post

Link to post
Share on other sites

Hello peeps!

Did anyone ever successfully get this project working with a Matrix 6?

The question's been asked a couple of times before in this thread, and other than a nod towards using a Behringer controller, very little was said..

I've got some old MB cores lying around from my SID-making days (successful they were too!), and I want to build a controller surface into the top of my Matrix 6 keyboard..

Best wishes,


Share this post

Link to post
Share on other sites

it does, but the code needs extra sysex if i will remember.

my last code includes the M6 feature.

now my opinion : editing the Matrix is OK, but automation can't be used in any DAW as the Matrix CPU is definitly too slow to avoid jitter effect. for example a filter sweep is awful.

so considering the time to build it, it is finally more easier to simply use a software control like M1000-X.

Share this post

Link to post
Share on other sites

I really want to build a dedicated hardware controller for my M1000. I have little to no experience but I got time and people around me that can help. I'm in an electronic workshop at my university where we learn the absolut basics. Trying to do some circuit bendings and stuff.

Would it be a stupid idea to try build a fully Chaos Matrix? Do I need any other knowledge beside following the links and content on the Chaos wiki page?


If I would try to build a more humble controller with just, say about 20 knobs that I assign to the most important stuff to tweak existing patches. No saving, no lcd display etc. Can you point me to the right direction of what I need? Parts, similar projects, articles... Any tips would make my day!

I've seen a lot of diy midi controller kits and got really exited. But I seems they just for sending CC. A lot of diy DJ controllers for ableton etc. Can't find one that is designed for sending sysex strings. Or maybe I got it wrong, not realizing all these controlls can send sysex but no one is using it that way?


I could just get a BCR2000, but I want my own organized and designed panel. And I want to learn for future projects.




Edited by Pitir

Share this post

Link to post
Share on other sites

Welcome here!


For the MIDIbox part of the controller universe, you might want to look at the MB NG. It runs on the LPC17 core (much more powerful than the PIC core used in the Chaos Matrix) and can be configured to handle SysEx messages rather easily. Storage is done via SD cards.


It is surely going to be more expensive than a used BCR2000, but you will be able to configure it exactly as you want.


Do some reading and come back with more detailed questions here.


Good luck, ilmenator

Share this post

Link to post
Share on other sites

Thanks! Will look into the MB NG!

Yes, the price isn't whats trigger me to build one. I want to made a good looking dedicated controller, designed och configurated as I want :)

Share this post

Link to post
Share on other sites

if you want to really and only control Oberheim Matrix, you MUST build a matrix controller and not a generic one. definitly a great tool that helps me regularly to create new patch

Share this post

Link to post
Share on other sites

Hi all,  I just discovered this site and am way impressed.   I'm the owner of a Matrix-6 that I bought new in 1985 and have been dreaming of a dedicated knobby controller for it forever.   I have a Mackie C4 that I use now but it's a real hassle to have to fire up the computer and everything to get it going and it doesn't have a stand alone mode so taking it on the road is more complicated (I don't use a laptop live).


Anyhow, I'm thrilled to have found this project and hope I can get to building one myself.   I've still got a lot to learn about how to get the whole midibox thing up and running but, I was able to program embedded controllers at one point of my life so I'm sure I'll be able to figure it out again.


My thoughts are to make something that sits on the keyboard, perhaps held in place with magnets or something like that.   I would love to have it have that old Oberheim look.  Does anyone know a source for the buttons that Oberheim used on the older synths like the OBx?  They're the same ones that the Access programmer has.  


Don't know when I'll get started but again, really cool project!

Edited by Andy Birko

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now