Jump to content


Photo
- - - - -

Chaos Matrix


  • Please log in to reply
68 replies to this topic

#1 jackchaos

jackchaos

    MIDIbox Addict

  • Members
  • PipPip
  • 105 posts
  • LocationIndiana

Posted 18 October 2009 - 16:12

I'm announcing my project here which is currently still under development.

The Chaos Matrix is a control surface and programmer for an Oberheim Matrix 1000 synthesizer. It uses a Core, 1 DIN, 1 DOUT and 1 AIN module. Its loaded with MIOS v1.9c on a PIC18F4620 microprocessor along with a custom application built with the C skeleton interface.

Current Status as of 04/08/2010:
- Rear panel with MIDI & power jacks
- Software is complete, sourcecode attached to this post.
- How-To currently being documented


Posted Image
Wooden cabinet construction aided by this diy howto.


You Tube demonstration (part 1 of 3)
part 2 of 3
part 3 of 3

I'm also working on its own wiki here:
http://www.midibox.o...id=chaos_matrix

Front Panel Express file attached to this post.
Posted Image


First, I want to thank Thorsten Klose and all the forum regulars who have contributed their time and talents to the community. Without them, I would have never started building something like this.

Now back to the Chaos Matrix.

Some of you know about how nice these classic synths sound, especially ones using Curtis chips. Unfortunately the Oberheim Matrix 1000 (which is very affordable) offers no way to create your own patches without the use of an editor/librarian on a PC.
So, building a programmer like this brings new life to the synth, allowing me to take full advantage of its awesome matrix modulation capabilities.


Parts Question:(answered)
I have searched unsuccessfully for a panel mount jack for my wall wart power supply. It would have to be round since I can only drill round holes in the rear of the enclosure. I'm using a standard 9volt power adapter with a round plug.
Can someone point me to a part like this at Mouser? I don't even know what to call them.

Stripboard Question:
I'm using some of these strip boards bought from SmashTV and Futurelec:
http://www.futurlec....otoBoards.shtml
I would like to protect the exposed copper on the underside. Is there something I can paint or spray to seal the copper from being exposed to the air?

Wiki Question:(answered)
I would like to post the Front Panel Express file on the wiki, but I've not seen an option of how to do so.
Can I upload small file attachments to the wiki?

Regards,
-Patrick Manderson

Attached source files in 7z and zip format.

Attached Files


Edited by jackchaos, 09 April 2010 - 21:50.


#2 Janis1279

Janis1279

    MIDIbox Addict

  • Members
  • PipPip
  • 245 posts
  • LocationRiga, Latvia

Posted 18 October 2009 - 17:51

Parts Question:
I have searched unsuccessfully for a panel mount jack for my wall wart power supply. It would have to be round since I can only drill round holes in the rear of the enclosure. I'm using a standard 9volt power adapter with a round plug.
Can someone point me to a part like this at Mouser? I don't even know what to call them.

http://www.mouser.co...og/635/1091.pdf

#3 nILS

nILS

    MIDIbox Hero

  • Administrators
  • 4,261 posts
  • LocationStuttgart, Doucheland

Posted 18 October 2009 - 18:57

Beautiful work! :-)

#4 philetaylor

philetaylor

    MIDIbox Guru

  • Frequent Writer
  • PipPipPipPip
  • 824 posts
  • LocationLeicester, UK

Posted 18 October 2009 - 20:19

Hi.

You need to be given permission to upload files, If you want to email it to me then I can upload it for you. Otherwise you could just attach it to a forum post and link to that :)

Phil


#5 jackchaos

jackchaos

    MIDIbox Addict

  • Members
  • PipPip
  • 105 posts
  • LocationIndiana

Posted 19 October 2009 - 02:47

Janis
It seems so obvious once someone points it out to you.
Thank you. It was exactly what I was looking for.

Nils
Thank you kindly.



#6 lylehaze

lylehaze

    MIDIbox Guru

  • Programmer
  • PipPipPipPip
  • 612 posts
  • LocationVirginia, United States

Posted 19 October 2009 - 03:51

OOooh, Pretty!

Sincere, but short.
Keep up the great work!

LyleHaze

#7 Wilba

Wilba

    MIDIbox Hero

  • Administrators
  • 3,291 posts
  • LocationMelbourne, Australia

Posted 19 October 2009 - 04:45

Fantastic job!

I just read the wiki, good to see you're documenting how it was built...

Your two step process for gluing the screws is great, but did you notice a difference between applying more JB-Weld in a second step instead of doing this at the same time as the initial gluing of the screw?

BTW this method isn't mine, I was inspired by Rigo: http://www.midibox.o...1.html#msg52071



#8 jackchaos

jackchaos

    MIDIbox Addict

  • Members
  • PipPip
  • 105 posts
  • LocationIndiana

Posted 19 October 2009 - 12:40

did you notice a difference between applying more JB-Weld in a second step instead of doing this at the same time as the initial gluing of the screw?


Wilba.
I used only the 2 step procedure documented in the wiki. I didn't try it any other way.

