Hallo, ich versuche gerade eine Adapter-Platine zu bauen mit der man ein MIDI-Signal von einem Instrument (in meinem Fall ein Sampling-Keyboard) über UART einlesen kann. Den Schaltplan habe ich im Internet gefunden. Vielfach sind die Aufbauten, die man so findet, sehr ähnlich. Das Problem ist nun leider, dass die Daten, die über die UART-Schnittstelle reinkommen völliger Unsinn sind. Manche Keyboard-Tasten tun überhaupt nichts, andere tun manchmal was, alles ist vollkommen zufällig (selbe Taste tut immer was anderes) und meistens kommen nur Null-Bytes (0b00000000) raus. Mit einem kommerziellen MIDI-USB-Adapterkabel funktioniert das Keyboard. Auch von einem kommerziellen MIDI-Player lässt sich über diese Schaltung absolut nichts einlesen. Als Einstellungen für den Serial-Port verwende ich folgendes: - 31.250 bps - 8 Datenbits - 1 Stop-Bit - keine Parität - Flow Control deaktiviert Hat jemand evtl. eine Idee ob die Schaltung grundsätzlich so stimmt?
Sieht bei mir ähnlich aus (vorausgesetzt, an CN3_1 liegen +5 V an): R2 hat bei mir 8k2, zusätzlich liegen zwischen U1_7 und U1_5 (also GND) 47k.
Der Optokoppler ist vielleicht ein bisschen zu langsam. Schau mal ins Datenblatt und halte dagegen, wie lang die Bit-Zeit bei 31500 baud ist. Darlington-Optos sind allgemein nicht die schnellsten.
:
Bearbeitet durch User
S. L. schrieb: > Sieht bei mir ähnlich aus (vorausgesetzt, an CN3_1 liegen +5 V an): R2 > hat bei mir 8k2, zusätzlich liegen zwischen U1_7 und U1_5 (also GND) > 47k. Und bei Dir funktioniert es wie es soll? @Felix: Hast Du ein Oszilloskop?
Für Bastelei besser einen Digitalkoppler nehmen, z.B. 6N137. Für Serie sind die paar 10ct natürlich zu teuer...
Eventuell von Pin7 des OK einen Widerstand von einigen zehn Kiloohm nach Masse, dann schaltet er schneller aus. Edit: ist in dem Bild von Beitrag "Re: MIDI -> UART Bridge" auch so dargestellt.
:
Bearbeitet durch User
an Felix: Falls das unklar sein sollte: die rechte Seite geht natürlich an den UART-Port eines uControllers.
S. L. schrieb: > Nachtrag, vor langer Zeit im Internet gefunden. Das Bild ist auch im Wikipedia-Artikel zu MIDI. Man beachte auch den 470 Ohm Kollektor-Widerstand.
> Das Signal was rauskommt ist invertiert.
Das hatte ich sagen wollen, und jetzt habe ich auch die Stelle im
Tietze/Schenk gefunden: "In der RS 232-Norm ... werden die Daten in
negativer Logik ... übertragen."
:
Bearbeitet durch User
S. L. schrieb: > "In der RS 232-Norm ... werden die Daten in > negativer Logik ... übertragen." Aber hier geht es nichtmal um RS232..
Nun ja, so habe ich Felix verstanden, Anschluß an PC:
> Als Einstellungen für den Serial-Port verwende ich folgendes ...
Nachtrag:
Wie dem auch sei, es sind genügend Kenner hier versammelt, da möchte
ich mich verabschieden.
Und da ich Spoerls Buch gerade zur Hand habe: "Ech ben ein alter Mann
und gähe leber fröh ins Bette."
:
Bearbeitet durch User
Nur der Vollständigkeit halber angemerkt: Wird als UART die normale Onboard-UART eines PCs verwendet, kann der Ansatz nicht funktionieren, auch wenn man die nötigen Pegelwandler verwendet. Das liegt daran, daß die PC-Uart die benötigte Baudrate nicht erzeugen kann; der Baudratengenerator wird mit einem Takt von 1.8432 MHz gespeist und durch 16 geteilt - das ergibt die höchstmögliche Baudrate von 115200. Und jede weitere Baudrate wird durch ganzzahliges Teilen erzeugt, d.h. die weiteren möglichen Baudraten sind 57600, 38400, 28800, 23040, 19200 ... Bei einer USB-UART-Bridge wie z.B. FT232 sieht das natürlich anders aus, die verwendet einen komplett anders konstruierten Baudratengenerator und kann deswegen auch die MIDI-Standardbaudrate verarbeiten. Und bei einem µC sieht das natürlich auch komplett anders aus. Ältere AVRs muss man mit einer passenden Taktfrequenz betreiben, damit man den MIDI-Standardtakt verwenden kann, aber das ist einfach, da das 16fache exakt 500 kHz sind. Wenn man also keinen "Baudratenquarz" nutzt, sondern die üblichen 8 oder 16 MHz, sollte alles klappen.
H. H. schrieb: > Für Bastelei besser einen Digitalkoppler nehmen, z.B. 6N137. Für Serie > sind die paar 10ct natürlich zu teuer... Ich habe die MIDI Interfaces immer mit PC900 aufgebaut. Gab nie Probleme.
Kann es sein, dass der PC900 obsolet ist? Die Segor-Seite bietet den H11L1M als möglichen Ersatz an.
Harald K. schrieb: > Nur der Vollständigkeit halber angemerkt: > > Wird als UART die normale Onboard-UART eines PCs verwendet, kann der > Ansatz nicht funktionieren, auch wenn man die nötigen Pegelwandler > verwendet. Hier hat "Pichler" einfach mal recht. Nein, dass kann nicht funktionieren. ☺ > Das liegt daran, daß die PC-Uart die benötigte Baudrate nicht erzeugen > kann; der Baudratengenerator wird mit einem Takt von 1.8432 MHz gespeist > und durch 16 geteilt - das ergibt die höchstmögliche Baudrate von > 115200. Und jede weitere Baudrate wird durch ganzzahliges Teilen > erzeugt, d.h. die weiteren möglichen Baudraten sind 57600, 38400, 28800, > 23040, 19200 ... Viel häufiger findet man allerdings einen 22,1184 MHz Quarz. Sind einem die übrigen Funktionen eines Multi-IO-Chips nicht so wichtig, kann man einfach "Umquarzen" auf einen 18 MHz Quarz. Dann liefert die Einstellung 38400 baud die richtige Baudrate für MIDI. Mit einer 8 Port seriellen Karte, habe ich das auch schon in der Praxis gemacht, und es bescherte mir 8 MIDI-Out-Ports. Von einigen Keyboardherstellern gibt es auch Treiber, die eine Verwendung serieller Ports als MIDI-Port erlauben.
Cartman E. schrieb: > Hier hat "Pichler" einfach mal recht. Welche schwere Störung hast Du eigentlich in Deiner Kindheit mitbekommen? Was soll das?
Cartman E. schrieb: > Nein, dass kann nicht > funktionieren. Tuts aber doch, zumindest in z.B. HTerm. Da kann man manuell die 31250 Baud eintragen (und dann auch im Setting speichern) und HTerm funktioniert mit MIDI. Das ganze mit einem CH340/341 als USB-Uart.
:
Bearbeitet durch User
Matthias S. schrieb: > Cartman E. schrieb: >> Nein, dass kann nicht >> funktionieren. > > Tuts aber doch, zumindest in z.B. HTerm. Da kann man manuell die 31250 > Baud eintragen (und dann auch im Setting speichern) und HTerm > funktioniert mit MIDI. Das ganze mit einem CH340/341 als USB-Uart. Das USB-UARTs fraktionale Teiler haben können, wurde schon diskutiert und stellt keine Neuigkeit dar.
Cartman E. schrieb: > Schmeckt dir deine "eigene" Medizin nicht? Wo habe ich Dich erniedrigend als Säufer dargestellt?
M.A. S. schrieb: > Kann es sein, dass der PC900 obsolet ist? Ja. Wahrscheinlich, weil es keine SMD-Variante gab. > Die Segor-Seite bietet den H11L1M als möglichen Ersatz an. Der PC900 war in der Tat ein Klon des H11L1.
Harald K. schrieb: > Das liegt daran, daß die PC-Uart die benötigte Baudrate nicht erzeugen > kann; der Baudratengenerator wird mit einem Takt von 1.8432 MHz gespeist > und durch 16 geteilt - das ergibt die höchstmögliche Baudrate von > 115200. Und jede weitere Baudrate wird durch ganzzahliges Teilen > erzeugt, d.h. die weiteren möglichen Baudraten sind 57600, 38400, 28800, > 23040, 19200 ... danke, es schwebte mir im Hinterkopf und du bist der Erste der es bestätigt! Die Midibaudrate konnte ich normalerweise auch nie einstellen!
Matthias S. schrieb: > Cartman E. schrieb: >> Nein, dass kann nicht >> funktionieren. > > Tuts aber doch, zumindest in z.B. HTerm. Da kann man manuell die 31250 > Baud eintragen (und dann auch im Setting speichern) und HTerm > funktioniert mit MIDI. Das ganze mit einem CH340/341 als USB-Uart. Da wird wohl intern eher 33600 (einzige offiziell unterstützte Baudrate in diesem Bereich) eingestellt werden und die Toleranz erlaubt gerade noch so die Funktion.
Die Win32-API, die auch vom (irreführend als Terminalprogramm bezeichneten) HTerm genutzt wird, lässt beliebige Werte als Baudrate zu. Welche Baudrate dann aber tatsächlich genutzt wird, entscheidet der verwendete Devicetreiber bzw. die verwendete Hardware. Die Onboard-Schnittstellen des PC, mit 8250/16550 oder Nachfolgern bestückt, verhalten sich so, wie ich weiter oben beschrieben habe: Die leiten ihre Baudraten mit einem ganzzahligen Teiler aus 115200 (Teiler 1) ab. Und damit kann man zwar 31250 einstellen, erhält aber 33600. Einfach, weil die Hardware gar nicht anders kann. USB-UART-Bridges, selbst der grindige Mist von Prolific, verwenden aber deutlich andere Baudratengeneratoren, und können daher auch deutlich höhere Baudraten als 115200 abliefern. Kurz: Hier sind USB-UART-Bridges deutlich im Vorteil gegenüber den sonst so gerne gesehenen "echten" seriellen Schnittstellen.
Harald K. schrieb: > Kurz: Hier sind USB-UART-Bridges deutlich im Vorteil gegenüber den sonst > so gerne gesehenen "echten" seriellen Schnittstellen. Stimmt. Aber auch die haben Limits und die CH340/341 können keine 31250. Zumindest wenn man deren eigenem Datenblatt Glauben schenken darf. Und nur so nebenbei: Ich nutze diverse PL2303 seit Ewigkeiten und habe nicht die geringsten Probleme feststellen können. (Ausschließlich unter Linux versteht sich) Auch bzw. gerade bei sehr hohen Baudrates jenseits der 1M/2M Grenze übertragen die Dinger enorme Datenmengen ohne Übertragungsfehler.
Norbert schrieb: > Aber auch die haben Limits und die CH340/341 können keine > 31250. Zumindest wenn man deren eigenem Datenblatt Glauben schenken > darf. Wenn ich einen CH340 wie er auf diesen Nano-Clones zu finden ist per HTerm auf 31250 Baud einstelle und mit dem Scope die Bitzeit nachmesse kommt hier 32,1 µs (31152 Bps) raus. Das ist 0,3% Abweichung und sollte für MIDI noch gut genug sein.
Norbert schrieb: > Da wird wohl intern eher 33600 (einzige offiziell unterstützte Baudrate > in diesem Bereich) eingestellt werden und die Toleranz erlaubt gerade > noch so die Funktion. Nö. Mit Oszi überprüft, passt das +/- 100ns genau. Aber wie o.a. ist das ja kein alter 16550, sondern eine USB-Uart Bridge. Die können das. Mich wundert, des es noch 16550 im Betrieb geben soll.
:
Bearbeitet durch User
Beitrag #8002909 wurde vom Autor gelöscht.
Tja, dann können die Dinger anscheinend etwas, was in deren höchst eigenen Datenblättern explizit nicht erwähnt ist.
Norbert schrieb: > Tja, dann können die Dinger anscheinend etwas, was in deren höchst > eigenen Datenblättern explizit nicht erwähnt ist. Die Chinesen Nehmen es offenbar nicht so Genau mit ihren Datenblättern... Das ist auch ein Grund warum ich mich bisher nicht mit Dingen von Espressif angefreundet habe.
Hallo, hab mit meinem RolandE20 und Arduino ähnliches programmiert, Als Optokoppler der 6N139 und die Daten waren schon die richtigen. Gruß Martin
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.


