Midi to Dinsync, hoe implementeren ze dit?

Rvooh

Gepokt en gemazeld
Lid sinds
9 december 2002
Berichten
7.587
Locatie
la côte belge
MIDI Clock = 24 Midi Clock Ticks per kwart noot
Dinsync = 24 pulses per kwart noot (in principe, afaik, een squarewave eerder)

Dus als een mooi dinsync signaal eruit ziet als een squarewave
mediaview.php

Dan is elke "rising edge" gelijk aan het begin van een midi clock tick

Hoe berekend een Midi to Dinsync converter de "falling edge"?

Ik bekeek wat open source code (assembly) en heb de indruk dat ze de falling edge altijd na 4ms laten komen :stupid .. I could be very wrong.
Waardoor je dus nooit aan een mooie square wave kan komen via midi to dinsync converter

enfin, half aan het gissen hier, maar weet iemand hier meer over? Eventueel een voorbeeld in C zou handig zijn
 
MIDI-DIN-SYNC ^^^^^

Zet MIDI in real time op een DIN-Sync is zeer eenvoudig te wijten aan het feit dat het systeem staat appartementen MIDI Timing Clock "op dezelfde frequentie als de impulsen van de DIN-Sync Klok (dwz 24 PPQ) hebben. Je dan kijken naar de gegevens over de MIDI input en altijd bij het ​​ontvangen van de status byte F8h momentum voor de output DIN-Sync Klok genereren met de cursus volgens figuur 1 Ook de MIDI-commando "Start " knop genereert een puls "Din-Sync Reset en MIDI"Doorgaan"om momentum te genereren"DIN-Sync, Fill-in. "Tegelijkertijd MIDI-commando's "Start" en "Doorgaan" om de logische leider sein DIN-Sync Run "MIDI"Stop "-signaal van het tegendeel, de DIN-Sync Run" nul. De link tussen MIDI en DIN-Sync synchronisatie wordt geïllustreerd in figuur 6

Retour transfer van de DIN-Sync om MIDI is in principe hetzelfde. Echter, het gebruik van analoge apparaten op de MIDI-systeem synchroniseren, het lijkt een anachronisme. Bij wijze van uitzondering, echter, kan voorkomen in gevallen waar het nodig is - bijvoorbeeld wanneer een analoge drum machine heeft geen ingangssignaal DIN-Sync, maar is alleen uitgerust met DIN Sync-uitgang. Dan de linker dan de andere apparaten die op deze drummer rijden.
 
Waardoor je dus nooit aan een mooie square wave kan komen via midi to dinsync converter

De vraag is denk ik meer: maakt het uit of het een 50% duty cycle square wave is? Je zegt het eigenlijk zelf al: geen enkele converter lijkt dat nu toe doen, maar blijkbaar werken ze allemaal prima. Als alle DIN-sync apparateren triggeren op de rising edge, dan maakt het natuurlijk niet uit hoe lang de puls is.

Als je echt een 50% cycle wilt hebben moet je vermoedelijk denken richting een PLL, dus feitelijk zelf nieuwe een blokgolf genereren die dezelfde frequentie heeft als de midi pulsen.
 
Met een microcontroller kun je dit soort dingen wel makkelijk doen. Meerdere opties mogelijk.

Je zou bijvoorbeeld de frequentie / tussentijd kunnen meten van het inkomende signaal. Laat daarvoor een timer lopen op een voldoende hoge frequentie. Steeds wanneer je een MIDI Clock message binnen krijgt, neem je de actuele waarde van de timer, en trek je daarna de oude waarde van de nieuwe waarde af. Gezien je weet hoe snel de timer loopt, kun je nu met het verschil de tussentijd van het inkomende signaal bepalen.

Neem vervolgens een tweede timer die op dezelfde frequentie loopt als de eerste. Elke keer wanneer je een MIDI Clock message binnenkrijgt, dan zet je de DIN Clock uitgang op hoog en start of reset je deze tweede timer, waarvan je van te voren hebt ingesteld dat deze moet aflopen na 50% van de tijd die je hebt gemeten bij de eerste timer. Laat de tweede timer naar een interrupt springen wanneer hij deze 50% heeft bereikt. Zet in deze interrupt de DIN Clock uitgang op laag.

