Forum: Mikrocontroller und Digitale Elektronik MIDI-Befehle senden


von Knut (Gast)


Lesenswert?

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 :-)

von Michael U. (amiga)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Soul E. (Gast)


Lesenswert?

Ü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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Clemens L. (c_l)


Lesenswert?

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
Noch kein Account? Hier anmelden.