Probleme mit MIDI Out (Neuling)

OP #231663
Lesenswert?

Hallo,
Ich lese schon eine ganze zeit mit und jetzt habe ich mich mal bei euch
angemeldet.
Ich probiere jezt schon seit einigen Tagen einem Atmega8 ein paar
MIDI-Signale zu entlocken und es will nicht so recht funktionieren.

Zur Situation:
der Atmega läuft mit 16MHz Baudrate auf 31250 eingestellt
am TXD über 220 Ohm auf pin 2 des Dinsteckers und pin 5 über 200 Ohm an
Vcc. Wenn ich das ganze an den PC anschließe und mir das mit der
Software midimon anschaue kommt überhaupt nichts an.
Wenn ich TXD über einen MAX232 rausschicke und mir das ganze mit einem
Terminalprog. anschaue kommt zwar was an aber nicht die Werte die ich
geschickt habe. Das tolle an der Sache ist wenn ich auf 38400 Baud gehe
kommt alles sauber im Terminalprogramm an. (ich weiss nicht ob das
Terminalprogramm bzw die Serielle Schnittstelle am PC mit der Krummen
Baudrate zurechtkommt.) Vielleicht liegt es ja auch an meiner MIDI
Beschaltung am Atmega? Wäre Super wenn jemand ein Kochrezept (Schaltung
und Source in Assembler) für mich hätte.

Vielen Dank für euer Antworten.
Gast #231664
Lesenswert?

Die normale serielle Schnittstelle ist nicht dazu geeignet, MIDI-Signale
zu empfangen, die Baudraten passen einfach nicht. Wenn Du jetzt im
Controller umstellst und die richtigen Werte bekommst, ist das ja schon
mal schön. MIDI ist da etwas anspruchsvoll, was das Timing angeht. Wie
schließt Du denn den ATMEGA an den Computer an? Hast Du da einen
vollwertigen (also optisch getrennten) MIDI-Eingang? Hast Du im
Computer auch die MIDI-Schnittstelle ordnungsgemäß installiert? Häng
doch mal ein Keyboard dran. Dann würde ich Dir als Software MIDI-OX
empfehlen, das zeigt auch Rohdaten an, die nicht unbedingt den
MIDI-Spezifikationen entsprechen, somit findest Du Fehler besser. Fakt
ist, daß es geht. Hab´ selbst ´ne Weile gebraucht und dann
festgestellt, daß ich Mist gesendet hatte.
OP #231665
Lesenswert?

Danke für die Prompte Antwort

Also der MIDI-Anschluß ist über den Game-Port der Soundkarte und
funktioniert auch einwandfrei mit meinem Keyboard.
Ist die beschaltung am Atmega denn so richtig? (wie oben beschrieben)
MIDI-OX hab ich auch getestet bin aber noch nicht so recht
durchgestiegen. Ich werde es mir später aber nochmal reinziehen.
Gast #231667
Lesenswert?

Hmm,
wenn ich mich nicht täusche, sollte TXD über 220 Ohm an Pin 5, Vcc über
220 Ohm an Pin 4 (und an Pin 2 der Schirm).
Bist du sicher, dass du die Pins richtig zählst? Die Nummerierung ist
nicht durchlaufend!
Gast #231670
Lesenswert?

Dürfte eigentlich keine Probleme machen, kommen halt nur keine Daten
beim Empfänger an.

zum Programm:
Warum sendest du 4 Bytes? Ein Note-Event besteht doch nur aus 3
(Note-Status, Number, Velocity).
OP #231671
Lesenswert?

Wenn ich zu Hause bin werde ich mal den Stecker Prüfen vielleicht habe
ich ja doch was verdreht.
Irgendwo habe ich mal gelesen das zum abschluß ein Null-Byte gesendet
werden soll. (weiss nicht ob die Quelle besonders zuverlässig war)
Ich werde es mal mit 3 Bytes probieren.
Ich hab in der MIDI-Spez. gelesen das das Signal aus
1 Startbit
8 Datenbits
1 Stopbit
besteht, ist das so richtig in meinem Programm definiert?
Ich hab da noch nicht so recht den Durchblick.

Ich galube mit euren Tips schaffe ich es, daß heute Abend was
Midimäßiges aus dem MC rauskommt.
OP #231675
Lesenswert?

Kann es sein das ich das Signal invertieren muß?
Wenn an TX eine 1(+5V) ansteht kann ja kein Strom fließen,
nur wenn eine 0(GND) anliegt fliest Strom oder irre ich mich da?

Und wie sieht das dann mit dem Startbit und Stopbit aus?

Irgendwie hab ich mir das ganze viel einfacher vorgestellt.
Gast #231679
Lesenswert?

Verpol und ESD-Schutz. Allerdings: wenn Du am Game-Port bist und kein
herstellergenormtes MIDI-Kabel an diesem Port hast, besteht einerseits
Gefahr für Deine Soundkarte und andererseits mußt Du in dem Fall das
Signal wirklich invertieren, da Du dann direkt mit dem Interface-Chip
der Karte kommunizierst. Also ohne den Optokoppler und eventuell einem
HC(T)-Treibergate würde ich so nicht am Gameport herumbasteln, sonst
ist schnell GAME-OVER. Guck mal auf www.electricstart.de unter
electronics, da ist noch ´n Schaltungsvorschlag. Mußt aber auf die
eventuell abweichenden Pinnummern vom Game-Port achten.
Gast #231681
Lesenswert?

Von wegen eigenes Süppchen.

Das mit dem NOTE-ON mit Velocity-Wert 0, um eine Note auszuschalten,
ist keineswegs ein eigenes Süppchen irgend eines Herstellers, sondern
in der MIDI-Spezifikation ganz klar so definiert.

Desweiteren bringt ein NULL-Byte am Schluss eines Befehls Probleme mit
sich, da der Empfänger in diesem Fall meint, es werde im sogenannten
RUNNNING STATUS Betrieb gesendet. Dabei wird der eigentlich Befehle
(z.B. NOTE ON nur einmal gesendet, dann folgen immer jeweils 2 Bytes
Daten (Notennummer, Velocity), wieder 2 Bytes Daten etc.

Gruss
Christian
OP #231682
Lesenswert?

Hallo,
ich habe es geschafft, es läuft alles so wie es soll.
Schuld war das MIDI-Kabel das von einem PC-MIDI-Keyboard stammt.
Das Kalbel entspricht wohl nich ganz der Norm. Mit einem anderen
MIDI-Kabel hat es dann sofort geklappt.

Ich habe mich mal schlau gemacht (Quelle Musikprogrammierung von
Addison-Wesley)

Nach dem Buch funktioniert das mit den Bytes so:

Befehl      Status-Byte      1.Datenbyte      2.Datenbyte
Note Off    80h-8fh          Tonhöhe          Ausschwingdynamik
Note On     90h-9fh          Tonhöhe          Anschlagdynamik

Wenn nach dem "Note On" kein Status-Byte (Befehl) gesendet wird läuft
das ganze im Running Status also mit 2 Byte.

Vielen Dank für eure Hilfe und Denkanstöße!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren