Midibox CV um dout's erweitern
Wem zwei bzw. acht Gates zu wenig sind, oder Vintage Drummer (Roland x0x) Triggern will, wird schnell feststellen, dass er mit der
vorhandenen Hardwareausstattung der Midibox CV nicht auskommt. Die Lösung ist denkbar einfach und wird im Folgenden
erläutert.
Hardwareseitig -
wird ein dout Modul benötigt, welches mit J8 des Coremodules verbunden wird. Ein doutx4 stellt 32 Gates/Trigger bereit. An dieser
Stelle der Hinweis: Da hier ohne Optokopller oder Transistoren gearbeitet wird, unbedingt darauf achten das die Gates/Trigger nicht
"belastet" oder gar kurz geschlossen werden.
Softwareseitig -
sind einige Änderungen am Code zu machen. Zum einen muss das dout bei einem NoteOn der entsprechenden Note den Gate/Trigger
aktivieren, zum anderen kann man optional die Dauer des Impulses, unabhängig der Länge der Note, auf 1ms reduzieren. Hintergrund
ist die eigenart mancher Drummer. So lösen die x0x-Boxen (606, 808, 909 ...) den Sound nicht bei Anschwellen der Gatespannung, sondern
beim wieder Abflachen aus.
DOUT AKTIVIEREN:
Sourcen von Midibox CV herunterladen http://www.ucapps.de/mios_download.html und in main.asm nach dieser Stelle suchen:
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
Mit diesem Code ersetzen:
USER_MPROC_NotifyReceivedEvent
;; BEGIN --- control DOUT pins via Note events at channel #1
movf MIOS_PARAMETER1, W ; Note Off -> Note On with velocity 0
andlw 0xf0
xorlw 0x80
bnz USER_MPROC_NRE_NoNoteOff
USER_MPROC_NRE_NoteOff
bsf MIOS_PARAMETER1, 4
clrf MIOS_PARAMETER3
USER_MPROC_NRE_NoNoteOff
movlw 0x90 ; check for Note On at channel #1
cpfseq MIOS_PARAMETER1, ACCESS
rgoto USER_MPROC_NRE_NoNoteChn1
USER_MPROC_NRE_NoteChn1
;; MIOS_DOUT_PinSet expects pin number in WREG, value in MIOS_PARAMETER1
movf MIOS_PARAMETER3, W ; velocity == 0: off, velocity != 0: on
skpz
movlw 0x01
movwf MIOS_PARAMETER1
movf MIOS_PARAMETER2, W ; pin number: note number - 0x24, we start with C-2
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
Was passiert hier? Midibox CV lauscht nun auf dem ersten Channel ab der Note C-2 auf einen NoteOn und aktiviert bei gespielter Note
den entsprechenden dout. Bei einem NoteOff wird dieser wieder abgeschaltet.
1MS ERWEITERUNG FÜR VINTAGE DRUMMER:
Wer Vintage Drummer triggern will muss diesen Code zusätzlich in die main.asm einsetzen. Nach folgender Stelle suchen:
USER_SR_Service_Finish
;; ---[ handle with control surface variables (flashing cursor, etc) ]---
goto CS_MENU_TIMER
Und mit diesem Code ersetzen:
USER_SR_Service_Finish
clrf MIOS_PARAMETER1
movlw 0x00
call MIOS_DOUT_SRSet
movlw 0x01
call MIOS_DOUT_SRSet
movlw 0x02
call MIOS_DOUT_SRSet
movlw 0x03
call MIOS_DOUT_SRSet
;; ---[ handle with control surface variables (flashing cursor, etc) ]---
goto CS_MENU_TIMER
Hiermit erreicht man, dass bei jedem Cycle die dout's zurückgesetzt werden - das dauert 1ms. Somit kann man die Drummodule mit 1ms Latenz
triggern.
Themen im Forum:
http://www.midibox.org/forum/index.php?topic=2701.0\\
http://www.midibox.org/forum/index.php?topic=6333.0