Hoe werkt zo'n midi din converter

Otlen

Lid
Lid sinds
14 februari 2006
Berichten
6.701
Locatie
The cosmos
Dat vraag ik me af, maakt hij er een ander voltage van of op andere polen van de kabel?
 
Ok, thx. Dus in het geval van din stuurt pin 1 0-volt "stop"and 5-volt "Start/continue" signalen, en pin drie 5-volt timing pulses. En midi?
 
sdjghsdhgldhg
attachment.php

en het pinnetje bovenaan ('noord') is de aarde, 'oost' en 'west' word niet gebruikt
 

Attachments

  • midi.gif
    midi.gif
    6,6 KB · Bekeken: 133
hoeveel MIDI gebruikt? 2 pinnen...
Nee ik bedoel hoe werkt dat converteren binnen zo'n midi-sync converter. Blijkbaar midi pin 2 en 4 dus converteert zo'n converter fysiek het signaal door naar andere pinnen? Voltage is in beide gevallen 5v zie ik.
 
MIDI en din sync zijn compleet andere signalen, tis niet een kwestie van dit draadje naar dat en klaar... Vergelijk het met een fransman en een rus die in hun eigen taal een gesprek voeren. Dan wil je een tolk hebben, dat doet die midi naar sync converter...
 
Dat begrijp ik, daarom vroeg ik hoe dat precies werkt.
 
Eigenlijk doet een Pic Microchip al het convert werk. Daarvoor schrijf je een asm in cc taal en die convert je naar een hex. Deze hex wordt in de pic gebrandt.
Hier een voorbeeld van een asm van midi2din van Colin Fraser.



list p=12F629
radix dec
include "p12f629.inc"

__CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT ;Internal osc.

cblock 0x20 ;Variables
midi ;incoming byte
din ;output status
dinstat ;din input status
x
y
z
endc

org 0x00
;

bsf STATUS, RP0 ;Bank 1
call 3FFh ;Get the cal value
movwf OSCCAL ;Calibrate

movlw b'10000110' ;Turn off T0CKI, prescale for TMR0 = 1:128
movwf OPTION_REG

bcf STATUS, RP0 ;Bank 0

movlw b'00000001' ;Preset outputs
movwf GPIO ;/

; ====================
; midi to sync section
; ====================

m2s
movlw b'00000001'
movwf din

movlw b'00001100' ;Set the I/O direction
bsf STATUS, RP0 ;Bank 1
movwf TRISIO
bcf STATUS, RP0 ;Bank 0
goto rx


; if time elapsed write out din to clear clock/cont bits

rescc movfw din
movwf GPIO
clrf TMR0
btfss GPIO,3
goto s2m

;
; rx - receive midi byte at 31250 bps.
;

rx btfsc TMR0,5 ; 4ms
goto rescc
btfsc GPIO,2 ; Detect start bit
goto rx

;
; Wait to get to centre of start bit.
;

nop ;1
nop ;2
nop ;3
nop ;4
nop ;5
nop ;6
nop ;7
nop ;8

movlw 8 ; Eight bits of data to get
movwf x
clrf midi
;
; Delay one bit-width (32 cycles) to get to center of LSB.
; Gather the bits into midi.
;
mbin movlw 6 ;(1)
movwf y ;(1)

del1 nop ;\
decfsz y,F ;((5 x 4) + 3) = 23
goto del1 ;/

bcf STATUS,C ;(1) Default 0
rrf midi,F ;(1) Put 0 in MSB of recv, then
btfsc GPIO,2 ;(1/2) sample the serial data and
bsf midi,7 ;(1) set the bit if sample was=1
decfsz x,F ;((7 x 3) + 2) = 23, Do all bits
goto mbin ;/ [total cycles = 32, MSB = 31]
;
; Time to first third of stop bit. (22 cycles)
;
movlw 6 ;(1)
movwf y ;(1)
del2 decfsz y,F ;((6 x 3) + 2) = 20

goto del2 ;/
btfss GPIO,2 ;Stop bit showed up?
goto rx ;If not, wait for another byte

;
; Do clock stuff
; midi reg now contains received midi byte
;

