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.
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.
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.
Hallo Sascha.. schau Dir mal auf www.ucapps.de das CORE Module an. Hab die Module hier am laufen und alles easy. lg, markus
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!
Ahh, hier hab ich was gefunden: http://www.proav.de/index.html?http&&&www.proav.de/midi/midi-pinout.html
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.
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).
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.
Das mit dem Null-Byte ist mir nicht bekannt. Die Formateinstellungen müssten stimmen.
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
Soviel dann zum Thema Spezifikation ;-) Ist ja ein toller Standard wenn jeder sein eigenes Süppchen kocht.
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.
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
Für was sind die zwei Dioden auf der Senderseite gut? In meiner Schaltung hab ich die nicht drin.
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.
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 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.