jackchaos Posted October 18, 2009 Report Share Posted October 18, 2009 (edited) 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 Wooden cabinet construction aided by this diy howto. You Tube demonstration (part 1 of 3) I'm also working on its own wiki here: http://www.midibox.org/dokuwiki/doku.php?id=chaos_matrix Front Panel Express file attached to this post. 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.com/ProtoBoards.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.chaosmatrixpanel.fpdChaosMatrix_beta_0.20091227.7zChaosMatrix_beta_0.20091227.zip Edited April 9, 2010 by jackchaos Quote Link to comment Share on other sites More sharing options...
Janis1279 Posted October 18, 2009 Report Share Posted October 18, 2009 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.com/catalog/635/1091.pdf Quote Link to comment Share on other sites More sharing options...
nILS Posted October 18, 2009 Report Share Posted October 18, 2009 Beautiful work! :-) Quote Link to comment Share on other sites More sharing options...
philetaylor Posted October 18, 2009 Report Share Posted October 18, 2009 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 Quote Link to comment Share on other sites More sharing options...
jackchaos Posted October 19, 2009 Author Report Share Posted October 19, 2009 JanisIt seems so obvious once someone points it out to you.Thank you. It was exactly what I was looking for.NilsThank you kindly. Quote Link to comment Share on other sites More sharing options...
lylehaze Posted October 19, 2009 Report Share Posted October 19, 2009 OOooh, Pretty!Sincere, but short.Keep up the great work!LyleHaze Quote Link to comment Share on other sites More sharing options...
Wilba Posted October 19, 2009 Report Share Posted October 19, 2009 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.org/forum/index.php/topic,6929.msg52071.html#msg52071 Quote Link to comment Share on other sites More sharing options...
jackchaos Posted October 19, 2009 Author Report Share Posted October 19, 2009 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. Quote Link to comment Share on other sites More sharing options...
Wilba Posted October 19, 2009 Report Share Posted October 19, 2009 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. Quote Link to comment Share on other sites More sharing options...
Wilba Posted October 19, 2009 Report Share Posted October 19, 2009 BTW Those switches look really cool. Can you also share details about the switches? i.e. part number, manufacturer, where you bought them. Quote Link to comment Share on other sites More sharing options...
jackchaos Posted October 19, 2009 Author Report Share Posted October 19, 2009 BTW Those switches look really cool. Can you also share details about the switches?I got them from Mouser:http://www.mouser.com/ProductDetail/Mountain-Switch/107-6610/?qs=2H9uEo82DuzZKToJVZPhqw%3d%3dThe 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. Quote Link to comment Share on other sites More sharing options...
DrBunsen Posted October 19, 2009 Report Share Posted October 19, 2009 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. Quote Link to comment Share on other sites More sharing options...
Mark Posted November 3, 2009 Report Share Posted November 3, 2009 Do you think it will work for the Matrix 6? Quote Link to comment Share on other sites More sharing options...
jackchaos Posted November 3, 2009 Author Report Share Posted November 3, 2009 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. Quote Link to comment Share on other sites More sharing options...
julienvoirin Posted December 1, 2009 Report Share Posted December 1, 2009 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 Quote Link to comment Share on other sites More sharing options...
jackchaos Posted December 1, 2009 Author Report Share Posted December 1, 2009 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.mindworks.ee/analog/m1k-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; } Quote Link to comment Share on other sites More sharing options...
julienvoirin Posted December 1, 2009 Report Share Posted December 1, 2009 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 ? Quote Link to comment Share on other sites More sharing options...
jackchaos Posted December 1, 2009 Author Report Share Posted December 1, 2009 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. :) Quote Link to comment Share on other sites More sharing options...
julienvoirin Posted December 1, 2009 Report Share Posted December 1, 2009 (edited) 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 ?) Edited December 19, 2010 by julienvoirin Quote Link to comment Share on other sites More sharing options...
jackchaos Posted December 1, 2009 Author Report Share Posted December 1, 2009 what are the essential controls to put in ? I was more inspired by this monster when it came to the panel design. http://www.vintagesynth.com/oberheim/new_oberheim_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. Quote Link to comment Share on other sites More sharing options...
jackchaos Posted December 6, 2009 Author Report Share Posted December 6, 2009 (edited) Updated the photo on the OP with its new wooden enclosure. I'm getting very close to completing this project. I still have a few things to do. The cabinet was built with oak boards from Lowes. I used the howto here as a reference: http://www.synthesizers.com/diycabinet.html What's left? The electronics need to be mounted inside the wooden enclosure. Rear panel with MIDI & power jacks A MIDI merge has to be built, its necessary for the edit buffer sync feature. The encoder setup isn't perfect, I still get occasional skipping. A few minor software adjustments Edited December 6, 2009 by jackchaos Quote Link to comment Share on other sites More sharing options...
julienvoirin Posted December 6, 2009 Report Share Posted December 6, 2009 Updated the photo on the OP with its new wooden enclosure.really nice I'm getting very close to completing this project. could you publish your beta code ? :P [*] The electronics need to be mounted inside the wooden enclosure.you can use this as threads, it works ! http://www.web-libre.org/medias/img/articles/7d3010c11d08cf990b7614d2c2ca9098-2.jpg [*] Rear panel with MIDI & power jacks [*] A MIDI merge has to be built, its necessary for the edit buffer sync feature.do it on veroboard, the pic 18f452 new code (TK app) is cool and now works with bootloader. it will feet on a very small vero [*] The encoder setup isn't perfect, I still get occasional skipping.DETENTED_TYPE2 ? check your type in main.h, i had similar problems with a custom app Quote Link to comment Share on other sites More sharing options...
julienvoirin Posted December 6, 2009 Report Share Posted December 6, 2009 stupid me, why not using the MIOS integrated merge function ? you put it in the Init routine of main.c : C_DECLARATION void MIOS_MIDI_MergerSet(unsigned char mode) DESCRIPTION configures the integrated MIDI merger following Merger IDs are provided: 0x00: MIOS_MIDI_MERGER_DISABLED (merger disabled) 0x01: MIOS_MIDI_MERGER_ENABLED (merger enabled) 0x02: MIOS_MIDI_MERGER_MBLINK_EP (MIDIbox Link End Point) 0x03: MIOS_MIDI_MERGER_MBLINK_FP (MIDIbox Link Forwarding Point) Quote Link to comment Share on other sites More sharing options...
jackchaos Posted December 6, 2009 Author Report Share Posted December 6, 2009 (edited) stupid me, why not using the MIOS integrated merge function ? you put it in the Init routine of main.c : C_DECLARATION void MIOS_MIDI_MergerSet(unsigned char mode) DESCRIPTION configures the integrated MIDI merger following Merger IDs are provided: 0x00: MIOS_MIDI_MERGER_DISABLED (merger disabled) 0x01: MIOS_MIDI_MERGER_ENABLED (merger enabled) 0x02: MIOS_MIDI_MERGER_MBLINK_EP (MIDIbox Link End Point) 0x03: MIOS_MIDI_MERGER_MBLINK_FP (MIDIbox Link Forwarding Point) How so? I need two MIDI inputs. One for a keyboard controller or sequencer, the other is for the Matrix 1000 (this is how I get edit buffer sync to work). The midi out goes back to the Matrix 1000. Edited December 6, 2009 by jackchaos Quote Link to comment Share on other sites More sharing options...
julienvoirin Posted December 6, 2009 Report Share Posted December 6, 2009 ok , it is to get the edit buffer ... i though it was for plugging a keyboard and routing the notes to M1000 why not using MIOS32 which have 2 MIDI i/o ? MIDI i/o A goes to your computer (or your midi machines) MIDI i/o B goes to M1000 most of C code can be easily adapted to (and it seems your are very confident with coding) M1000 has Echo function i believe , doesn't it ? i will think to a solution but I am at work now, it is hard to concentrate ... stay tuned Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.