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