Forum: Mikrocontroller und Digitale Elektronik Midi-Expander ansteuern


von Daniel C. (dan1el)


Lesenswert?

Hallo,

würde gerne die Ansteuerung eines Midi-Expanders zunächst mal testweise 
mit einem 89C2051 (später mit AtMega32 o.ä.) realisieren.

Fürs erste würde es reichen, dem Expander ein oder zwei definierte Töne 
zu entlocken.

Das Testprogramm soll übrigens in Bascom geschrieben werden (ich weiß, 
es gibt programmiertechnisch gelberes vom Ei ;)).

Weil ich nicht grade ein grosser Midi-Experte bin, habe ich im Vorfeld 
schon mal allerlei Beiträge zum Thema gelesen.

Wenn ich das jetzt richtig verstanden habe, muss man folgendes machen:


hardwaremässig:

TXT über einen 220R-Widerstand mit Pin4 und +5V ebenfalls über 220R mit 
Pin5 des Expanders verbinden (bisweilen findet man auch andere Angaben 
und manche empfehlen hier die Verwendung eines Optokopplers)


softwaremässig:

Die UART Schnittstelle auf 31250 baud einstellen und per 
"Seriell-Out"-Befehl die entsprechenden Midi-Befehle z.B. als Hex-Codes 
ausgeben.


Weiß jemand, ob der Ansatz so weit ok ist?

Viele Grüsse,

Daniel

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Ein Optokoppler im Eingang eines jeden MIDI-Gerätes ist Pflicht. Der 
Ausgang bilded sich aus einer Stromschleife mit den von Dir erwähnten 
zwei Widerständen zwischen Ausgang des Controllers und +5V. Zahlreiche 
Schaltungen dazu befinden sich im Netz.

Das MIDI-Format ist ein simples UART 8D1SnP mit 31250Baud. Die Befehle 
teilen sich in ein Statusbyte mit gesetztem 7. Bit (MSB) und (mehrere) 
Datenbyte(s) mit gelöschtem 7. Bit. Viele MIDI-Befehle sind 3-Byte 
Befehle, zum Beispiel NoteOn mit Kanal im ersten Byte, Notennummer im 2. 
Byte und Anschlagstärke im 3. Byte.

von Andi (Gast)


Lesenswert?

Da du nur einen MIDI Ausgang benötigst brauchst du keinen Optokoppler 
(der ist nur am Eingang erforderlich).
Angenommen der Expander empfängt auf Kanal 1, so wird z.B. mit den 3 
gesendeten Bytes: $90, $3C, $7F ein Ton eingeschaltet, und mit: $80, 
$3C, $7F wieder abgeschaltet.

Andi

von juppi (Gast)


Lesenswert?

schau mal auf www.ucapps.de - da dürfte so ziemlich alles zu finden 
sein.

gruß

von Daniel C. (dan1el)


Lesenswert?

Danke für die schnelle Antwort!
Habe jetzt ein bisschen recherchiert und so allerlei zum Thema 
Midi-Eingang und Optokoppler gefunden, aber leider nichts 100%ig 
verwertbares.
Wie ich das verstehe, kann man den Optokoppler auch weglassen, wenn man 
die Midi-Leitung einer Soundkarte ansteuert (hilft hier wohl nicht 
weiter).
Bei mir soll zunächst zum Ausprobieren ein altes Roland Keyboard JW-50 
über Midi-In angesteuert werden (Diodenstecker).
Der Expander selber ist bis jetzt noch nicht einsatzbereit.

meine Vermutung:
TXT über 220R auf Optokoppler-In gegen Masse, Optokoppler-Out auf Pin5 
Keyboard gegen Masse, ausserdem +5V über 220R auf Pin4, ist das so 
korrekt???
(ausserdem Schutzdiode mit Anode von Masse zum OpKo-Eingang)
Hat vielleicht jemand einen link für die korrekte Beschaltung zur Hand?


Wenn man eine Note mit folgenden Werten übermitteln möchte ( NoteOn), 
würde das dann so aussehen: (?)

Kanal: 3
Notennummer: 57
Anschlagsstärke: 102

1. Byte: 3 + 128 = 131
2.Byte:  57 + 0 = 57
3.Byte:  102 + 0 = 102
(0 bedeutet 7.Bit "0")

Und wie übermittlet man den Befehl NoteOff?
(2. Byte = Notennummer, 3. Byte=Ausklanggeschwindigkeit)
Irgendwo muß ja im Statusbyte mit den unbenutzten Bits mitgeteilt 
werden, um welchen Befehl es sich handelt, oder reicht der erneute 
Aufruf der gleichen Notennummer dafür aus?

von Daniel C. (dan1el)


Lesenswert?

hupps, mein letztes Posting hat sich jetzt mit den beiden anderen 
Antworten überschnitten...

