Hallo, ich habe ein Übertragungsproblem mit Midi. Und zwar habe ich bei
meinem ATmega644p zwei UART´s, wobei ich auf den ersten (RXD0 und TXD0)
zwei MIDI-Buchsen für TX und RX gehängt habe. Als Taktgeber verwende ich
übrigens den internen 8Mhz Oszillator.
Nun gehe ich in die while(1)-Schleife in der Main-Funktion, und schiebe
dort ein ASCII-Zeichen, ( in meinem Fall 0b01010101 ) in das
Sende-Register (UDR0), das mir dann das entsprechende UART-Signal auf
dem TXD0-Pin mit Midi-Baudrate von 31250 ausgibt. Siehe Anhang
"31250_BAUD_TXD0_Start.png"
Hier sieht das Signal noch schön aus....
Jetzt habe ich aber die zwei Midi-Buchsen die ja auf RXD0 und TXD0
hängen mit einem Midi-Kabel verbunden. Also kurzgeschlossen.
(PS: Die Sende-und Empfangsschaltung habe ich aus dem
Mikrocontroller-Beitrag
https://www.mikrocontroller.net/articles/MIDI".)
Oder Siehe Anhang "Midi Sender.png" und "Midi Empfänger.png"...hier habe
ich beim Sender 220 Ohm Widerstände verwendet, weil ich ja eine 5V
Spannungsversorgung habe.
Aber abgesehen davon sieht mein UART-Signal, nachdem es durch die
Leitung gegangen ist, und durch den Optokoppler (PC900V) gewandert ist,
folgendermaßen aus: Anhang "31250_BAUD_RXD0_Ende.png"
Dabei ist das Midi-Kabel noch sehr kurz gewählt (geschätzt 1m).
Sobald aber bei RXD0 ein komplettes Byte übertragen wurde, wird bei mir
ein Interrupt ausgelöst, und das Empfangene Zeichen auf den 2ten UART,
den der Mikrocontroller besitzt ausgegeben, also ins Register UDR1
geschrieben (Also bei PIN TXD1 ausgegeben). Wenn ich dort jetzt das
Signal mit dem Oszilloskop messe, sieht es so aus: Anhang
"31250_BAUD_TXD1_Ausgabe.png"
Leider wird, wie man sicher an den Screenshots erkennen kann, das Signal
verfälscht, und so falsch wiedergegeben. Woran kann das liegen ? Ich
nehme an der Hardware, oder ?? Was kann ich beim Schaltplan ändern ??
Sicherheitshalber befindet sich hier noch der µC-Code:
Danke vielmals schon im Voraus,
mfg Felix
Felix schrieb:> Woran kann das liegen ? Ich> nehme an der Hardware, oder
Sicher ist es die Hardware. Entweder kommt da nicht genügend Licht auf
den Empfangsoptokoppler - also zu wenig Strom im MIDI Kabel, oder du
hast ein Problem mit dem Pullup am Ausgang des PC900, es sieht so aus,
als wäre der so gut wie nicht vorhanden.
Es muss übrigens zwingend ein schneller Optokoppler ie der PC900 sein,
ein z.B. CNY17 oder so wäre zu langsam für MIDI.
Wenn du ein MIDI Gerät hast, kannst du diese Sache mit dem Strom auch
damit ausprobieren. Sende dem Gerät ein z.B. 'Program Change' aus zwei
Bytes (0xC0 + 0x0n) und schau, ob es reagiert. n ist hierbei die
Programnummer.
Felix schrieb:> Aber abgesehen davon sieht mein UART-Signal, nachdem es durch die> Leitung gegangen ist, und durch den Optokoppler (PC900V) gewandert ist,> folgendermaßen aus: Anhang "31250_BAUD_RXD0_Ende.png"
Die ansteigende Signalflanke sollte viel steiler sein; mit dieser
Beschaltung ist der PC900 für 1 Mbit/s spezifiziert.
Ist der Pullup wirklich 270 Ω? (1 kΩ würde auch problemlos laufen.) Gibt
es da keinen Wackelkontakt? Du hast nicht zufällig Pins 5 und 6
verwechselt?
Im Übrigen sollte der Sender ca. 5 mA liefern. Rechne mal nach was Deine
Schaltung liefern würde, wenn der Controller es denn könnte (es muß
kurzschlußfest sein).
Ich habe 2 x 220 Ohm an 5V genommen.
Warum ist eigentlich keinem aufgefallen, dass die Kurve eine
Zeitkonstante von 27 µs (= 270 Ω × 0,1 µF) hat?
Du hast den Kondensator falsch angeschlossen; er gehört zwischen GND und
VCC.
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang