MIDI-Befehle senden

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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.