Forum: Mikrocontroller und Digitale Elektronik Probleme mit MIDI Out (Neuling)


von Sascha D. (plutoonline)


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.

von TravelRec. (Gast)


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.

von Sascha D. (plutoonline)


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.

von Markus Cords (Gast)


Lesenswert?

Hallo Sascha..

schau Dir mal auf www.ucapps.de das CORE Module an. Hab die Module hier
am laufen und alles easy.

lg, markus

von Christian (Gast)


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!

von Christian (Gast)


Lesenswert?


von Sascha D. (plutoonline)


Angehängte Dateien:

Lesenswert?

Nee war nur ein Schreibfehler, Midi ist schon richtig angeschlossen.
Ist das eigentlich für den Empfänger ein Problem wenn ich Pin 4 und 5
vertauscht habe?? hängt ja bestimmt ein Optokoppler im Empfänger,
oder?

Ich hab mal das Program angehängt vielleicht fällt ja jemandem ein
Fehler auf.

von Andreas W. (Gast)


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).

von Sascha D. (plutoonline)


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.

von Andreas W. (Gast)


Lesenswert?

Das mit dem Null-Byte ist mir nicht bekannt.
Die Formateinstellungen müssten stimmen.

von Simon K. (simon) Benutzerseite


Lesenswert?

Ich glaub mit dem Null Byte meinst du folgendes:
Normalerweise sendet man ja

NoteOn(Number, Velocity)
Noteoff(?)

Es gibt aber herrsteller die kochen ihr eigenes Süppchen und machen das
so:

NoteOn(Number, Velocity)
NoteOn(0,0)


Da gibts also kein NoteOff

von Sascha D. (plutoonline)


Lesenswert?

Soviel dann zum Thema Spezifikation ;-)
Ist ja ein toller Standard wenn jeder sein eigenes Süppchen kocht.

von Sascha D. (plutoonline)


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.

von Andreas W. (Gast)


Angehängte Dateien:

Lesenswert?

Nein, das Signal wird schon durch den Optokoppler im Empfänger
invertiert.

siehe Anhang:
TxD high -> OK sperrt -> RxD high
TxD low  -> OK durchgeschaltet -> RxD low

von Sascha D. (plutoonline)


Lesenswert?

Für was sind die zwei Dioden auf der Senderseite gut?
In meiner Schaltung hab ich die nicht drin.

von Andreas W. (Gast)


Lesenswert?

Die dienen als Schutz für den Portpin (TxD).

von TravelRec. (Gast)


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.

von TravelRec. (Gast)


Lesenswert?

Ach eben erst gesehen, die Basis vom Optokoppler-Transistor darf
natürlich nicht an 5V angeschlossen werden (Skizze -> 3 Beiträge weiter
oben), muß offen bleiben.

von Christian Schifferle (Gast)


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

von Sascha D. (plutoonline)


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!

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.