; Check for Clock pulse

movfw midi
xorlw 0xF8
btfsc STATUS,Z
goto clockpulse

; Check for Start

movfw midi
xorlw 0xFA
btfsc STATUS,Z
goto clockstart

; Check for Continue

movfw midi
xorlw 0xFB
btfsc STATUS,Z
goto clockcont

; Check for Stop

movfw midi
xorlw 0xFC
btfss STATUS,Z
goto rx

; Set Run pin low

bcf din,5
movfw din
movwf GPIO
goto rx

; Set Run pin high

clockstart
bsf din,5
movfw din
movwf GPIO
goto rx

; Set Run and Cont pin high

clockcont
bsf din,5
movfw din
iorlw 0x02
movwf GPIO
clrf TMR0
goto rx

; Set Clock pin high

clockpulse
movfw din
iorlw 0x10
movwf GPIO
clrf TMR0
goto rx


; ====================
; sync to midi section
; ====================

s2m
movlw b'00111110' ;Set the I/O direction
bsf STATUS, RP0 ;Bank 1
movwf TRISIO
bcf STATUS, RP0 ;Bank 0

clrw
movwf dinstat

clktest
btfsc GPIO,3 ; check mode select
goto m2s ; go back to midi to sync if required


btfss GPIO,4 ; Check DIN Clock
goto noclock ; branch if clock = 0

btfss dinstat,0 ; was previous clock 1 ?
goto newclock ; branch if clock 0 -> 1

runtest
btfss GPIO,5 ; Check for DIN Run = 1
goto norun ; branch if run = 0

btfss dinstat,1 ; was it already 1 ?
goto newrun ; branch if clock 0 -> 1

goto clktest

norun
btfss dinstat,1 ; was it already 0 ?
goto clktest ; branch if run not changed

movfw dinstat
andlw 0x1
movwf dinstat ; run status = 0
movlw 0xFC ; tx midi stop byte
goto miditx

newrun
movfw dinstat
iorlw 0x2
movwf dinstat ; run status = 1
movlw 0xFA ; tx midi start byte
goto miditx


noclock
movfw dinstat
andlw 0x2
movwf dinstat ; clock status = 0
goto runtest

newclock
movfw dinstat
iorlw 0x1
movwf dinstat ; clock status = 1
movlw 0xF8 ; tx midi clock byte


miditx
movwf x ; store tx byte
clrf GPIO ; start bit

;pause for one bit
movlw 8 ;(1)
movwf z ;(1)
pause1
decfsz z ;(1/2) \
goto pause1 ;(2) / * z = 8 * 3 + 1 = 25

movlw 0x8 ;(1)
movwf y ;(1)
nop ;(1)

mtxloop
movfw x ;(1)
movwf GPIO ;(1) lsb of tx byte to midi out

;pause for one bit
movlw 7 ;(1)
movwf z ;(1)
pause2
decfsz z ;(1/2) \
goto pause2 ;(2) / * z = 7 * 3 + 1 = 22

bsf STATUS,C ;(1)
rrf x,1 ;(1)
nop ;(1)
nop ;(1)
decfsz y ;(1)
goto mtxloop ;(2)

nop
goto clktest

end

Wat je dus eigenlijk doet is een pic proggen zodat hij de midisignalen omzet naar din signalen meer niet. En eigenlijk beperkt zich dat tot start/stop en clock.

ps de bovenstaande code is niet compleet dus ook onbruikbaar...dit heb ik expres gedaan met respect tot Colin fraser. Op zijn site kan je alle info vinden.
 
ps de bovenstaande code is niet compleet dus ook onbruikbaar...dit heb ik expres gedaan met respect tot Colin fraser. Op zijn site kan je alle info vinden.
rare kleun! :dubbel: plak dan gewoon alleen ff de link (naar die code op de site van fraser) i.p.v. er een halfgebakken post aan te spenderen, zeer informatief dit allemaal weer... jij met je respect, jeuz!
 
rare kleun! :dubbel: plak dan gewoon alleen ff de link (naar die code op de site van fraser) i.p.v. er een halfgebakken post aan te spenderen, zeer informatief dit allemaal weer... jij met je respect, jeuz!

