Phatline Posted December 8, 2014 Report Posted December 8, 2014 (edited) TekkStar formerly "Tama Techstar 306"https://vimeo.com/113875738 once in the 80ś this was a brainless Drumexpander for Electronic Drum Kits... 30years later it gets a brain, no sequencing @ all, but note processing, and with note processing you can do a lot by doing less... wile a korg electribe rythm is sequencing, you can takt that and Kill, invert, roll, reroute, Offsets the notes and make trigger out of it... this drumexpander is velocity sensitive that meens, i could use a AOUT Board for this.... BUT i think that is a little bit overkill --- i decidet to take a DINX4, change the Resistors and make a 4Stage Veloctiy Trigger. I know that is enough because, i have already programmed a groovebox in max msp, that uses 3 Velocitys (3 Colours in the button matrix) - so 4 of it- enough... A AOUT board is still a plan - but not for trigger, - more for a VCA and VCF @ the Master > from my livesetup with other drumachines, i saw that it is very "doing less sounding much" if you can change the Release time of the Master --- by trigger a VCA (the trigger is selectable)... and VCF -without words! As you see this Case holds: 4 Analog Tom - Board 1 Analog Synth -Board 1 Analog Clap -Board -a Mixboard, which i dont use anymore, i need place for 2xDoutX4 and a DinX4! From Behind, already installed: The Core, and a modified DOUTX4 Board, A Core-Powerswitch (to reboot), and a PowerConnect where before was a Cable. Finding the best Resistor Values for the DoutX4 Board, by using 5K Trimpots As you see I used 4 Off it, so one Trigger has 4 Velocity-Stages. After finding the correct Values, and then testing fixed resistors in the near of the Pot Values (by ear), its time to solder a bit... well 2h 40min Later found a place for it, and wired the trigger outputs to the Drumvoices The 7th Board - the "Mix Board" a useless device that do not very much, ok, it makes headphone output a symmetric audio and so on, but how cares, I NEED PLACE for the UI and for the Midibox Boards (DOUTX4 DINX4 and so on), but bevore I had to solder a Adapter, because the Connecter pins are swapping on this board before it goes to the powersupply The Powersupply, supply me with +6VDC, and the coolest: -15 +15VDC!!!! yes I have planes... but The CORE wants 5V, so find a place for a 7805 found it!http://midibox.org/forums/gallery/image/2597-tekkstar_make_021_ps_drill-holesjpg/http://midibox.org/forums/gallery/image/2598-tekkstar_make_022_ps_solderingjpg/http://midibox.org/forums/gallery/image/2600-tekkstar_make_024_ps_donejpg/ The core fits well behind the Trafo, but the Powercord sucks!http://midibox.org/forums/gallery/image/2605-tekkstar_make_029_core-mountingjpg/ Away with that ugly grey chord - a real Power Connector a "Kaltgerätebuchse" - hell yeah!http://midibox.org/forums/gallery/image/2601-tekkstar_make_025_ps_ad-power-connectorjpg/ But hey Core should be shieldet against the trafo, i searched my metal cases, and i found a very soft flexible Metall which is great for such ferromagnetic shielding stuff...http://midibox.org/forums/gallery/image/2603-tekkstar_make_027_ps_core-shieldjpg/ Programming and testing Functions on Prototype Connector Boards "PressFitPCB"http://midibox.org/forums/gallery/image/2610-tekkstar_make_034_ui-program-btn-ledsjpg/ Because the TOM4 Board was Broken "Haarriss" the PCB-was broken, i had to solder something by the way i made my own first mods for this (by looking @ the shematic, which is very good to understand) Edited December 29, 2014 by Phatline Quote
Phatline Posted December 8, 2014 Author Report Posted December 8, 2014 also in desktop-mode nice The trigger input of an drumvoice Solder the Trigger-Cable to this Potentiometer cut the the trace - located behind the switch - right to the led - @the top of the PCB. > this because, the unpluged 6,3er socket is switched to ground - and @ ground - no trigger accours... ... it might be a good idea, to cut remove the Plug to get more free space 4 UI! or a big display, or maybe 16 Buttons 4 a sequencer... well i dont know - time will tell this is short & the hot clue is Chord-Clip again! From TriggerX8 to DoutX4 Huuu the idea I had an idea: rotate the the Routing "Trigger-Matrix" 45° & you have a ergonomic UI for your hands! - You better play it like an instrument then - in theory. lets look in the detail --- ah on every side to the Matrix should be Faders to change Kill, VelocityOffset, VCA-Release & maybe Cutoff now differnt tools - Doing by doing more space 4 Fingers, but way to big 4 this project hmm difficult to play like an instrument but better maybe with "blindenschrift" onit.... well then thats the way... and thats not! (from old SID) http://midibox.org/forums/gallery/image/2630-tekkstar-make-047-ui-matrix-sid-matrix-locost/ The big spacer is to big!!!! the small maybe a bit to small - so i will order 100 small ones, and 100 1mm bigger... http://midibox.org/forums/gallery/image/2628-tekkstar-make-045-ui-matrix-space4plexi/ THATS IT FOR A WHILE... have to order some parts 1 Quote
Phatline Posted December 8, 2014 Author Report Posted December 8, 2014 well this 3rd post will keep the main.c uptodate, the code is simple but may be interesting /* main.c * TekkStar * * build 2 Midimize a Tama Techstar 306 >>> Do something usefull with it... * 4 Velocity per Voice, 8 Voices (6 Drums + 1Filter +1 Amp). * 4 Velocity Depending Note Killswitches * random Note Kill Fader * Velocity Offset Fader * * Hardware: * 1stDOUTX4: 1st Voice: Pin0-3 =Velocity 0-3 (use different Resistor Values) * 2nd Voice: Pin4-7 =Velocity 0-3 (I used: 5K6,4K7,2K2,1K) * .... 8th Voice: Pin28-31 =Velocity 0-3 (Connect together: all 4 Resistors @ Trig-out-side) * 2ndDOUTX4: Pin 32 = Kill-Button-Velocity 3 * Pin 33 = Kill-Button-Velocity 2 * Pin 34 = Kill-Button-Velocity 1 * Pin 35 = Kill-Button-Velocity 0 * Pin 36 = Kill-Button-Velo-Trigger-Indicator3 (easier find which BTNs make Effect...) * Pin 37 = Kill-Button-Velo-Trigger-Indicator2 (...not all 4 Velocitys are always used...) * Pin 38 = Kill-Button-Velo-Trigger-Indicator1 (...sometime you hear nothing...) * Pin 39 = Kill-Button-Velo-Trigger-Indicator0 (...and thats may be not good...) * 3rdDOUTX4: Pin 40 = Gate Indicator 4 Random Kill > Flashes if Notes get killed * Pin 41 = Velocity Invert Button > Inverts the 4 Velocity Stages (lo=hi, hi=lo) * Pin 42 = OverRoll --- Take every incoming Notes and place it on all Triggers * J5 of 8Bit Core: Analog Input 0: random Kill * Analog Input 1: Velocit Offset (0=-64,64=Orginal,127=+64) * * * ========================================================================== * Copyright - Phatline aka Crimic aka GreatFullTekk * Licensed for personal non-commercial use only. All other rights reserved. * ========================================================================== */ ///////////////////////////////////////////////////////////////////////////// //Include files #include <cmios.h> #include <pic18fregs.h> #include "main.h" ///////////////////////////////////////////////////////////////////////////// // VARIABLES --- Global & Local////////////////////////////////////////////// app_flags_t app_flags; // status of app (see bitfield declaration in main.h) unsigned char last_ain_pin; unsigned char last_din_pin; unsigned char last_dout_pin; // Midisetup int CHON; int CHOF; int N0; int N1; int N2; int N3; int N4; int N5; int N6; int N7; // Pots unsigned int random; unsigned int VelOff; unsigned int VelInvert; //Invert the Pins by Velocity spreading.... unsigned int random1; int velocity; int velopin; int KillBtn1; int KillBtn2; int KillBtn3; int KillBtn4; int OverRoll; unsigned char random_seed_l; unsigned char random_seed_h; unsigned int random_tmp; unsigned int random_nr; int rgate; ///////////////////////////////////////////////////////////////////////////// // INITALIZE //////////////////////////////////////////////////////////////// void Init(void) __wparam { MIOS_AIN_NumberSet(7); MIOS_AIN_UnMuxed(); MIOS_AIN_DeadbandSet(7); //DIN DOUT AIN Setup MIOS_SRIO_UpdateFrqSet(1); //set shift register update frequency in ms MIOS_SRIO_NumberSet(9); // we need to set at least one IO shift register pair MIOS_SRIO_DebounceSet(10); //debouncing value for DINs MIOS_SRIO_TS_SensitivitySet(0); // Midisetup (Channels, Note Numbers for Trigger) CHON = 153; //Ch1:90, 2:91, 3:92, 4:93, 5:94, 6:95, 7:96, 8:97, 9:98, 10:153, 11:9A, 12:9B, 13:9C... CHOF = 137; //Ch1:80, 2:81, 3:82, 4:83, 5:84, 6:85, 7:86, 8:87, 9:88, 10:137, 11:8A, 12:8B, 13:8C... N0 = 48; //Note - Input Nr. N1 = 49; N2 = 50; N3 = 51; N4 = 52; N5 = 53; N6 = 54; N7 = 55; velocity = 0; velopin = 0; KillBtn1 = 1; MIOS_DOUT_PinSet(32, 1); KillBtn2 = 1; MIOS_DOUT_PinSet(33, 1); KillBtn3 = 1; MIOS_DOUT_PinSet(34, 1); KillBtn4 = 1; MIOS_DOUT_PinSet(35, 1); OverRoll = 0; random = 0; //Analog In: randomly Kill Notes Events --- 0=0Kill 255=All Kill VelOff = 64; //Shifts Velocity Spreading for the DOUTs (where differnt Resistor Values soldered..) VelInvert = 0; //Invert the Pins by Velocity spreading.... random1 = 0; //1st Kill Function (Operator only -used 4 coding) random_seed_l = 0; random_seed_h = 127; rgate = 1; random_tmp = 64; random_nr = 127; } ///////////////////////////////////////////////////////////////////////////// // This function is called by MIOS in the mainloop when nothing else is to do ///////////////////////////////////////////////////////////////////////////// void Tick(void) __wparam {} ///////////////////////////////////////////////////////////////////////////// // This function is periodically called by MIOS. The frequency has to be // initialized with MIOS_Timer_Set ///////////////////////////////////////////////////////////////////////////// void Timer(void) __wparam {} ///////////////////////////////////////////////////////////////////////////// // This function is called by MIOS when the display content should be // initialized. Thats the case during startup and after a temporary message // has been printed on the screen ///////////////////////////////////////////////////////////////////////////// void DISPLAY_Init(void) __wparam { MIOS_LCD_Clear(); // clear screen MIOS_LCD_CursorSet(0x00); //step2 1st Line MIOS_LCD_PrintCString("TekkStar"); //message 1st Line MIOS_LCD_CursorSet(0x40); //step2 2nd Line MIOS_LCD_PrintCString("GreatFullTekk"); //message 2nd Line } ///////////////////////////////////////////////////////////////////////////// // This function is called in the mainloop when no temporary message is shown // on screen. Print the realtime messages here ///////////////////////////////////////////////////////////////////////////// void DISPLAY_Tick(void) __wparam { // do nothing if no update has been requested if( !app_flags.DISPLAY_UPDATE_REQ ) return; // clear request app_flags.DISPLAY_UPDATE_REQ = 0; } ///////////////////////////////////////////////////////////////////////////// // This function is called by MIOS when a complete MIDI event has been received ///////////////////////////////////////////////////////////////////////////// void MPROC_NotifyReceivedEvnt(unsigned char evnt0, unsigned char evnt1, unsigned char evnt2) __wparam { if(evnt0 == CHOF) { // if note off: force evnt2 to 0 for easier handling of 'LED off' evnt2 = 0; MIOS_DOUT_PinSet(0, 0); //1st DOUT-Shift-Register --- Turn Off MIOS_DOUT_PinSet(1, 0); MIOS_DOUT_PinSet(2, 0); MIOS_DOUT_PinSet(3, 0); MIOS_DOUT_PinSet(4, 0); MIOS_DOUT_PinSet(5, 0); MIOS_DOUT_PinSet(6, 0); MIOS_DOUT_PinSet(7, 0); MIOS_DOUT_PinSet(8, 0); //2nd DOUT-Shift-Register --- Turn Off MIOS_DOUT_PinSet(9, 0); MIOS_DOUT_PinSet(10, 0); MIOS_DOUT_PinSet(11, 0); MIOS_DOUT_PinSet(12, 0); MIOS_DOUT_PinSet(13, 0); MIOS_DOUT_PinSet(14, 0); MIOS_DOUT_PinSet(15, 0); MIOS_DOUT_PinSet(16, 0); //3rd DOUT-Shift-Register --- Turn Off MIOS_DOUT_PinSet(17, 0); MIOS_DOUT_PinSet(18, 0); MIOS_DOUT_PinSet(19, 0); MIOS_DOUT_PinSet(20, 0); MIOS_DOUT_PinSet(21, 0); MIOS_DOUT_PinSet(22, 0); MIOS_DOUT_PinSet(23, 0); MIOS_DOUT_PinSet(24, 0); //4th DOUT-Shift-Register --- Turn Off MIOS_DOUT_PinSet(25, 0); MIOS_DOUT_PinSet(26, 0); MIOS_DOUT_PinSet(27, 0); MIOS_DOUT_PinSet(28, 0); MIOS_DOUT_PinSet(29, 0); MIOS_DOUT_PinSet(30, 0); MIOS_DOUT_PinSet(31, 0); MIOS_DOUT_PinSet(36, 0); //5th DOUT-Shift-Register --- Turn Off (Velo-Split-Indicator) MIOS_DOUT_PinSet(37, 0); //5th DOUT-Shift-Register --- Turn Off (Velo-Split-Indicator) MIOS_DOUT_PinSet(38, 0); //5th DOUT-Shift-Register --- Turn Off (Velo-Split-Indicator) MIOS_DOUT_PinSet(39, 0); //5th DOUT-Shift-Register --- Turn Off (Velo-Split-Indicator) } //random Number Set if(evnt0==CHON) { random_tmp = random_seed_l * random_seed_h; random_seed_l = TMR0L + (random_tmp & 0xff); //TMR0L = Timer random_seed_h = 0x69 + (random_tmp >> 8); random_nr = random_tmp % 127; //>> 2; // divede by 2 > bitshifting - thx2"kpete" } //random Number <= random Poti? if( (evnt0==CHON) && (random < random_nr) ) {rgate = 1; MIOS_DOUT_PinSet(40, 0);}//Pass Notes if( (evnt0==CHON) && (random > random_nr) ) {rgate = 0; MIOS_DOUT_PinSet(40, 1);} //Kill Notes //velocity + velocity offset if(evnt0==CHON) {velocity = evnt2 + (VelOff - 64);} //@64=orginal, @0=velo-64, @127=velo+64 //velocity > spreading 2 DOUT-Pins > split in 4 velocity groups (4Dout Pins, 4 different Resistors) //Normal if((evnt0==CHON) && (velocity < 30) && (VelInvert==0)) {velopin = 0; MIOS_DOUT_PinSet(36, 1);} //1K if((evnt0==CHON) && (velocity > 30) && (velocity < 64) && (VelInvert==0)) {velopin = 1; MIOS_DOUT_PinSet(37, 1);} //2K2 if((evnt0==CHON) && (velocity > 64) && (velocity < 96) && (VelInvert==0)) {velopin = 2; MIOS_DOUT_PinSet(38, 1);} //4K7 if((evnt0==CHON) && (velocity > 90) && (VelInvert==0)) {velopin = 3; MIOS_DOUT_PinSet(39, 1);} //5K6 //Pins Inverted / swapped if((evnt0==CHON) && (velocity < 30) && (VelInvert==1)) {velopin = 3; MIOS_DOUT_PinSet(39, 1);} //LED: Indicates Trigger - easier to find Effectiv Killbutton... if((evnt0==CHON) && (velocity > 30) && (velocity < 64) && (VelInvert==1)) {velopin = 2; MIOS_DOUT_PinSet(38, 1);} if((evnt0==CHON) && (velocity > 64) && (velocity < 96) && (VelInvert==1)) {velopin = 1; MIOS_DOUT_PinSet(37, 1);} if((evnt0==CHON) && (velocity > 90) && (VelInvert==1)) {velopin = 1; MIOS_DOUT_PinSet(36, 1);} //Trigger1 Detection - random Gate - Velocity set - Kill Pins - Overroll if( (evnt0==CHON) && ((evnt1==N0) || (OverRoll==1)) && (rgate==1) && (velopin==3) && (KillBtn1==1) ) {MIOS_DOUT_PinSet(0, 1);} //1.Trigger, 1.Velociy if( (evnt0==CHON) && ((evnt1==N0) || (OverRoll==1)) && (rgate==1) && (velopin==2) && (KillBtn2==1) ) {MIOS_DOUT_PinSet(1, 1);} //1.Trigger, 2.Velociy if( (evnt0==CHON) && ((evnt1==N0) || (OverRoll==1)) && (rgate==1) && (velopin==1) && (KillBtn3==1) ) {MIOS_DOUT_PinSet(2, 1);} //1.Trigger, 3.Velociy if( (evnt0==CHON) && ((evnt1==N0) || (OverRoll==1)) && (rgate==1) && (velopin==0) && (KillBtn4==1) ) {MIOS_DOUT_PinSet(3, 1);} //1.Trigger, 2.Velociy //Trigger2 Detection - random Gate - Velocity set - Kill Pins if( (evnt0==CHON) && ((evnt1==N1) || (OverRoll==1)) && (rgate==1) && (velopin==3) && (KillBtn1==1) ) {MIOS_DOUT_PinSet(4, 1);} //1.Trigger, 1.Velociy if( (evnt0==CHON) && ((evnt1==N1) || (OverRoll==1)) && (rgate==1) && (velopin==2) && (KillBtn2==1) ) {MIOS_DOUT_PinSet(5, 1);} //1.Trigger, 2.Velociy if( (evnt0==CHON) && ((evnt1==N1) || (OverRoll==1)) && (rgate==1) && (velopin==1) && (KillBtn3==1) ) {MIOS_DOUT_PinSet(6, 1);} //1.Trigger, 3.Velociy if( (evnt0==CHON) && ((evnt1==N1) || (OverRoll==1)) && (rgate==1) && (velopin==0) && (KillBtn4==1) ) {MIOS_DOUT_PinSet(7, 1);} //1.Trigger, 2.Velociy //Trigger3 Detection - random Gate - Velocity set - Kill Pins if( (evnt0==CHON) && ((evnt1==N2) || (OverRoll==1)) && (rgate==1) && (velopin==3) && (KillBtn1==1) ) {MIOS_DOUT_PinSet(8, 1);} //1.Trigger, 1.Velociy if( (evnt0==CHON) && ((evnt1==N2) || (OverRoll==1)) && (rgate==1) && (velopin==2) && (KillBtn2==1) ) {MIOS_DOUT_PinSet(9, 1);} //1.Trigger, 2.Velociy if( (evnt0==CHON) && ((evnt1==N2) || (OverRoll==1)) && (rgate==1) && (velopin==1) && (KillBtn3==1) ) {MIOS_DOUT_PinSet(10, 1);} //1.Trigger, 3.Velociy if( (evnt0==CHON) && ((evnt1==N2) || (OverRoll==1)) && (rgate==1) && (velopin==0) && (KillBtn4==1) ) {MIOS_DOUT_PinSet(11, 1);} //1.Trigger, 2.Velociy //Trigger4 Detection - random Gate - Velocity set - Kill Pins if( (evnt0==CHON) && ((evnt1==N3) || (OverRoll==1)) && (rgate==1) && (velopin==3) && (KillBtn1==1) ) {MIOS_DOUT_PinSet(12, 1);} //1.Trigger, 1.Velociy if( (evnt0==CHON) && ((evnt1==N3) || (OverRoll==1)) && (rgate==1) && (velopin==2) && (KillBtn2==1) ) {MIOS_DOUT_PinSet(13, 1);} //1.Trigger, 2.Velociy if( (evnt0==CHON) && ((evnt1==N3) || (OverRoll==1)) && (rgate==1) && (velopin==1) && (KillBtn3==1) ) {MIOS_DOUT_PinSet(14, 1);} //1.Trigger, 3.Velociy if( (evnt0==CHON) && ((evnt1==N3) || (OverRoll==1)) && (rgate==1) && (velopin==0) && (KillBtn4==1) ) {MIOS_DOUT_PinSet(15, 1);} //1.Trigger, 2.Velociy //Trigger5 Detection - random Gate - Velocity set - Kill Pins if( (evnt0==CHON) && ((evnt1==N4) || (OverRoll==1)) && (rgate==1) && (velopin==3) && (KillBtn1==1) ) {MIOS_DOUT_PinSet(16, 1);} //1.Trigger, 1.Velociy if( (evnt0==CHON) && ((evnt1==N4) || (OverRoll==1)) && (rgate==1) && (velopin==2) && (KillBtn2==1) ) {MIOS_DOUT_PinSet(17, 1);} //1.Trigger, 2.Velociy if( (evnt0==CHON) && ((evnt1==N4) || (OverRoll==1)) && (rgate==1) && (velopin==1) && (KillBtn3==1) ) {MIOS_DOUT_PinSet(18, 1);} //1.Trigger, 3.Velociy if( (evnt0==CHON) && ((evnt1==N4) || (OverRoll==1)) && (rgate==1) && (velopin==0) && (KillBtn4==1) ) {MIOS_DOUT_PinSet(19, 1);} //1.Trigger, 2.Velociy //Trigger6 Detection - random Gate - Velocity set - Kill Pins if( (evnt0==CHON) && ((evnt1==N5) || (OverRoll==1)) && (rgate==1) && (velopin==3) && (KillBtn1==1) ) {MIOS_DOUT_PinSet(20, 1);} //1.Trigger, 1.Velociy if( (evnt0==CHON) && ((evnt1==N5) || (OverRoll==1)) && (rgate==1) && (velopin==2) && (KillBtn2==1) ) {MIOS_DOUT_PinSet(21, 1);} //1.Trigger, 2.Velociy if( (evnt0==CHON) && ((evnt1==N5) || (OverRoll==1)) && (rgate==1) && (velopin==1) && (KillBtn3==1) ) {MIOS_DOUT_PinSet(22, 1);} //1.Trigger, 3.Velociy if( (evnt0==CHON) && ((evnt1==N5) || (OverRoll==1)) && (rgate==1) && (velopin==0) && (KillBtn4==1) ) {MIOS_DOUT_PinSet(23, 1);} //1.Trigger, 2.Velociy //Trigger7 Detection - random Gate - Velocity set - Kill Pins if( (evnt0==CHON) && ((evnt1==N6) || (OverRoll==1)) && (rgate==1) && (velopin==3) && (KillBtn1==1) ) {MIOS_DOUT_PinSet(24, 1);} //1.Trigger, 1.Velociy if( (evnt0==CHON) && ((evnt1==N6) || (OverRoll==1)) && (rgate==1) && (velopin==2) && (KillBtn2==1) ) {MIOS_DOUT_PinSet(25, 1);} //1.Trigger, 2.Velociy if( (evnt0==CHON) && ((evnt1==N6) || (OverRoll==1)) && (rgate==1) && (velopin==1) && (KillBtn3==1) ) {MIOS_DOUT_PinSet(26, 1);} //1.Trigger, 3.Velociy if( (evnt0==CHON) && ((evnt1==N6) || (OverRoll==1)) && (rgate==1) && (velopin==0) && (KillBtn4==1) ) {MIOS_DOUT_PinSet(27, 1);} //1.Trigger, 2.Velociy //Trigger8 Detection - random Gate - Velocity set - Kill Pins if( (evnt0==CHON) && ((evnt1==N7) || (OverRoll==1)) && (rgate==1) && (velopin==3) && (KillBtn1==1) ) {MIOS_DOUT_PinSet(28, 1);} //1.Trigger, 1.Velociy if( (evnt0==CHON) && ((evnt1==N7) || (OverRoll==1)) && (rgate==1) && (velopin==2) && (KillBtn2==1) ) {MIOS_DOUT_PinSet(29, 1);} //1.Trigger, 2.Velociy if( (evnt0==CHON) && ((evnt1==N7) || (OverRoll==1)) && (rgate==1) && (velopin==1) && (KillBtn3==1) ) {MIOS_DOUT_PinSet(30, 1);} //1.Trigger, 3.Velociy if( (evnt0==CHON) && ((evnt1==N7) || (OverRoll==1)) && (rgate==1) && (velopin==0) && (KillBtn4==1) ) {MIOS_DOUT_PinSet(31, 1);} //1.Trigger, 2.Velociy } ///////////////////////////////////////////////////////////////////////////// // This function is called by MIOS when a MIDI event has been received // which has been specified in the MIOS_MPROC_EVENT_TABLE ///////////////////////////////////////////////////////////////////////////// void MPROC_NotifyFoundEvent(unsigned entry, unsigned char evnt0, unsigned char evnt1, unsigned char evnt2) __wparam {} ///////////////////////////////////////////////////////////////////////////// // This function is called by MIOS when a MIDI event has not been completly // received within 2 seconds ///////////////////////////////////////////////////////////////////////////// void MPROC_NotifyTimeout(void) __wparam {} ///////////////////////////////////////////////////////////////////////////// // This function is called by MIOS when a MIDI byte has been received ///////////////////////////////////////////////////////////////////////////// void MPROC_NotifyReceivedByte(unsigned char byte) __wparam {} ///////////////////////////////////////////////////////////////////////////// // This function is called by MIOS before the shift register are loaded ///////////////////////////////////////////////////////////////////////////// void SR_Service_Prepare(void) __wparam {} ///////////////////////////////////////////////////////////////////////////// // Shiftregister has been loaded? ///////////////////////////////////////////////////////////////////////////// void SR_Service_Finish(void) __wparam {} ///////////////////////////////////////////////////////////////////////////// // Buttons has toggled? // pin_value is 1 when button released, and 0 when button pressed ///////////////////////////////////////////////////////////////////////////// void DIN_NotifyToggle(unsigned char pin, unsigned char pin_value) __wparam { //Toggle Kill-Switches & Kill-LEDs if(pin == 0 && pin_value == 0){KillBtn1 =! KillBtn1;} //toggle if(KillBtn1 == 0){MIOS_DOUT_PinSet(32, 0);} if(KillBtn1 == 1){MIOS_DOUT_PinSet(32, 1);} if(pin == 1 && pin_value == 0){KillBtn2 =! KillBtn2;} //toggle if(KillBtn2 == 0){MIOS_DOUT_PinSet(33, 0);} if(KillBtn2 == 1){MIOS_DOUT_PinSet(33, 1);} if(pin == 2 && pin_value == 0){KillBtn3 =! KillBtn3;} //toggle if(KillBtn3 == 0){MIOS_DOUT_PinSet(34, 0);} if(KillBtn3 == 1){MIOS_DOUT_PinSet(34, 1);} if(pin == 3 && pin_value == 0){KillBtn4 =! KillBtn4;} //toggle if(KillBtn4 == 0){MIOS_DOUT_PinSet(35, 0);} if(KillBtn4 == 1){MIOS_DOUT_PinSet(35, 1);} if(pin == 4 && pin_value == 0){VelInvert =! VelInvert;} //toggle if(VelInvert == 0){MIOS_DOUT_PinSet(41, 0);} if(VelInvert == 1){MIOS_DOUT_PinSet(41, 1);} if(pin == 5 && pin_value == 1){OverRoll = 0;} //Momentary if(OverRoll == 0){MIOS_DOUT_PinSet(42, 1);} if(pin == 5 && pin_value == 0){OverRoll = 1;} //Momentary if(OverRoll == 0){MIOS_DOUT_PinSet(42, 0);} MIOS_LCD_Clear(); // clear screen MIOS_LCD_CursorSet(0x00); //step2 1st Line MIOS_LCD_PrintBCD3(pin); //message 1st Line MIOS_LCD_CursorSet(0x40); //step2 2nd Line MIOS_LCD_PrintBCD3(pin_value); //message 2nd Line } ///////////////////////////////////////////////////////////////////////////// // Encoder has Mooved? // incrementer is positive when encoder has been turned clockwise, else // it is negative ///////////////////////////////////////////////////////////////////////////// void ENC_NotifyChange(unsigned char encoder, char incrementer) __wparam {} ///////////////////////////////////////////////////////////////////////////// // Potentiometer has Mooved? ///////////////////////////////////////////////////////////////////////////// void AIN_NotifyChange(unsigned char pin, unsigned int pin_value) __wparam { random = MIOS_AIN_Pin7bitGet(0); VelOff = MIOS_AIN_Pin7bitGet(1); } Quote
Phatline Posted December 9, 2014 Author Report Posted December 9, 2014 (edited) Paint it Black - to avoid reflections of the Acrylic Overlay. 6Ours or so later (cant say... 2 evenings) I cant help - I am in love The hardware for the TRIGGER-MATRIX-PART is done Well a bit to big... I have to replace 2 Potentiometers of the Clap-Section to the bottum (where is place). even if i mount it 90° there is not enoug place (because of 2Faders left and right to the Matrix) but big is good for my big fingers :phone: Edited December 14, 2014 by Phatline Quote
Phatline Posted December 14, 2014 Author Report Posted December 14, 2014 Wired & Programmed if you want the stripped down 8Bit LED-8x8-Matrix Code go there: but it was a long way... after days i plugged the Matrix off, and Plugged two of these on: very good for debugging and codeing... yes and then it worked!!!!!!!!!!! YEAAAAA https://vimeo.com/114452009 (ground hum from webcam...) Quote
Phatline Posted December 25, 2014 Author Report Posted December 25, 2014 (edited) need place for the midibox stuff plug and play resistor socket for Matrix leds (150Ohm is to dark) make a resistor plug plugged in --- here 100Ohm and still to dark LED hole for Trigger Matrix --- dremel died lcd hole... made by hand (dremel is dead) lcd, menu encoder and analog trigger led the digitall inner Fully digitally stuffed Edited December 29, 2014 by Phatline Quote
Phatline Posted December 25, 2014 Author Report Posted December 25, 2014 (edited) MODs off the Analog PartMono-Mode (All Modules): if you just need 1 channel, it is a good idea, to remove follwing resistors to reduce Humming(alot): TomModule: Rm ClapModule: R360 SynthModule: R266 Why mono? Maybe you send the main to a mono vcf and vca? thats what i do...and this mode reduce the humming by my machine about half.SYNTH-MODULE:OverTone 1: solder a 470K Resistor paralell to R258(which isorginally also 470K) that overdrives the input of IC209Overtone/Drive 2: R210 (200K) solder 100K parallel to > doubles the loudness and gives some overtones. You may try a pot... but dont forget to solder a savety-Reistor (dont know 1K) in series... to avoid to much current on the ics and Resistor (but i have noticed the board is very moding save...)Deeper Tune: turn the R223 1K Trimpot to most left...The Big BOOOOM: solder a 470K Resistor in series with a switch parallel to D203CLAP-Module:Very long Reverb time: Replace R306 with an 1MOhm Linear Pot then replace the useless "Reverb-time"Pot "VR32" with fixed 2x 47K Resistors (the pot is 100K and u can use it for other mods!!!)HiPassFilter: Replace R342 with a 1K5 Resistor in Series with a 100K Potentiometer---- take that one that you have left from the "Very long Reverb time"-Mod!Make Place: Remove Plugs for Trigger, Pad, Each-out, and cut away the PCB, like in the picture, then: solder that little bridge over that Capacitor- that you see on the pictureBASIC-Module (TOM):Distortion: R52 (470K)---replace it with an 470K Linear Pot.(Kick:808>909>Square) or replace it with an 220K Linear Pot. so it overdrives all the time a bit (Kick: 909>Square) >If you do this mod, dont change R56(10K) elswhere you will gett crackling< A bit Louder: R56(10K) parallel soldering a 6K8>8K thatdoubles the Volume, which you need if you dont have the Mixing board, that may blow up the Volume @main.... but that mode may crackle if you have made the Distortion mod... so let it be... The Big Booooooooom: Decay long to EVER-OPEN: by parallel soldering a 100K to D5 - it is a good idea to make switch for that (so long that it humms)Deeper Tune: Bridge R6! Emphasis Filter Frequency: (or is this Resonance?) Replace Rh by an 100K log pot in series with an 100K resistor, with 47K you get in self resonance...also 56K is in this shitty sound... better take a 100K TrimPot! Pinout of the Pot: when you look from the top of the 100K pot (where you turn) then take first 2 Pins (negativ log) let the 3rd Leg open If you dontneed the Attack-Pot (what is the trigger signal, in the signal path)then take that, by isolating the pins from the pcb, and do like above... ---I noticed that the lower frequencys are cut off a bit...better take a greater Resistance 470K or 1M! Changing the cap "CFm": let em out, give some really extrem high eardammage frequencys! holy for Highats! --let them out and solderm the 2 open leads to 2 contantacts at the frontpanel--- with your finger you can do some lopassfiltering ;))) 480p Stryflex Foil Capacitor - mid noise telephone speaker 18nf Foil-Capacitor for mid hi kick (magengrube) 10uF 36V Bipolar Elko for mid-low-kicks 100uf 35FV Bipolar Elko for sub kicks and bass BZX85C Diode --- sweeping 303 like sawtooth screaming LT132SBL3040- connect the 2 outerpins to get some "knackness" or any other Chip silizium germanium or whatever i decidet for one Switch Position- to install a socket on the frontpanel to plug in diodes or transistors directly.... holy that make fun... Edited January 4, 2015 by Phatline Quote
Phatline Posted December 29, 2014 Author Report Posted December 29, 2014 (edited) its Done!!! and its a mod-ing dream... so its never done... the basic program is on it, now its time for more programming... bankstick, savings of routings, then routing banks for song-parts...roll routings, flame, tempo delay, mute... and at last a vca on the master... Edited December 29, 2014 by Phatline Quote
Phatline Posted December 29, 2014 Author Report Posted December 29, 2014 https://vimeo.com/115565118 Freetekk vom Tekkstar... Quote
Hawkeye Posted December 30, 2014 Report Posted December 30, 2014 Great work! Looks like a lot of fun! :thumbsup: Many greets! Peter Quote
cosmosuave Posted December 30, 2014 Report Posted December 30, 2014 Kick ass... Best thing I have seen done to one of these... Quote
Phatline Posted January 5, 2015 Author Report Posted January 5, 2015 (edited) since the 8bit core had to little Memory, i went to a LPC core... but this core is to big for the case... so i had to do some vector board core soldering... hhhmmm one day work!!! after 12ours (with testing the resistance/debuging)...: the differnt sizes of cores...: Edited January 5, 2015 by Phatline Quote
Phatline Posted January 17, 2015 Author Report Posted January 17, 2015 I use Trigger Channel 7 + 8 as "Midi-Poly-Melody - Retrigger" - Trigger -Channels Connections: Midi-In-Port1: DrumSequencer Midi-In-Port2: Melody Source on 2 differnt Midichannel (selectable for each Channel per Button) Midi-Out-Port1: Melody Goal on 2 differnt Midichannels here a video, with some functions off the "Tekkstar" and its Brain the "Trigger Matrix" https://vimeo.com/117018283 Quote
Phatline Posted February 14, 2015 Author Report Posted February 14, 2015 (edited) Here a Block-Diagram> How does the Melody Retrigger works? Here 1 Trigger-Voice: (all that *8 and you have the trigger matrix) EDIT- the Melody Retrigger now works in a ther way.... i use RTOS task for decay-time-not-off-things.... Edited May 13, 2015 by Phatline Quote
Phatline Posted May 13, 2015 Author Report Posted May 13, 2015 (edited) After a few months of jaming testing programming and debugging... now a public beta of Version V1.0, which is specialised to work with the DI-OUt modules... see Attachment! there is also a hardware manual -which meens what DOUT or DIN-Pin do what, and the code itself is documented in app.c //...and so on there is also a midi-implementation...that is a bit "beta" - not all controlls are sent out or can be received, some make no sense via midi (trigger indicators and other midi-stream shitting flackerings...) how ever² if somebody wants to test it without havening the hardware: if somebody want to test it via OSC and a Tablet - then he must help me to get the OSC itself running --- (i already route the CCs internally to different functions, and midi is also no problem... the OSC-i-fiying of the program is no big deal, to initialze the ip and other ethernet basic thing is the hardest-for that i need help) i already own a lemur licensce and a ethernet wired tablet... the manual and project describtion is deep beta... Hm the future of the TM-CODE? the Project-"TEKKSTAR" is done - except the OSC A Triggermatrix-standalone-UI-PCB? maybe...but since i dont need that @ the moment, this will have to wait...but i must say - i like the idea of a handy 8x8 matrix and a lot of buttons, with triggerouts at the back... in the other hand - its a bit to small for a crown setup with synths, drummachines filters and so on...on the other side ... i thinked so much, and have a so "ready" concept/picture of this in my head - even i dont need it, even it is to small for my setup --- even off all - it could be a really cool midi-desktop tool that would make me happy to own it...just to say - no its not the Tekkstar --- yess thats the TRIGGER MATRIX! (without the analog drum-voices arround!) the next extendet triggerMatrix -Code should work on the BLM-16x16 Matrix that a other user design @the moment..switchable from simple stepsequencer to TM-Mode - on the code side a 16x16 matrix for trigger is no problem... just add more lines from the same code...replace some [1-8] to [1-16] polyphone melodys are limited by ram and my code skills 6 channels i think are max... @the moment:MidiChannel 4 5 6 7 and 8 are 128xPolyphonic Retrigger-channels for synth using --of course at the same time also Drumtrigger on the DOUT-Modules how ever that could work: Trigger 1-16 - DOUT Trigger Trigger 1-10 - Midi-Mono-Retrigger Trigger 10-16 - Midi-Poly-Retrigger - thats big enough for everything i have and can think of....ok ok...8 polyphonic retrigger channels would be kick ass, by using 8 polyphonic synths that are exactly tuned-and are fitting together (change the master tuning > change the mood > make healing music and so on) how ever here in action: https://vimeo.com/127922356 TriggerMatrix-V1.0beta.zip Edited May 15, 2015 by Phatline Quote
DrBunsen Posted December 15, 2015 Report Posted December 15, 2015 I love your UI. You've built a miniature Simmons SDS6 :D Quote
DrBunsen Posted December 15, 2015 Report Posted December 15, 2015 A Triggermatrix-standalone-UI-PCB? ... but i must say - i like the idea of a handy 8x8 matrix and a lot of buttons, with triggerouts at the back ... it could be a really cool midi-desktop tool that would make me happy to own it...just to say - no its not the Tekkstar --- yess thats the TRIGGER MATRIX!This interests me very much. Quote
Phatline Posted December 15, 2015 Author Report Posted December 15, 2015 (edited) the day for the 8x8PCB will come... i give you a pm when the day comes.but from 21.12-01.08 i have to build the 16x16 BLM and program the 16x16 Version of it, since i have already all parts for it ;) Edited December 15, 2015 by Phatline Quote
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.