BTW, what's the consensus of JB-Welding on anodized (black painted) surface, vs scratched anodized vs, bare aluminum? I got lost in the forums and wasn't sure what to do. I left the surface as it was and only cleaned it.



#9 Wilba

Wilba

    MIDIbox Hero

  • Administrators
  • 3,291 posts
  • LocationMelbourne, Australia

Posted 19 October 2009 - 16:53

I had poor results with some bare aluminium scraps I had, but good results with the black anodized aluminium from FPE.

I was told by someone that aluminium forms some oxidized surface as soon as you roughen it, making it hard to stick to, but I don't know the technical details of that. Some people had better results by scratching the surface... it probably depends on the type of anodized aluminium. The 1.5mm black anodized panels I got from FPE are dark grey metallic on the back, whereas the 3mm black anodized panels were the same on both sides. Both types seemed to work fine with JB-Weld without any roughening.



#10 Wilba

Wilba

    MIDIbox Hero

  • Administrators
  • 3,291 posts
  • LocationMelbourne, Australia

Posted 19 October 2009 - 16:57

BTW Those switches look really cool. Can you also share details about the switches? i.e. part number, manufacturer, where you bought them.



#11 jackchaos

jackchaos

    MIDIbox Addict

  • Members
  • PipPip
  • 105 posts
  • LocationIndiana

Posted 19 October 2009 - 17:30

BTW Those switches look really cool. Can you also share details about the switches?


I got them from Mouser:
http://www.mouser.co...uzZKToJVZPhqw==

The black button cap wobbles and can be pulled off and snapped back on. I wish they wern't as wobbly. I will be sure to demonstrate them when I make a video.



#12 DrBunsen

DrBunsen

    MIDIbox Guru

  • Members
  • PipPipPipPip
  • 977 posts

Posted 19 October 2009 - 19:30

I was told by someone that aluminium forms some oxidized surface as soon as you roughen it, making it hard to stick to, but I don't know the technical details of that.


Pure aluminium is highly reactive.  In the real world, aluminium is so durable precisely because of this reactivity - it instantly forms a layer of aluminium oxide as soon as it is exposed to the air.  This layer protects the pure aluminium underneath from the elements - and apparently from adhesives as well.

#13 Mark

Mark

    MIDIbox Newbie

  • Members
  • Pip
  • 1 posts

Posted 03 November 2009 - 22:25

Do you think it will work for the Matrix 6?

#14 jackchaos

jackchaos

    MIDIbox Addict

  • Members
  • PipPip
  • 105 posts
  • LocationIndiana

Posted 03 November 2009 - 23:02

Do you think it will work for the Matrix 6?


I don't have a Matrix 6 to test on. However, the sysex specification is identical except for a few things.

  • The M6 supports dual voice splits and layering, the M1000 is monotimbral.
  • I'm writing specific workarounds in the software to accomodate firmware bugs in the M1000. I don't believe they exist in the M6.
If you're looking for a handy way to adjust parameters on the M6 for under $150, you could get by with a Behringer BCR2000 MIDI controller if you're willing to invest some time creating it sysex encoder maps yourself.
Regards,
Patrick Manderson

Chaos MatrixBox
http://www.midibox.o...hp?id=jackchaos

#15 julienvoirin

julienvoirin

    MIDIbox Guru

  • Programmer
  • PipPipPipPip
  • 775 posts
  • LocationFrance Paris-Belfort

Posted 01 December 2009 - 04:16

Dear Jackaos
this is a very interesting project as i own 2 matrix6 + 1 M1000


As i wanted to develop a control surface for them, i am very interesting how you manage SysEx as i don't understand well what to put in MIOS_MIDI_TxBufferPut()

Would you publish same extracts of your code ?

Best regards

#16 jackchaos

jackchaos

    MIDIbox Addict

  • Members
  • PipPip
  • 105 posts
  • LocationIndiana

Posted 01 December 2009 - 13:04

Dear Jackaos
this is a very interesting project as i own 2 matrix6 + 1 M1000

As i wanted to develop a control surface for them, i am very interesting how you manage SysEx as i don't understand well what to put in MIOS_MIDI_TxBufferPut()

Would you publish same extracts of your code ?

Best regards


I would recommend getting a hold of this:
http://wolzow.mindwo...k-midi-spec.htm
it covers everything, including the firmware bugs and undocumented sysex opcodes.
It also includes documentation on sending patch parameter changes.

I've read that the Matrix 6 has a poor sysex implementation and is a bit broken, you might try looking it up before starting.

I'm very close to completing the software for my project and will upload it svnmios.midibox.org.

Below are the two main MIDI routines.


void MIDI_SendVoiceParam(unsigned char param, unsigned char value)
{

	MIOS_MIDI_BeginStream();
	MIOS_MIDI_TxBufferPut(0xf0); // begin sysex header
	MIOS_MIDI_TxBufferPut(0x10); // mfg
	MIOS_MIDI_TxBufferPut(0x06); // device
	MIOS_MIDI_TxBufferPut(0x06); // voice parameter byte

	// transmit the parameter number
	MIOS_MIDI_TxBufferPut(param);

	//transmit the new value
	MIOS_MIDI_TxBufferPut(value);

	MIOS_MIDI_TxBufferPut(0xf7);
	MIOS_MIDI_EndStream();

}


