I plan to make a midi controller for a Cheetah MS6 synth.
I’ll use 48 encoders and 32 buttons as inputs (+2 rotary switches) and 41 LEDrings (10 LEDs bargraph) and 46 LEDs as output.
I joint the PDF file: big rectangle=bargraph, little rectangle=button, little circle=LED, big circle=encoder (except the 2 top/left for DCO shapes=rotary switch).
I have 3 questions:
Does the core can handle the 41 LEDrings (I remember a thread speaking of that but I haven’t found it again)?
Is-it possible to mix ledrings and leds into the same DOUTX4 (I think yes but I must be sure)?
Is there any possibility to have 9 extra outputs for LEDs than the standard 128 (it is the reason why I use rotary switch: I’ve replaced button/LED by rotary switch because no more DOUT pin to indicate the state of the parameter)?
if you don’t have programming knowledge, you would have to use a standard firmware such as MIDIbox64E
Yes, it can control up to 64 LEDrings, or 41 LEDrings + 32 LEDs controlled directly from dedicated DOUT pins.
If you need more, you would have to control the LEDs from a matrix (such as LEDrings, where LEDs are connected to a matrix as well)
BUt it’s impossible to add such an option into the existing MB64E application, you would also have to write your own application, which isn’t so difficult if you know C
From that, you could adapt some code (CC instead of SysEx) blocks
I’ve already discovered this beautiful project from jackchaos.
The two synths share the same Curtis chip CEM3396.
I own two MS6 but neither of them works (lacking baterry and PSU problem).
I brought them -a long time ago- to a friend which was suposed to repair them (I am newbie concerning electronic/electricity).
Yes it is CC instead Sysex so I think it will be easier (no buffer …).
My programming problem is that I’ve to know how modify the state of the LED when I push a button (first push: first LED lit (others LEDs turned off) and CC parameter X sent, second push: second LED lit (others LEDs turned off) and CC parameter Y sent, …).
unsigned char LED1;
#define pin 1 // led connected to shift register 1 , second out
/////////////////////////////////////////////////////////////////////////////
//lighting LED
/////////////////////////////////////////////////////////////////////////////
void LED()
{
if (LED1 == 1)
// Note Off
MIOS_DOUT_PinSet(pin, 1);
} else {
MIOS_DOUT_PinSet(pin, 0);
}
}
/////////////////////////////////////////////////////////////////////////////
// This function is called by MIOS when an button has been toggled
// pin_value is 1 when button released, and 0 when button pressed
/////////////////////////////////////////////////////////////////////////////
void DIN_NotifyToggle(unsigned char pin, unsigned char pin_value) __wparam
{
MIOS_MIDI_TxBufferPut(0xb0); // CC at channel #1
MIOS_MIDI_TxBufferPut(pin); // just forward the pin number (0..127)
MIOS_MIDI_TxBufferPut(pin_value ? 0x00 : 0x7f); // = 0x7f when
// button pressed, else 0x00
pin_value++; // you can add a restrictive condition like if x>3 then x = 0 so that it cycle between 0,1,2 values
LED1 = pin_value;
}
LED() function must be in the mainloop (when mios is idle)
le mieux est de coder ton fonctionnement d’algorithme de manière générale et ensuite d’affecter les boutons et les leds à des états de diverses variables : si osc = sin alors led sin osc allumée donc led x allumée (voir le code du chaosmatrix)
begin now to build my PCB (eagles), it will easiest to test the code with?
it is clear that having the controller done first and then coding is the easiest way of making things … If you don’t have an easy way to manufacture PCB, i advise you to get smash tv kits, then build your control surface on veroboard, then link midibox PCB to your control surface with wires, as i did for my Matrix controller. It is the fastest ! take a look in the chaosmatrix tread
btw, it is better to develop the code with a switch(pin) statement in the DIN section. you should have a look in the user project, i had developped a generic keyboard (‘voirinov’)with a 3 states LED controlled by a single push button (1st push = green, second = red, 3rd = yellow)
I’ve already bought and built SmashTV’s core, DIN and DOUT.
Some months ago I’ve made some tests trying to make a control surface but unsuccessful with LED feedback (but I’ve no spent enought time to debug).
I must take time and restart little by little from the begining .
Now I have to modify my frontpanel because I must comply with the 1000dm3 restrictions of goldphoenix’s for the PCB, passing the frontpanel from 6U to 5U and resolve this problem of only 2 extra LED outputs I have to find (removing 2 LEDrings maybe?).
i’ll be happy to help you (despite my few free time), i did not imagine you were so advanced in the project
concerning your PCB, i really advise you to integrate shift registers (74HC595 and 165) in the design, on the backside for example, even in CMS (SMD). Another solution to bypass goldphoenix size is to create 2 PCBs (10U !) linked by a cable like those in scsi (50 contacts) or IDE Hardrives
i did not imagine you were so advanced in the project
There’s several years I knew the project midibox of Thorsten and thinked about create my own midi control surface but the fact I was newbie was an obstacle.
One day I say myself: go! So I’ve bought all I need to build my project (soldering iron, multimeter, SmashTV’s PCB, encoders…).
i really advise you to integrate shift registers (74HC595 and 165) in the design
Of course!
on the backside for example, even in CMS (SMD).
I plan to integrate all the composants in the top of the PCB. Is-it possible(I should have a space of 9,3 mm between the pannel and the PCB)?
to create 2 PCBs (10U !)
I don’t need so much space!
I have modified my frontpanel to comply 5U.
This project includes:
49 encoders, 30 buttons, 2 rotary switchs (AIN module with differents resistors), 39 LEDrings (bargraph of 10 LEDs) and 48 LEDs.
All the parameters of the Maad’s firmware will be directly accessible.
I have completed by 7 extra encoders and 6 buttons (4X DINX4 module full).
imo this won’t be easy as there should be lots of tracks, especially for leds (regarding your front panel design)
the trick is the backside (think to resistors …) like in monome, or sandwich (Wilba)
sharing your pcb routing would give answers
nebula designed a CS based on CMS ; don’t be afraid about cms, they are rather easy to solder when you know the trick (adding some flux before soldering ; desoldering is another story)
Am I too ambitious to thinking all the components will go on only one PCB?
In my opinion –> no
there is a trick to bypass this problem : include simple DIL connectors on the back of your Control Surface PCB (repense au cable nappe IDE), then connected with flat cables to a “patch” PCB, then connected to regular DIN/DOUT
advantages :
-this way you limit the risk of errors as you work on 3 small PCB instead of a big one,
-you can do cross patching if you made mistakes in your eagle routing, as you just have to remake a flat cable between ''patch PCB" and DOUT/DIN modules. This limited the spaghetti stuff too !. This as been used on Arduinome project (arduinome shield with sparkfun buttons
cons :
not ultra clean like a wilba seq
you can call me if you want me to explain how i imagine the stuff
best regard
PS : if you aren’t confident with eagle, i advise you to build on veroboard. i did this with 16 encoders, including the DINx4 on the back, using coloured flat wires : cheap, fast, easy, rather clean