Ghehehe ja goed he:halleluja....hij wou toch weten hoe het werkt....nou zo dus alleen niet bij deze code......
 
als kale lusi code kan lezen wel ja...
ik denk dat ie liever ff in normale taal hoort hoe het zit ipv een lap code door te spitten... ja tog?

niet dat ik een passend antwoord heb nutuulk maar enfin

Klopt, dat antwoord van dender slaat echt nergens op. Misschien kan ie het voor me decoderen.
 
Klopt, dat antwoord van dender slaat echt nergens op. Misschien kan ie het voor me decoderen.

Dat was ongecodeerd...dit is gecodeerd...

:020000040000FA
:100000008316FF2390008630810083120130850023
:100010000130A1000C3083168500831214282108BA
:1000200085008101851D5728811A0F28051914287C
:1000300000000000000000000000000000000000C0
:100040000830A300A0010630A4000000A40B25285E
:100050000310A00C0519A017A30B23280630A40039
:10006000A40B3028051D14282008F83A031952283B
:100070002008FA3A031948282008FB3A03194C28AB
:100080002008FC3A031D1428A11221088500142819
:10009000A116210885001428A11621080238850020
:1000A00081011428210810388500810114283E3070
:1000B0008316850083120301A20085190828051EF6
:1000C0007428221C7828851E6828A21C6F285D28A9
:1000D000A21C5D2822080139A200FC307C282208 DD
:1000E0000238A200FA307C2822080239A2006328 D4
:1000F00022080138A200F830A30085010830A500CD
:10010000A50B80280830A4000000230885000730D4
:10011000A500A50B89280314A30C00000000A40B64
:06012000852800005D28A7
:02400E00D43F9D
:00000001FF

:dubbel:
 
Maar wat is het dat Kalusi nou eigenlijk precies wil weten?

Ik bedoel die code zorgt ervoor dat midi signalen worden vertaald naar din sync pulses en vice versa.....anders uit te leggen is het niet......

Dus zeg het midi signaal heeft 96 ppgn en din sync is 24 ppgn dan deelt de converter door 4 of vermnigvuldigd met 4.....dus voor elke 4 pulses die hij ontvangt zend hij er 1 door....en andersom natuurlijk.....
 
Maar wat is het dat Kalusi nou eigenlijk precies wil weten?

Ik bedoel die code zorgt ervoor dat midi signalen worden vertaald naar din sync pulses en vice versa.....anders uit te leggen is het niet......

Dus zeg het midi signaal heeft 96 ppgn en din sync is 24 ppgn dan deelt de converter door 4 of vermnigvuldigd met 4.....dus voor elke 4 pulses die hij ontvangt zend hij er 1 door....en andersom natuurlijk.....
Kijk, dat is nou duidelijke taal. :okdan: Hij zendt dus voor elke 4 pulses die hij ontvangt er 1 door en andersom en doet dat ook nog op andere pinnetjes dan de ontvangende.
 
Dat was ongecodeerd...dit is gecodeerd...
:020000040000FA
:100000008316FF2390008630810083120130850023
:100010000130A1000C3083168500831214282108BA
:1000200085008101851D5728811A0F28051914287C
:100080002008FC3A031D1428A11221088500142819
::dubbel:
Nee dat andere was gecodeerd en dit is gecompileerd...
 
Maar je kan het allemaal instellen op bv een MSY2. Je kan ook bv 48 ppqn naar 12 ppqn converten en ook zo instellen voor Korg drummachines....die hebben weer een andere ppqn ofzo....ik heb geen korg drummerts.
 
Klopt, ik heb een MSY2. Aan de onderkant zitten van die dipswitches waarmee je dat kunt instellen.
 
Klopt, ik heb een MSY2. Aan de onderkant zitten van die dipswitches waarmee je dat kunt instellen.

Ja en daar kan je geloof ik ook nog een midi kanaal op instellen en of die van midi2din gaat of andersom......ik heb m ook nl. Maar dat staat allemaal in de manual.....no sweat :).
 
Back
Top