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