www.mikrocontroller.net

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


Autor: Sascha Dürkes (plutoonline)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sascha Dürkes (plutoonline)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus Cords (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Sascha Dürkes (plutoonline)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Sascha Dürkes (plutoonline)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas W. (Gast)
Datum:

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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sascha Dürkes (plutoonline)
Datum:

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

Autor: Sascha Dürkes (plutoonline)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas W. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Sascha Dürkes (plutoonline)
Datum:

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

Autor: Andreas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die dienen als Schutz für den Portpin (TxD).

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian Schifferle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sascha Dürkes (plutoonline)
Datum:

Bewertung
0 lesenswert
nicht 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

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

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.