void MIDI_SendMatrixModParam(unsigned char mmbus, unsigned char mmsrc, unsigned char mmdest, unsigned char value)
{
	MIOS_MIDI_BeginStream();
	MIOS_MIDI_TxBufferPut(0xf0); // begin sysex header
	MIOS_MIDI_TxBufferPut(0x10); // mfg
	MIOS_MIDI_TxBufferPut(0x06); // device
	MIOS_MIDI_TxBufferPut(0x0b); // matrix mod parameter byte

	MIOS_MIDI_TxBufferPut(mmbus);
	MIOS_MIDI_TxBufferPut(mmsrc);
	MIOS_MIDI_TxBufferPut(value);  // all matrix mod values are 7 bit signed
	MIOS_MIDI_TxBufferPut(mmdest);

	MIOS_MIDI_TxBufferPut(0xf7);
	MIOS_MIDI_EndStream();
}


When you send a value, make sure its in proper range, because the M-1000 will go silent if its way off.
I use potentiometers for most parameters except the matrix modulation bus, where I use an encoder.

The potentiometers require a conversion from 10 to 7bit. Then you have to scale the value down and convert it if it needs to be an signed value.

unsigned char getvalue(unsigned char pin)
{
    unsigned char value;

    // scale 10bit to 7bit value between min and max boundary
    value = Scale_7bit(MIOS_AIN_Pin7bitGet(pin), PotConfigMap[pin].min, PotConfigMap[pin].max);

    // convert values for signed parameters
    switch (PotConfigMap[pin].valtype)
    {
        case SIGNED7:
            value = Convert_7bit_Signed(value);
        break;

        case SIGNED6:
            value = Convert_6bit_Signed(value);
        break;

        default : break;
    }

    return value;
}

////////////////////////////////////////////////////////////////////////////
// This is an assembly optimized function which scales a 7bit value between
// a minimum and maximum value
/////////////////////////////////////////////////////////////////////////////
unsigned char Scale_7bit(unsigned char value, unsigned char min, unsigned char max)
{
  // scaled value is (<8-bit random> * ) >> 8
  PRODL = value << 1; // 8bit value
  PRODH = max-min+1;  // range
__asm
    movf _PRODL, W
    mulwf _PRODH, 0
__endasm;

  return min + PRODH;
}


// converts a pots 7 bit pot value  to a signed 7 bit with zero at center position
unsigned char Convert_7bit_Signed(unsigned char value) {

	return  (value + 0x40) & 0x7f;
}


// converts a pots 7 bit pot value to a signed 6 bit with zero at center position
unsigned char Convert_6bit_Signed(unsigned char value) {

	return (value + 0x60) & 0x7f;
}



Regards,
Patrick Manderson

Chaos MatrixBox
http://www.midibox.o...hp?id=jackchaos

#17 julienvoirin

julienvoirin

    MIDIbox Guru

  • Programmer
  • PipPipPipPip
  • 775 posts
  • LocationFrance Paris-Belfort

Posted 01 December 2009 - 18:37

Dear JackChaos
this is really a good job you performed there :D
Just can't wait to see the rest of the code

Would you be interested by a dedicated control surface PCB fitting in a 3U rack ?

#18 jackchaos

jackchaos

    MIDIbox Addict

  • Members
  • PipPip
  • 105 posts
  • LocationIndiana

Posted 01 December 2009 - 20:24

Would you be interested by a dedicated control surface PCB fitting in a 3U rack ?


Not sure what you mean.
My design is 24 inchest wide and wouldn't fit. The control surface electronics are made with a few small prototype boards to hold the buttons. The pots are mounted directly to the aluminum panel.

Are you saying you have a PCB for a control surface? Post a picture, we love pics around here. :)
Regards,
Patrick Manderson

Chaos MatrixBox
http://www.midibox.o...hp?id=jackchaos

#19 julienvoirin

julienvoirin

    MIDIbox Guru

  • Programmer
  • PipPipPipPip
  • 775 posts
  • LocationFrance Paris-Belfort

Posted 02 December 2009 - 00:40

Are you saying you have a PCB for a control surface ?

not yet

Were you inspired by the Access Programmer or personal experience with control softwares for the choice of the parameters ? I ask that to start the design of the CS (what are the essential controls to put in ?)

Attached Files


Edited by julienvoirin, 19 December 2010 - 03:58.


#20 jackchaos

jackchaos

    MIDIbox Addict

  • Members
  • PipPip
  • 105 posts
  • LocationIndiana

Posted 02 December 2009 - 00:58

what are the essential controls to put in ?


I was more inspired by this monster when it came to the panel design.
http://www.vintagesy...berheim_obx.jpg


Download the FrontPanel Express file attached to the original post, you can see which controls I decided to dedicate to a pot or button. All the other controls are accessed through the soft panel (lower half).
On my wiki, you can see a photo of the prototype... which had a LOT more dedicated controls. I later decided to simplify it.
Regards,
Patrick Manderson

Chaos MatrixBox
http://www.midibox.o...hp?id=jackchaos




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users