how_to_use_midibox_cv_with_a_dout
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
how_to_use_midibox_cv_with_a_dout [2006/08/24 00:06] – admin | how_to_use_midibox_cv_with_a_dout [2009/05/06 14:23] (current) – 129.120.95.63 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | **Midibox CV to extend " | ||
+ | Anyone who considers 2 or 8 gates too few, or wants to trigger vintage drum synths/ | ||
+ | |||
+ | **Hardware** | ||
+ | |||
+ | A dout module is needed, which will be connected to J8 of the coremodule. A doutx4 provides 32 gates/ | ||
+ | Some advice at this point: because it will be built without any optocouplers or transistors to protect the DOUT, it is essential not to apply any external voltage to the Gates/ | ||
+ | |||
+ | **Software** | ||
+ | |||
+ | A few changes have to be made to the sourcecode. On the one hand, the dout has to activate the gate/ | ||
+ | independent of the Note duration. | ||
+ | |||
+ | Here as background is the trigger characteristic of some drum machines. The x0x-boxes (606, | ||
+ | |||
+ | __Activate dout:__ | ||
+ | |||
+ | Download the source of Midibox CV at http:// | ||
+ | " | ||
+ | < | ||
+ | USER_MPROC_NotifyReceivedEvent | ||
+ | ;; process MIDI event | ||
+ | call CV_MIDI_NotifyReceivedEvent | ||
+ | |||
+ | ;; for best latency: branch to USER_Tick so that the new CV values | ||
+ | ;; will be mapped immediately | ||
+ | rgoto USER_Tick | ||
+ | </ | ||
+ | |||
+ | Replace it with: | ||
+ | < | ||
+ | USER_MPROC_NotifyReceivedEvent | ||
+ | |||
+ | ;; BEGIN --- control DOUT pins via Note events at channel #1 | ||
+ | movf MIOS_PARAMETER1, | ||
+ | andlw 0xf0 | ||
+ | xorlw 0x80 | ||
+ | bnz USER_MPROC_NRE_NoNoteOff | ||
+ | USER_MPROC_NRE_NoteOff | ||
+ | bsf MIOS_PARAMETER1, | ||
+ | clrf MIOS_PARAMETER3 | ||
+ | USER_MPROC_NRE_NoNoteOff | ||
+ | |||
+ | movlw 0x90 ; | ||
+ | cpfseq MIOS_PARAMETER1, | ||
+ | rgoto USER_MPROC_NRE_NoNoteChn1 | ||
+ | USER_MPROC_NRE_NoteChn1 | ||
+ | ;; MIOS_DOUT_PinSet expects pin number in WREG, value in MIOS_PARAMETER1 | ||
+ | movf MIOS_PARAMETER3, | ||
+ | skpz | ||
+ | movlw 0x01 | ||
+ | movwf MIOS_PARAMETER1 | ||
+ | |||
+ | movf MIOS_PARAMETER2, | ||
+ | addlw -0x24 | ||
+ | andlw 0x7f | ||
+ | call MIOS_DOUT_PinSet | ||
+ | USER_MPROC_NRE_NoNoteChn1 | ||
+ | ;; END --- control DOUT pins via Note events at channel #1 | ||
+ | |||
+ | ;; process MIDI event | ||
+ | call CV_MIDI_NotifyReceivedEvent | ||
+ | |||
+ | ;; for best latency: branch to USER_Tick so that the new CV values | ||
+ | ;; will be mapped immediately | ||
+ | rgoto USER_Tick | ||
+ | </ | ||
+ | |||
+ | What happens here? Midibox CV is listening to the first channel (beginning from tune C-2) for a NoteOn and | ||
+ | activates the corresponding dout. A NoteOff deactivates the dout. | ||
+ | |||
+ | __Define the number of connected DOUT shift registers: | ||
+ | |||
+ | If you're using more than one DOUT shift register, you must also change this code in " | ||
+ | < | ||
+ | ;; initialize the SRIO driver | ||
+ | movlw 0x01 | ||
+ | call MIOS_SRIO_NumberSet | ||
+ | </ | ||
+ | To set it to the maximum (16), just replace the code with this: | ||
+ | < | ||
+ | ;; initialize the SRIO driver | ||
+ | movlw 0x0F | ||
+ | call MIOS_SRIO_NumberSet | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | __1ms Extension For Vintage Drum Machines:__ | ||
+ | |||
+ | Those who want to trigger vintage drums have to modify the sourcecode as follows: | ||
+ | Search for the following: | ||
+ | < | ||
+ | USER_SR_Service_Finish | ||
+ | ;; ---[ handle with control surface variables (flashing cursor, etc) ]--- | ||
+ | goto CS_MENU_TIMER | ||
+ | </ | ||
+ | |||
+ | Replace it with: | ||
+ | < | ||
+ | USER_SR_Service_Finish | ||
+ | clrf MIOS_PARAMETER1 | ||
+ | movlw | ||
+ | call MIOS_DOUT_SRSet | ||
+ | movlw | ||
+ | call MIOS_DOUT_SRSet | ||
+ | movlw | ||
+ | call MIOS_DOUT_SRSet | ||
+ | movlw | ||
+ | call MIOS_DOUT_SRSet | ||
+ | |||
+ | ;; ---[ handle with control surface variables (flashing cursor, etc) ]--- | ||
+ | goto CS_MENU_TIMER | ||
+ | </ | ||
+ | |||
+ | This leads to a reset of all DOUTs once per cycle - this lasts 1ms. So the drum modules can be triggered | ||
+ | with a 1ms latency. | ||
+ | |||
+ | MIDIbox SEQ allows up to 48 digital outputs as this type of trigger. [[http:// | ||
+ | |||
+ | __Changing the midi channel:__ | ||
+ | |||
+ | If you want the DOUT triggers to respond to MIDI events on a channel other than #1, replace instances of " | ||
+ | |||
+ | * Channel 1: 0x80, 0x90 | ||
+ | * Channel 2: 0x81, 0x91 | ||
+ | * Channel 3: 0x82, 0x92 | ||
+ | * Channel 4: 0x83, 0x93 | ||
+ | * Channel 5: 0x84, 0x94 | ||
+ | * Channel 6: 0x85, 0x95 | ||
+ | * Channel 7: 0x86, 0x96 | ||
+ | * Channel 8: 0x87, 0x97 | ||
+ | * Channel 9: 0x88, 0x98 | ||
+ | * Channel 10: 0x89, 0x99 | ||
+ | * Channel 11: 0x8A, 0x9A | ||
+ | * Channel 12: 0x8B, 0x9B | ||
+ | * Channel 13: 0x8C, 0x9C | ||
+ | * Channel 14: 0x8D, 0x9D | ||
+ | * Channel 15: 0x8E, 0x9E | ||
+ | * Channel 16: 0x8F, 0x9F | ||
+ | |||
+ | __Forum articles:__ | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | [[http:// | ||
+ | [[http:// |