Guten Abend, ich habe Schwierigkeiten mit MIDI OUT. Auf http://www.personal.kent.edu/~sbirch/Music_Production/MP-II/MIDI/midi_physical_layer.htm lese ich: "A zero current is a 'logical 1' for MIDI" Und auf http://www.doc.ic.ac.uk/~nd/surprise_97/journal/vol1/aps2/ "Every MIDI message transmitted starts with a 'Start Bit', this is when the signal current drops to 0mA, and is followed by a byte of data (Most Significant Bit (MSB) is transmitted first) and finishes with a "Stop Bit", which is when the current returns to 5mA" Kann es sein, dass hier "5 mA current" und "und 5V voltage" (die ja 0 mA bedeuten) verwechselt werden? In einem älteren Thread schrieb Knut Ballhause: > Genau das ist falsch. Der Ruhepegel bei MIDI ist zwar HIGH, aber es > fließt in dem Moment kein Strom durch die MIDI-Leitungen, da diese > zwischen Treiberausgang und VCC mit jeweils einem Widerstand in Serie > verschaltet sind. Der Treiber gibt also High aus und das entspricht VCC: > es fließt kein Strom. Bei Low am Treiber hingegen fließt Strom über das > Kabel und die LED des Optokopplers am Empfänger nach VCC. Schließt man > eine normale LED polrichtig an eine MIDI-OUT Buchse, kann man also die > LOW-Pulse sehen, bei HIGH ist die LED aus. So hatte ich es eigentlich auch verstanden: Eine Strom-Schleife, bei der ein Pin an 5 V ist und der andere am UART. Wenn der auf LOW gezogen wird, fließt Strom und im Optokoppler gegenüber blinkt es. Der Ruhe*pegel* ist HIGH, also kein Strom, das Startbit LOW, das Stopbit wieder HIGH. Aber wie ist das mit den Datenbits? Ich dachte eigentlich, dass ein LOW-Pegel auch eine 1 bedeutet, aber dann las ich das hier: http://www.electronics.dit.ie/staff/tscarff/Music_technology/midi/midi_messages.htm Da ist es so beschrieben, dass das Startbit mit einem LOW-Pegel erzeugt wird, Datenbits aber mit HIGH. Ich habe zum Testen nur einen Yamaha RY-8 und ein PICKit mit Logic Analyzer da. Leider haut der RY-8 zu jeder Zeit Signale raus, auch wenn er gestoppt und jeglicher MIDI-Output abgeschaltet ist, sodass ich nicht gezielt bestimmte Daten senden und lesen kann. Diese Daten sind genau 128 µS lange LOW-Pulse. Da ein Bit 32 µS dauert, heißt das es wird nach dem Startbit noch 3 x LOW gesendet. Würde HIGH wirklich einer Daten-1 entsprechen, wäre das Byte 00011111 = 0x1f. Das ist aber keine gültige MIDI-Message. Anders herum schon: 11100000 = 0xE0 = Pitch Bend. Allerding folgen dann keine Datenbytes. Der RY-8 kann (Gitarren) Töne vom Audio-Eingang in MIDI umwandeln. Vielleicht versucht er das permanent und sendet einfach Pitch Bend ohne Daten wenn kein Audio anliegt. Oder ist es doch so, dass im Ruhezustand Strom fließt?
Pekka schrieb: > Würde HIGH wirklich einer Daten-1 > entsprechen, wäre das Byte 00011111 = 0x1f. Das ist aber keine gültige > MIDI-Message. Wie mein DX7 wird dein Gerät einfach ActiveSense Signale senden (0xFE). Das machen m.W. viele Yamaha Geräte. http://www.midi.org/techspecs/midimessages.php Wenn du noch Sync Features nutzt, könnte es auch die Timing Clock (0xF8) sein.
:
Bearbeitet durch User
Pekka schrieb: > "Most Significant Bit (MSB) is transmitted first" Die MIDI-Spezifkation sagt: "Bytes are sent LSB first." > Kann es sein, dass hier "5 mA current" und "und 5V voltage" (die ja 0 mA > bedeuten) verwechselt werden? Nein; MIDI funktioniert als Stromschleife. Die Spezifikation sagt "Logical 0 is current ON." (Eine gewisse Spannung wird für die LED des Optokopplers benötigt, aber die wichtige Größe ist der Strom.) Siehe http://www.midi.org/techspecs/electrispec.php : Die Ausgangsschaltung wandelt High- bzw. Low-Pegel in 0 mA bzw. 5 mA um. Der Optokoppler in der Eingangsschaltung wandelt 0 mA bzw. 5 mA in High- bzw. Low-Pegel um. > Aber wie ist das mit den Datenbits? Ich dachte eigentlich, dass ein > LOW-Pegel auch eine 1 bedeutet Auch für die Datenbits gilt "Logical 0 is current ON". > Leider haut der RY-8 zu jeder Zeit Signale raus, auch wenn > er gestoppt und jeglicher MIDI-Output abgeschaltet ist, sodass ich nicht > gezielt bestimmte Daten senden und lesen kann. Diese Daten sind genau > 128 µS lange LOW-Pulse. Da ein Bit 32 µS dauert, heißt das es wird nach > dem Startbit noch 3 x LOW gesendet. Ein Active Sense-Byte wäre ein 64-µs-Puls. Bist du sicher, dass die 128 µs korrekt gemessen wurden?
Ha! Die obigen Quellen widersprechen sich auch noch, was die Bit-Reihenfolge angeht: Einmal heißt es MSB first, einmal LSB. Mit LSB first und active HIGH (Bit=1 bei Spannung, also wenn kein Strom fließt) macht es endlich Sinn: Die Strom-Bitfolge 1110000 wird zu 11111000 = 0xF8 = Clock. Gelegentlich gibt es auch 10000000, daraus wird dann 11111110 = 0xFE = Active Sense. Dieses Internet aber auch... jede Menge Infos, aber die Hälfte ist einfach falsch.
Clemens L. schrieb: > Nein; MIDI funktioniert als Stromschleife. Die Spezifikation sagt > "Logical 0 is current ON." (Eine gewisse Spannung wird für die LED des > Optokopplers benötigt, aber die wichtige Größe ist der Strom.) Eben deshalb ist das hier Quatsch: "Every MIDI message transmitted starts with a 'Start Bit', this is when the signal current drops to 0mA, and is followed by a byte of data (Most Significant Bit (MSB) is transmitted first) and finishes with a "Stop Bit", which is when the current returns to 5mA" Im Ruhezustand fließen 0 mA. Wenn die Spannung auf 0V fällt, fließen 5 mA = "logical 0" = Start Bit. Dann kommt das LSB. Also Spannung, Strom und Bitreihenfolge verwechselt.
Vllt. hilft das beiliegende Schema noch ein wenig. UART bezeichnet hier direkt die Pins am MC, also mit CMOS/TTL Pegel und nicht das bei RS232 benutzte Spannungsschema. Da sieht mans also nochmal: Clemens L. schrieb: > Auch für die Datenbits gilt "Logical 0 is current ON".
Die Bitreihenfolge entspricht bei MIDI der bei RS232 verwendeten - d.h. jede UART, die mit Pegelwandlern für RS232 verwendet werden kann, kann auch für MIDI verwendet werden, sofern man die MIDI-spezifische Baudrate von 31250 Baud einstellen kann. Und so kann man mit einem AVR und einem "glatten" Quarz (also keinem sogenannten "Baudratenquarz") recht unproblematisch MIDI-Geräte bauen, denn 31250 lässt sich glatt aus 1 MHz und entsprechenden Vielfachen davon erzeugen.
Super, jetzt funktionierts (MIDI senden). Gleich noch eine Frage: In der Stromschleife fließen im Kurzschluss ca. 8 mA, über den MIDI-Port des RY-8 sind es noch 3,5 mA. Das ganze läuft bei 3,3 V. Muss ich noch Widerstände einbauen? Eigentlich ist das eher schon etwas knapp, weil es ja 5 mA sein sollten, oder?
3,5 mA sind zu wenig; deine Widerstände sind zu groß. Wie sieht denn deine Schaltung aus?
Die "Schaltung" sieht so aus, dass das MIDI-Kabel direkt am Link-Port eines Game Boy Advance hängt. Ohne Widerstände, weniger geht also nicht. Ich sende dem RY-8 seit 10 Minuten MIDI-Clock und er läuft brav im Takt, aber das kann natürlich bei anderen MIDI-Geräten anders aussehen. Ist halt eine experimentelle Bastellösung, die aber so simpel ist, dass man sie einfach mal ausprobieren kann, bevor man sich einen teuren Adapter kauft (Arduinoboy, MIDI Bastl). Zumindest kann man bei diesen geringen Strömen nichts kaputt machen.
Viele Optokoppler schalten ab 1,6 mA, aber es gibt auch MIDI-Geräte, die wirklich 5 mA verlangen. Ich vermute mal, dass der Ausgang des Gameboy-Mikrocontrollers einfach zu schwach für 5 mA ist. (Deshalb hat die offizielle Schaltung auch zwei Inverter.)
Das ist jetzt etwas OT, aber ich versteh das MIDI-Clock Schema nicht so ganz: Wenn ich dem RY-8 ein Start sende, braucht er noch 6 mal Clock, bis er wirklich startet. Ich hätte gedacht, das es gleich beim ersten Clock losgeht. Ist das wirklich der Standard, dass der Slave erst mal eine 1/16 Note wartet, bevor es losgeht? So eine Art Vorzählen?
Wahrscheinlich weiß der RY-8 noch nicht, wie schnell er laufen soll, weil vor dem Start keine Clocks kamen, oder weil er sie da ignoriert hat.
Das muss er auch nicht wissen, dafür bekommt er doch den Takt? Naja, wenn das die Norm ist, passe ich halt die Software entsprechend an, ggf mit einstellbaren vor-Clocks. Nur verstehen tu ichs hat nicht so ganz.
Der RY-8 braucht einfach nur eine Millisekunde zwischen Start und dem ersten Clock (steht auch so in der MIDI-Spec), dann gehts. Er hat zwar immer noch eine konstante Latenz von 8 Millisekunden, bis mal ein Ton kommt, aber das kann man ja am Master kompensieren, wartet der halt bissl.
Ich glaube auch, dass der einfach intern noch etwas arbeitet, bis er loslegt und da nur zufällig noch 6 Starts kommen, wenngleich 8ms etwas langsam sind. Mein RM1X ist da offenbar flinker. Was ich nicht sehe, ist, das am Master zu kompensieren. Ohne MTC musst du brav sequenziel abspielen, die Latenz bleibt ja ...(?) Wegen des Themas der Optokopplertreiberleistung: Ich würde einen Aktivsplitter hernehmen, also einen Verteiler auf elektrischer Ebene, um mehrere Geräte zu timen und zu versorgen. Also keinen MIDI-Verteiler und auch keine "THROUGH"-Ketten.
Alle, die das hardwaremässig machen, also das Signal direkt wieder als MIDI-Stromschleifensignal, möglichst entkoppelt, zur Verfügung stellen, also kein logisches Routing verwenden. Das musst Du im Einzelfall in der GA nachlesen. Suche mal nach MIDI Patchbay. Ich selber mache das direkt in DIY-Hardware. Ansonsten verwende ich eine MIDI IF von MIDIMAN und MOTU allerdings alle mit logischem Routing.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.