Hallo, ich habe folgende Frage: wenn ich einen MIDI-Befehl, (also eine Binärzahl, max. 3 Bytes) an eine MIDI-Schnittstelle senden will, wie genau mache ich das? Also im Prinzip müsste ich ja einen Ausgang nehmen, an dem ich nacheinander eben entweder eine 1 oder eine 0 "ausgebe" oder? Aber woher weiß ich dass die jeweiligen Ziffern "lang genug anliegen", sodass sie auch vom zu empfangenden Gerät richtig erkannt werden? Das kann ich doch nur als gegeben hinnehmen, wenn ich wüsste, dass die Zeit, die der Mikrocontroller zum Abarbeiten eines Zyklus länger braucht, als das empfangende Gerät für einen "Einlese-Zyklus"? Soll ich nun nach jedem "Anlegen" einer Ziffer eine kurze Verzögerung implementieren bevor die nächste Ziffer ausgegeben wird? Wenn ja, wieviele ms? Wobei mir das natürlich komisch vorkommt, weil das die Signalübertragung ja unnötig langsam machen würde... Vielleicht kann mir hier jemand helfen? Also mich würde jetzt vor allem der theoretische Ansatz dazu interessieren, nicht wie ich es konkret auf einem konkret gegebenem Chip programmiere, da ich mich für mein Projekt noch nicht endgültig für einen Chip entschieden habe... Vielen vielen Dank schonmal für eure Antworten :-)
Hallo, der erste Googletreffer: https://www2.informatik.uni-hamburg.de/~schaetti/musiksynth/technik/MIDI.html MIDI ist schließlich eine Schnittstelle, also muß es auch eine Beschreibung dafür geben, oder? Gruß aus Berlin Michael
Knut schrieb: > Aber woher weiß ich dass die > jeweiligen Ziffern "lang genug anliegen", das ist über die Zeiten definiert. Nennt sich gemeinhin die Baudrate. > Wobei mir das > natürlich komisch vorkommt, weil das die Signalübertragung ja unnötig > langsam machen würde... Kommt auf die Baudrate an. > Also mich würde jetzt vor allem der theoretische Ansatz dazu > interessieren, der "theoretische" Ansatz ist der, dass du die UART in deinem µC studierst.
Üblicherweise verwendest Du dafür eine UART. Die weiss dann, wie lange ein Bit dauert. Aus SW-Sicht ist das ein Register, in das Du Dein Byte reinschreibst. Die Hardware schiebt es dann mit passendem Timing und Framing (Startbit, Stopbits) raus. Aus HW-Sicht ist die UART entweder Bestandteil des Mikrocontrollers oder ein separater Baustein, der an den Bus des Mikroprozessors angeschlossen wird. Du kannst das Timing auch komplett in SW machen, aber dann must Du in der Tat genau wissen, wie lange die einzelnen Maschinenbefehle dauern. So hat man es vor 40 Jahren gemacht, heutztage eher nicht mehr.
Knut schrieb: Ach ja. > Wenn ja, wieviele ms? Nein. Mit Millisekunden bist du da ein paar Grössenordnungen zu langsam. Das geht schon ein "bischen" schneller. MIDI überträgt mit einer Baudrate von 31250. Also 31250 Bits pro Sekunde. 1 Bit hat daher eine zeitliche Länge von 0.032 Millisekunden.
Die Spezifikation sagt: > The hardware MIDI interface operates at 31.25 (+/- 1%) KBaud, > asynchronous, with a start bit, 8 data bits (D0 to D7), and > a stop bit. This makes a total of 10 bits for a period of > 320 microseconds per serial byte. The start bit is a logical > 0 (current on) and the stop bit is a logical 1 (current off). > Bytes are sent LSB first. Das sind alles die üblichen Standardeinstellungen für einen UART. Knut schrieb: > Aber woher weiß ich dass die jeweiligen Ziffern "lang genug > anliegen", sodass sie auch vom zu empfangenden Gerät richtig > erkannt werden? Das A in "UART" steht für "asynchronous". Das heißt, das beide Geräte einen mehr oder wenigen übereinstimmenden Takt für ihre UARTs benutzen müssen. Bei einer Abweichung von mehr als 1% würden der summierte Fehler am letzten Bit zu groß werden.
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.