This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
how_to_use_midibox_cv_with_a_dout [2006/03/27 14:30] talion |
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 "douts" | + | **Midibox CV to extend "DOUTs"** |
- | Who considers 2 or rather 8 gates to less or wants to trigger Vintage Drummer (Roland x0x) will find out | + | Anyone who considers 2 or 8 gates too few, or wants to trigger vintage drum synths/modules (Roland x0x style), may find the existing hardware of the Midibox CV insufficient. The solution is simple. |
- | that the existing hardware of the Midibox CV will not be sufficient. The solution is plain simple. | + | |
- | Hardware: | + | **Hardware** |
- | A dout module is needed which will be connected to J8 of the coremodule. A doutx4 provides 32 gates/triggers. | + | |
- | At this point some advice: Because it will be worked without any optokopller or transistors it is necessary | + | |
- | not to energize the Gates/Triggers and to prevent short circuit. | + | |
- | Software: | + | A dout module is needed, which will be connected to J8 of the coremodule. A doutx4 provides 32 gates/triggers. |
- | A few changes have to be made in the sourcecode. On the one hand the dout has to activate the gates/triggers at | + | 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/Triggers, and also to prevent short circuit. |
- | a NoteOn of the corresponding note on the other hand you can reduce the duration of an impulse optionally to 1ms | + | |
- | independent from the duration of the Note. | + | |
- | Background is the characteristic of some drummers. The x0x-boxes (606,808,909...) trigger the sound at decrease | + | |
- | of voltage at the gate instead of increase. | + | |
- | Activate dout: | + | **Software** |
- | Download sources of Midibox CV at http://www.ucapps.de/mios_download.html and search for the following in | + | A few changes have to be made to the sourcecode. On the one hand, the dout has to activate the gate/trigger on receiving the appropriate NoteOn: on the other hand you may want to reduce the duration of an impulse to 1ms |
- | "main.asm": | + | independent of the Note duration. |
+ | Here as background is the trigger characteristic of some drum machines. The x0x-boxes (606,808,909...) trigger the sound at decrease of voltage at the gate instead of increase.\\ //IE at the trailing edge of the +ve pulse rather than the leading edge? I'm not sure if this is correct.\\ [[http://en.wikipedia.org/wiki/CV/Gate#Gate|Wikipedia]] says that Roland and Sequential gear is V-Trig {normal low, set high to trigger} and Moog, Korg and Yamaha is S-Trig {normal high, set low to trigger}. The [[http://66.102.7.104/search?q=cache:IBefydaCrJIJ:www.kentonuk.com/kmanualspdf/psoloman.pdf+%22V-trig%22+edge&hl=en&gl=au&ct=clnk&cd=5&client=firefox|manual]] for the Kenton Pro Solo MIDI-CV converter says: " ... Most synths / sequencers & drum machines will want the Positive edge pulse, but a few require the Negative edge instead. (e.g. Korg Monopoly) .. " I've also seen written elsewhere that the 606 trigger out is V-Trig, but the 707 internal triggering for it's own voices is S-Trig\\ Also, if the trailing edge was the trigger, how would gates and envelopes work ie ADSR when AD happens at leading edge, D as gate is held high, and R when gate drops low? - Bunsen// | ||
+ | |||
+ | __Activate dout:__ | ||
+ | |||
+ | Download the source of Midibox CV at http://www.ucapps.de/mios_download.html and search for the following in | ||
+ | "main.asm": | ||
+ | <code> | ||
USER_MPROC_NotifyReceivedEvent | USER_MPROC_NotifyReceivedEvent | ||
;; process MIDI event | ;; process MIDI event | ||
Line 28: | Line 27: | ||
;; will be mapped immediately | ;; will be mapped immediately | ||
rgoto USER_Tick | rgoto USER_Tick | ||
+ | </code> | ||
Replace it with: | Replace it with: | ||
+ | <code> | ||
USER_MPROC_NotifyReceivedEvent | USER_MPROC_NotifyReceivedEvent | ||
Line 45: | Line 44: | ||
movlw 0x90 ; check for Note On at channel #1 | movlw 0x90 ; check for Note On at channel #1 | ||
- | IFNEQ MIOS_PARAMETER1, ACCESS, rgoto USER_MPROC_NRE_NoNoteChn1 | + | cpfseq MIOS_PARAMETER1, ACCESS |
+ | rgoto USER_MPROC_NRE_NoNoteChn1 | ||
USER_MPROC_NRE_NoteChn1 | USER_MPROC_NRE_NoteChn1 | ||
;; MIOS_DOUT_PinSet expects pin number in WREG, value in MIOS_PARAMETER1 | ;; MIOS_DOUT_PinSet expects pin number in WREG, value in MIOS_PARAMETER1 | ||
Line 66: | Line 66: | ||
;; will be mapped immediately | ;; will be mapped immediately | ||
rgoto USER_Tick | rgoto USER_Tick | ||
+ | </code> | ||
What happens here? Midibox CV is listening to the first channel (beginning from tune C-2) for a NoteOn and | 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. | activates the corresponding dout. A NoteOff deactivates the dout. | ||
+ | __Define the number of connected DOUT shift registers:__ | ||
- | 1mw extension for Vintage Drummer: | + | If you're using more than one DOUT shift register, you must also change this code in "main.inc" to reflect the number of shift registers: |
+ | <code> | ||
+ | ;; initialize the SRIO driver | ||
+ | movlw 0x01 | ||
+ | call MIOS_SRIO_NumberSet | ||
+ | </code> | ||
+ | To set it to the maximum (16), just replace the code with this: | ||
+ | <code> | ||
+ | ;; initialize the SRIO driver | ||
+ | movlw 0x0F | ||
+ | call MIOS_SRIO_NumberSet | ||
+ | </code> | ||
- | Those who want to trigger Vintage Drummer have to modify the sourcecode as follows: | ||
- | Search for the following: | ||
+ | |||
+ | __1ms Extension For Vintage Drum Machines:__ | ||
+ | |||
+ | Those who want to trigger vintage drums have to modify the sourcecode as follows: | ||
+ | Search for the following: | ||
+ | <code> | ||
USER_SR_Service_Finish | USER_SR_Service_Finish | ||
;; ---[ handle with control surface variables (flashing cursor, etc) ]--- | ;; ---[ handle with control surface variables (flashing cursor, etc) ]--- | ||
goto CS_MENU_TIMER | goto CS_MENU_TIMER | ||
+ | </code> | ||
- | + | Replace it with: | |
- | Replayce it with: | + | <code> |
USER_SR_Service_Finish | USER_SR_Service_Finish | ||
clrf MIOS_PARAMETER1 | clrf MIOS_PARAMETER1 | ||
Line 97: | Line 113: | ||
;; ---[ handle with control surface variables (flashing cursor, etc) ]--- | ;; ---[ handle with control surface variables (flashing cursor, etc) ]--- | ||
goto CS_MENU_TIMER | goto CS_MENU_TIMER | ||
+ | </code> | ||
- | + | This leads to a reset of all DOUTs once per cycle - this lasts 1ms. So the drum modules can be triggered | |
- | This leads to a reset of all douts at every cicle - this lasts 1ms. So the drumm modules can be triggered | + | |
with a 1ms latency. | with a 1ms latency. | ||
+ | MIDIbox SEQ allows up to 48 digital outputs as this type of trigger. [[http://ucapps.de/midibox_seq_options.html]] | ||
+ | |||
+ | __Changing the midi channel:__ | ||
+ | |||
+ | If you want the DOUT triggers to respond to MIDI events on a channel other than #1, replace instances of "0x80" and "0x90" with the following values: | ||
+ | |||
+ | * 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:__ | ||
- | Forum articles: | + | [[http://www.midibox.org/forum/index.php/topic,13478.0.html]] -- Information on receiving on ALL channels, information on excluding specific DOUT pins from being reset with the 1ms trigger extension code |
- | http://www.midibox.org/forum/index.php?topic=2701.0 | + | [[http://www.midibox.org/forum/index.php?topic=2701.0]] (German)\\ |
- | http://www.midibox.org/forum/index.php?topic=6333.0 | + | [[http://www.midibox.org/forum/index.php?topic=6333.0]] (German) |