Also wenn ich das Roland JW-50 direkt ansteuere, brauche ich doch keinen 
Optokoppler???

Ok, dann werd ich gleich mal rauchenden Kopfes bei www.ucapps.de 
nachschauen!

von Frank S. (Firma: HSCS) (linuxerr)


Lesenswert?

Daniel C. wrote:
> Also wenn ich das Roland JW-50 direkt ansteuere, brauche ich doch keinen
> Optokoppler???
doch, denn die optokoppler dienen der galvanischen entkopplung der 
geräte (für audiogeräte besonders wichtig, zb wegen brummschleifen). bei 
midi handelt es sich um eine schnittstelle, bestehend aus zwei 
stromschleifen, die spannungspegel sind also nicht definiert. um kein 
risiko einzugehen solltest du den einen popligen optokoppler ruhig 
investieren.


tabellen zu den midicodes findest du mit gurgel massenhaft!
http://www.midimountain.com/midi/midi_status.htm

von Daniel C. (dan1el)


Lesenswert?

Hey, super, midicodemässig alles klar!

uC ist auch vorbereitet, jetzt bleibt eigentlich nur noch die Frage, wie 
der Optokoppler zwischen Platine und Keyboard geschaltet wird.

Hm, was sind denn Stromschleifen genau???
Klar, es fließen zwei Ströme, einer pro Gerät, und beide sind nur über 
den OpKo verbunden.

Was wäre denn, wenn das Keyboard schon einen Optokoppler eingebaut 
hätte? Würde dann ein vorgeschalteter nicht stören? Das kann man doch 
bestimmt mit einem Multimeter ausmessen, ob da eine "LED" hinter dem 
Eingang ist, oder nicht...

von Frank S. (Firma: HSCS) (linuxerr)


Lesenswert?

Daniel C. wrote:
> Was wäre denn, wenn das Keyboard schon einen Optokoppler eingebaut
> hätte? Würde dann ein vorgeschalteter nicht stören? Das kann man doch
> bestimmt mit einem Multimeter ausmessen, ob da eine "LED" hinter dem
> Eingang ist, oder nicht...

vielleicht solltest du dich mit den dokumentationen auseinandersetzen, 
bevor du da irgendwas zusammenfriemelst. natürlich hat dei keyboard 
schon einen optokoppler und zwar im eingang, das ist ja der sinn der 
entkopplung. jedes midigerät hat einen optokoppler im eingang. der 
ausgang des midigerätes liefert bei high-pegel einen strom, der den 
optokoppler im eingang des nächsten gerätes steuert. damit sind beide 
geräte potentialmässig entkoppelt.
schau mal zb hier
http://de.wikipedia.org/wiki/Musical_Instrument_Digital_Interface

von Andi (Gast)


Lesenswert?

Wie gesagt, der Optokoppler befindet sich jeweils am Eingang. Du hast 
aber einen Ausgang, der den Eingang des Expanders ansteuert. Da brauchst 
du nur die beiden Widerstände. So wie du es beschreibst ist es schon 
richtig, nur ob Pin 4 und 5 so stimmen (oder umgekehrt) müsste ich auch 
nachschauen. Aber das merkst du schnell...

Note ON: 144 + Kanal, Tastennummer, Anschlagstärke
NoteOff: 128 + Kanal, Tastennummer, 64
(Kanal jeweils 0..15, für Kanal 3 also: 2 )

Andi

von Andi (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch das Prinzip der MIDI Verbindung (im angehängten Bild).
Eigentlich is es nur eine Leuchtdiode (im Optokoppler) mit 
Vorwiderstand. Dieser Vorwiderstand wird aus 3 einzelnen 220 Ohm 
Widerständen gebildet beträgt also 660 Ohm. (5V - 1.7V ) / 660 = 5 mA.
Die Aufteilung auf 3 Widerstände ist nur dazu da, um die einzelnen 
Anschlüsse gegen Kurzschluss und bedingt auch Überspannung zu schützen.

Andi

von Daniel C. (dan1el)


Lesenswert?

Wow, Leute, vielen Dank für die Tipps! Es hat auf Anhieb geklappt.

Das Keyboard hat noch eine antiparallele Schutzdiode vor dem 
OpKo-Eingang, wie sich beim Ausmessen herausstellte.

Ansonsten Anschluss genau wie auf Andis Posting (MidiKonnekt.gif) 
vorgenommen. Danke!!!

Midisteuerungen sind also doch nicht so kompliziert ;O) !

Viele Grüsse an alle, die geschrieben haben und mit Rat und Tat für 
dieses Vorprojekt zur Seite standen!

Dann kommt jetzt als nächstes wohl der Midi-Expander dran...
:)

Gruss,
Daniel

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.