Hallo, liebe MIDI-Freunde! Ich habe eine "klassische" MIDI-Eingangsschaltung aufgebaut: Optokoppler CNY17-3 mit Pullupwiderstand 1,5 kOhm und Anschaltung des "open collector" unmittelbar an den RxD-Eingang des Mikroprozessors AT89C4051, Takterzeugung durch einen 24-MHz-Quarz; die Timer 1- Einstellung für die serielle Schnittstelle TH1 = 0xFE; (weiters: TMOD = 0x20; SCON = 0x50;) ergibt die erforderliche Rate von 31250 Baud. Zur Erzeugung der MIDI-Eingangssignale verwende ich den MIDI-Footcontroller "MFC10" von YAMAHA. Beim Übertragen von Control-Change-Befehlen mußte ich fallweise eine Verfälschung eines (manchmal auch zweier Bits) im 2. Datenbyte feststellen (statt einer "1" wurde "0" empfangen). Die Daten habe unmittelbar aus dem Empfangs-Register (SBUF) ausgelesen. Ein Beispiel: aus hexadezimal 5A wird fälschlicherweise 58, das bedeutet in Bitschreibweise: aus 0101 1010 (richtiger Wert) wird 0101 1000 oder manchesmal sogar 0001 1000 Da ich annehme, dass die Steuerbefehle vom MFC10 ordnungsgemäß gesendet werden und das MIDI-Kabel soweit in Ordnung ist, kann ich mir die o.a. Signalverzerrung nicht erklären. Eure Lösungsvorschläge sind mir daher sehr willkommen. Mit freundlichen Grüßen helmi
Also gibt es Fehler beim Übergang 0->1 wie es aussieht. Klar, die "1" kommt vom Pullup, der Transistor des sowieso lahmen CNY muss erstmal ausgeräumt werden. Entweder experimentierst Du mit Widerstand (100k...1M) zwischen B und E des Fototransistors bei gleichzeitiger Variation des Pullups, oder Du machst es gleich richtig und nimmt einen 6N138, der hat einen Schmitt-Trigger an Bord und macht auch die Geschwindigkeit klaglos mit. Für die og. Tests mit dem CNY würde es sich anbieten, die Flanken mit dem Oszi zu beobachten und auf optimale Steilheit v.a. der steigenden Flanke zu trimmen.
Vielen Dank für die rasche Antwort, sie ist eine gute Basis für meine weiteren Versuche. Den Vorschlag mit dem 6N138 finde ich ebenfalls sehr interessant. Es beschäftigt mich allerdings die Frage, warum so viele MIDI-Schaltpläne fast nur den CNY17 enthalten, ist etwa eine falsch verstandene Sparsamkeit der Grund dafür? Das Forum finde ich spitze liebe Grüße Helmut
Jo :) Eigentlich war ja mal ein PC900 vorgesehen, ein CNY.. geht auch - aber nur, wenn das CTR stimmt und die Schaltung danach die Flanken nicht so genau nimmt. Der AVR tastet zB 16x pro Schrittlänge ab und gewichtet dann, andere UARTs nehmen in der Mitte eine Probe, das kann schon zu unterschiedlichen Ergebnissen führen. Ein Schmitt-Trigger (74HC14 zB) dazwischen kann auch Wunder wirken.
Ich freue mich über die zusätzlichen Informationen. Die Variante mit dem Schmitt-Trigger hatte ich schon einmal in Erwägung gezogen; weil ich aber dem RxD-Eingang einen "open collector" anbieten wollte, um eine Zerstörung des Schmitt-Triggers zu vermeiden (falls bei einem Programmierfehler einmal der RxD-Eingang irrtümlich als Ausgang wirksam wird und dabei auf "Low" geht, während der Schmitt-Trigger "High" ausgibt), habe ich die Idee wieder fallen gelassen. Ich könnte mir aber eine Kombination aus einem Schmitt-Trigger 74HC14 und einem 74HC05 bzw. 74LS05 vorstellen, mit der würde ich einerseits die Flanken bereinigen, andererseits das Signal in die ursprüngliche Lage "zurück-invertieren" und zugleich einen "open collector" am RxD-Eingang haben. (Anmerkung: Leider ist mir kein Schmitt-Triggerbaustein mit "open collector" bekannt). Die von Dir vorgeschlagene Methode mit dem Ausräumwiderstand werde ich ebenfalls ausprobieren. Mit herzlichem Dank für die guten Ratschläge Helmut
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.