Wanneer je alles een beetje efficiënt programmeert zul je nauwelijks faseverschillen merken.
 
Vertraging heb je inderdaad, maar is een paar microseconden, dus verwaarloosbaar. In sequencers en digitale synths is deze vertraging er ook.
 
Nee, je moet het zien als een continue proces.

De duty cycle van de te genereren puls is gebaseerd op de vorige meting. Je meet dus niet de actuele ingangsfrequentie, maar je gokt dat deze hetzelfde zal zijn als de vorige, wat meestal het geval is.

Alleen de eerste uitgestuurde puls zal niet kloppen na een tempowisseling, daarna gaat het weer goed. Maar dat hou je, je kan immers niet in de toekomst kijken.

Bovendien, analoge PLL's hebben ook een bepaalde tijd nodig om de uitgangsfrequentie gelijk te maken aan de ingangsfrequentie.
 
De vraag is denk ik meer: maakt het uit of het een 50% duty cycle square wave is? Je zegt het eigenlijk zelf al: geen enkele converter lijkt dat nu toe doen, maar blijkbaar werken ze allemaal prima. Als alle DIN-sync apparateren triggeren op de rising edge, dan maakt het natuurlijk niet uit hoe lang de puls is.

De vraag komt in feite voort uit onderzoek van de tb303 sequencer met bedoeling deze na te maken/uit te breiden.
Daar zit een metronoom in, voor realtime "time mode" input.
Het _lijkt_ alsof de nauwkeurigheid daarvan eerder 48 ppqn is dan 24ppqn
Hoe kom je aan 48 ppqn: de falling edge bijtellen, ik vermoed dat de interne clock, en dinsync oorspronkelijk, een squarewave is dus dan is dat geen probleem

Allemaal vermoedens, weinig implicaties tot zover, maar als ik bvb wil een shuffle inbouwen zou die 48ppqn intern veel meer mogelijkheden bieden.

Maar idd zoals je zegt, aangezien alle apparaten slechts die rising edge nodig hebben is het van weinig belang.
 
Nee, je moet het zien als een continue proces.

De duty cycle van de te genereren puls is gebaseerd op de vorige meting. Je meet dus niet de actuele ingangsfrequentie, maar je gokt dat deze hetzelfde zal zijn als de vorige, wat meestal het geval is.

Alleen de eerste uitgestuurde puls zal niet kloppen na een tempowisseling, daarna gaat het weer goed. Maar dat hou je, je kan immers niet in de toekomst kijken.

Bovendien, analoge PLL's hebben ook een bepaalde tijd nodig om de uitgangsfrequentie gelijk te maken aan de ingangsfrequentie.

Daar heb je idd gelijk in, je kan al "syncen"voordat er op start is gedrukt.

Heb er ook eens mee zitten spelen, je kan heel makkelijk de sync in 2e delen met een cmos 4017 oid, speelt je 303 op halve speed.
 
Met een microcontroller kun je dit soort dingen wel makkelijk doen. Meerdere opties mogelijk.

Je zou bijvoorbeeld de frequentie / tussentijd kunnen meten van het inkomende signaal. Laat daarvoor een timer lopen op een voldoende hoge frequentie. Steeds wanneer je een MIDI Clock message binnen krijgt, neem je de actuele waarde van de timer, en trek je daarna de oude waarde van de nieuwe waarde af. Gezien je weet hoe snel de timer loopt, kun je nu met het verschil de tussentijd van het inkomende signaal bepalen.

Neem vervolgens een tweede timer die op dezelfde frequentie loopt als de eerste. Elke keer wanneer je een MIDI Clock message binnenkrijgt, dan zet je de DIN Clock uitgang op hoog en start of reset je deze tweede timer, waarvan je van te voren hebt ingesteld dat deze moet aflopen na 50% van de tijd die je hebt gemeten bij de eerste timer. Laat de tweede timer naar een interrupt springen wanneer hij deze 50% heeft bereikt. Zet in deze interrupt de DIN Clock uitgang op laag.

Wanneer je alles een beetje efficiënt programmeert zul je nauwelijks faseverschillen merken.

hartelijk dank voor deze uitleg! :halleluja:halleluja
 
Back
Top