Forum: Mikrocontroller und Digitale Elektronik MIDI: fehlerhafter Empfang


von Helmut N. (helmi)


Lesenswert?

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

von Stefan H. (shaun)


Lesenswert?

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.

von Helmut N. (helmi)


Lesenswert?

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

von Stefan H. (shaun)


Lesenswert?

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.

von Helmut N. (helmi)


Lesenswert?

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
Noch kein Account? Hier anmelden.