MIDI-Befehle senden

Gast #4399257
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 :-)
#4399274
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.
Gast #4399282
Ü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.
#4399285
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.
#4399299
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.