Verwenden eines MIDI-Anschlusses als MIDI-In und -Out (nicht gleichzeitig)

In meinem aktuellen (Arduino) Projekt habe ich (derzeit) 3 MIDI INs und 2 MIDI OUTs. Allerdings wäre es schön, wenn ich per Software (Arduino) jeden der MIDI-Anschlüsse als IN oder OUT konfigurieren könnte.

Die Schaltungen, die ich verwende, sind:

MIDI-Eingang

(Update: Meine MIDI-Eingangsschaltung hat eine 1N4001-Diode anstelle von 1N914 und zwischen Pin 6 und +5 V 10 Kohm anstelle von 220 Ohm).

MIDI-Ausgang

(Update: Meine MIDI-Ausgangsschaltung hat einen 10-Ohm-Widerstand anstelle eines 220-Ohm-Widerstands)

Was ich möchte, ist, den im obigen Bild gezeigten Anschluss als MIDI In ODER MIDI Out zu verwenden. Ich habe es noch nicht ausprobiert, da ich zu viele Zweifel habe und keine Komponente kaputt machen möchte. Ich habe jedoch darüber nachgedacht (mit meinen begrenzten elektronischen Kenntnissen) und denke:

  1. Pin 2 afaik für MIDI In, hat normalerweise +5V. In der MIDI-Eingangsschaltung ist es nicht verbunden, aber in der MIDI-Ausgangsschaltung ist es mit GND verbunden. Ich denke nicht, dass dies gut ist, wenn es als MIDI-Ausgang verwendet wird, was zu einem Kurzschluss (?) führt. Ich denke, ich muss es +5 V machen, wenn es als MIDI-Eingang und GND verwendet wird, wenn es als MIDI-Ausgang verwendet wird (also HIGH oder LOW 'digital' für Arduino setzen).

  2. Die Pins 1 und 3 bleiben in beiden Kreisen unberührt (also nehme ich an, dass ich das gleiche tun kann).

  3. Pin 4 und 5 sind etwas kniffelig, da sie verbunden sind. Ich denke, ich muss einen oder zwei Transistoren verwenden, um zwei alternative Pfade für die Pins 4 und 5 für den MIDI-Eingang und -Ausgang zu erstellen. Oder kann ich einfach eine bestimmte Spannung an den Pins 4 und 5 einstellen, wenn sie als MIDI In oder Out verwendet werden? (und was wären diese Werte?).

  4. Für den MIDI-Eingang wird ein Optokoppler verwendet, während für die MIDI-Ausgabe direkt der Arduino verwendet wird. Ich frage mich, ob ich für beide einen Optokoppler verwenden muss (da die Leute ihn "versehentlich" an einen MIDI-Ausgang eines MIDI-Geräts anschließen könnten.

  5. Und ich bin mir auch nicht sicher, wie ich mit den RX- und TX-Pins umgehen soll ... für 5 MIDI-Geräte müsste ich 5 RX- und TX-Pins verwenden, aber der Arduino (Mega) hat nur jeweils 4. Aber das ist wahrscheinlich eine Frage für das Arduino-Board.

(Link zur Arduino Stack Exchange-Frage zu Frage 5): Arduino-Frage

[aktualisieren]

Basierend auf der Antwort von CL:

  • Über den 220R-Widerstand, den Kondensator an GND und den Diodentyp: Ich muss prüfen, ob ich diese verwende (das obige Beispiel ähnelt eher einer generischen Schaltung, meine ist bereits ein kleiner Adapter). Ich werde Freitag genau meine Schaltung prüfen.
  • Obwohl ich vorhabe, einen 12V/1A-Adapter zu verwenden (noch nicht sicher, wie), könnte es dennoch besser sein, Speicher zu erhalten, falls ich später eine Batterie oder 5V von MIDI-Lösung verwenden möchte, also danke für die Bemerkung zu den anderen 220R Widerstand.
  • (Ich möchte keine physischen Schalter verwenden, ich möchte, dass sie (per Software) konfigurierbar sind, damit ein Ausgang MIDI In ODER MIDI Out ist. Das bedeutet für einen MIDI-Anschluss, dass er sowohl mit dem MIDI In als auch mit dem Ausgang verbunden sein sollte Schaltung, oder über einen Transistor (?), der per Software im Arduino gesteuert wird, aber ich weiß nicht, wie ich diesen Transistor in die MIDI In/Out-Schaltung einfügen soll und welche Art von Transistor verwendet werden soll ... oder vielleicht dort ist eine bessere lösung ... oder gar nicht möglich? -> Beantwortet schon von replate
  • Derzeit verwende ich ohne Probleme einen 6N138, außer dass ich bemerkte, als ich die erste Serie zum Debuggen verwendete, dass die Verarbeitung zu langsam ist, aber ich denke, das liegt an der Leistung der CPU / was auch immer, nicht am 6N138. Andererseits möchte ich auf keinen Fall den Optokoppler zum Schwachpunkt machen, weswegen ich auf einen anderen umsteige (z.B. H11L1).

Nach Ihren Artikeln:

  1. Das Problem ist, dass ich vorher nicht weiß, ob das richtige Kabel eingesteckt ist (ich werde dazu eine andere Frage stellen).
  2. Klar.
  3. Ich muss irgendwie die Pins 4 und 5 sowohl mit dem MIDI IN- als auch mit dem MIDI Out-Schaltkreis verbinden. Ein "physischer" Schalter (SPDT) reicht nicht aus. -> bereits von satt beantwortet
  4. In diesem Fall brauche ich nichts Besonderes dafür zu tun.
  5. Ich habe aus anderen Quellen gehört, dass eine Softwareserie nicht empfohlen wird. Ich möchte auch etwas verarbeiten, aber vielleicht hilft es.

Aktualisierung in Arbeit:

  • Ich habe die Schaltung mit vorhandenen Komponenten erstellt, die ich habe, und stattdessen einen DIP-Schalter verwendet, bis ich den CD4053 habe (mit 4 Dip-Schaltern, 2 für MIDI In, Pin 2 und 4 und 2 für MIDI Out, Pin 2 und 4).
  • Mit 6N138 ... Ich werde sie ersetzen, bis die H11L1 eintreffen.
  • Mit 1N4014 ... Ich werde sie ersetzen, bis die 1N4148 eintreffen.
Ihre wiederholte Erwähnung des „physischen Schalters“ deutet darauf hin, dass Sie nicht verstehen, was CL vorschlägt. SPDT ist eine Verbindungskonfiguration, sie ist nicht auf fingerbetätigte Schalter beschränkt. Google die von ihm benannten Teile, diese werden digital gesteuert. Was "Software-Seriennummer wird nicht empfohlen" betrifft, ist dies Unsinn.
@replete Ich kann nur SPDT-Schalter / Schalter finden, die mit dem Finger geschaltet werden müssen. Ich kann das von ihm benannte Teil nicht finden (die Suche nach SPDT zeigt nur Informationen über das 'allgemeine Prinzip' von SPDT, aber für Teile sehe ich nur Umschalter und ähnliche Teile ... übersehe ich etwas?
@replete ... heißt das ein 'analoger Schalter', so etwas wie TS3A44159?
Ich finde ein Datenblatt bei der allerersten Google-Suche nach CD4053: ti.com/lit/ds/symlink/cd4051b-mil.pdf . Sie können nach 4053 selbst, 74HC4053 usw. suchen. Richtig, es ist ein SPDT-Analogschalter, wie von CL benannt.
Ich habe nach SDPT-Schalter/IC gesucht ... Ich sehe, dass der 4053 ein Multiplexer/Demultiplexer ist, aber ich denke, er wird als Schalter verwendet (oder "ist" ein Schalter). Entschuldigen Sie, dass ich vielleicht triviale Fragen stelle, aber ich lerne viel, also vielen Dank für die Antwort.

Antworten (1)

Es gibt einige Fehler und suboptimale Entscheidungen, die in den Schaltungen üblich sind, die in der Arduino-Community blind kopiert und eingefügt werden:

  • Der Ausgangskreis muss einen 220-Ω-Widerstand zwischen TXD und Pin 5 des Steckers haben.
  • Der Pull-up-Widerstand zwischen Pin 6 und 8 ist viel zu klein; es verschwendet Strom und belastet die Versorgung unnötig. Machen Sie es mindestens 1 kΩ.
  • Die 1N914-Diode war vor Jahrzehnten veraltet; Sie können es durch ein 1N4148 ersetzen. (Der 1N4148 ist abwärtskompatibel; was heutzutage als 1N914 verkauft wird, ist nur ein umbenannter 1N4148, möglicherweise mit einem höheren Preis.)
  • Pin 2 des Empfängers sollte über einen kleinen Kondensator mit Masse verbunden sein (um hochfrequentes Rauschen zu reduzieren).
  • Der 6N138 ist ziemlich langsam und eine schlechte Wahl für digitale Hochgeschwindigkeitssignale. Der PC900 aus der MIDI-Spezifikation wird eingestellt, aber es war nur ein Klon des H11L1, der immer noch weit verbreitet ist. Verwenden Sie alternativ den 6N137.

Es wäre eine gute Idee, die MIDI-Spezifikation zu lesen .

Ohnehin:

  1. Pin 2 des Steckers ist die Kabelabschirmung und hat überhaupt nichts mit +5 V zu tun. Sie müssen eine Art Schalter implementieren, um ihn nur bei Bedarf anzuschließen. (Um die Arbeit zu erleichtern, können Sie es offen lassen, wenn Sie Empfänger sind.)

  2. Die Pins 1 und 3 sind mit nichts verbunden.

  3. Die Pins 4 und 5 implementieren die MIDI-Stromschleife, was bedeutet, dass Sie nicht einfach eine Spannung einstellen können. Sie müssen SPDT-Schalter verwenden, um sie an den richtigen Stromkreis anzuschließen.

  4. Ein Optokoppler kann nicht in umgekehrter Richtung verwendet werden.

  5. Wenn Sie nicht genügend Hardware-UARTs haben, müssen Sie sie im Allgemeinen in Software implementieren (mit Hilfe von Timern oder Bit-Banging planen). MIDI ist ziemlich langsam (31250 Baud), daher ist eine Software-Emulation auf den meisten Mikrocontrollern tatsächlich möglich.

Zusammenfassend: Die einzige praktische Möglichkeit, einen MIDI-Anschluss für Eingang und Ausgang gemeinsam zu nutzen, besteht darin, beide Schaltungen aufzubauen und Schalter (z. B. CD4053, 74LV4053 oder andere analoge SPDT-Schalter, aber berücksichtigen Sie den Widerstand der Schalter) zu verwenden, um nur einen davon zu aktivieren ihnen.

Sie könnten auch hinzufügen, dass 6N138 zwar mehr oder weniger funktionieren kann, ein schnellerer digitaler Optokoppler jedoch besser ist. Die Spezifikation gibt PC900 an, das derselbe Teil wie der weit verbreitete H11L1 ist.
@replete Danke. Aber mit einem Basis-Bypass-Widerstand wie gezeigt funktioniert der 6N138 tatsächlich zuverlässig. (OTOH, es ist noch eine andere Sache, etwas falsch zu machen …)
Da ich viele Kommentare zu Ihrer großartigen Antwort habe, werde ich sie in die Antwort aufnehmen.
@CL: Danke für deine Antwort (wieder). Ich habe noch eine Frage: Sie sagen, ich muss einen kleinen Kondensator zwischen Empfängerpin 2 und GND schalten, aber ich dachte, ich müsste GND auch getrennt halten (was bedeutet, dass zwischen den MIDI-Anschlüssen und dem Arduino überhaupt kein Signal vorhanden ist, deshalb der Optokoppler wird verwendet) ... und wenn ich einen Kondensator einsetze, besteht zumindest eine "Verbindung".
@CL: Ich habe den letzten Absatz (der am wichtigsten ist) völlig übersehen. Ich habe einen Satz CD4053 zum Ausprobieren bestellt :-)
Es darf keine DC-Verbindung bestehen, um Brummschleifen zu vermeiden. Aber die Abschirmung funktioniert viel besser, wenn hochfrequente Störungen an beiden Enden zur Erde abfließen können.
Die Verwendung eines analogen Schaltchips ist IMO hier nicht angebracht, Sie benötigen aufgrund der unbekannten Gleichtaktspannung wirklich ein Relais.
@PeterGreen In der Praxis gibt es keine großen CM-Spannungen; Einige billige No-Name-MIDI-Interfaces lassen die Isolierung weg und funktionieren trotzdem (technisch). Die Isolierung sollte nie mehr als ein Mittel sein, um Brummschleifen zu verhindern.