Jump to content

Recommended Posts

Posted

Ich beschäftige mich momentan mit der Programmierung von uC´s für MIDI und habe da jetzt zum experimentieren einen Atmega8 mit 8Mhz am laufen. Die serielle Schnittstelle läuft auf 31250 baud mit 8n1 Modus.

Momentan sieht das so aus, dass mein Midi-Interface wohl auch etwas empfängt, es aber nicht mit der In-LED anzeigt und dann regelmäßig abstürzt. Wird wohl der Treiber sein, der da mene falschen Daten nicht verkraftet. Meine Vermutung ist, dass ich die Daten für einen Note-On Befehl falsch sende. Ich habe aber dummerweise bisher nirgends im Netz gefunden, wie ich einen Befehl formatieren muss damit er richtig erkannt wird.

Ich habe schon zig Sachen ausprobiert. Normalerweise wird der NoteOn ja so spezifiziert:

0x90 NoteOn Kanal 1

0x3c Note

0x64 Velocity

Hab es schon mit folgenden Möglichkeiten probiert:

uart_puts("0x90 0x3c 0x64");

uart_puts("0x903c64");

uart_puts("903c64");

uart_puts("90 3c 64");

Und dann noch jeden HEX-Block einzeln.  Und per Binär und Dezimal hab ich es auch probiert.

Kann mir da jemand sagen, wie ich diesen String formatieren muss, damit er erkannt wird?

Kurz zur Info, ich habe es schon mit einem Terminal geprüft, ob die Daten auch ankommen, das tun sie (Musste die Baud Rate dafür allerdings verändern, weil das HYperTerminal nichts mit den 31250 baud anfangen kann). So wie ich sie sende. Allerdings wenn ich schaue, was der MIDI-Monitor empfängt, sind das mal 2 Byte und mal 3 byte. 3 Byte wären ja richtig, aber diese 3 Byte bestehen nur aus "00 00 00". Das ist ja nicht richtig . . .

Posted

Ich hab zwar keine Ahnung aber die Strings sehen alle nicht gut aus. Ich behaupte einfach mal ins Blaue, einfach die Daten schicken ist die Lösung. Die Daten und nicht eine dezimale oder hexadezimale Darstellung derer: "É<d" (#90 #3C #64)

Posted

Also wenn ich das jezt richtig verstanden habe, was du meintest, meinst du sicher, dass ich keinen String sondern eben direkte Hex-Daten senden soll und nicht die Hex-Daten als String!?

Genau das ist mir auch schon in den Kopf gekommen. Aber ich habe zum Verrecken nichts im Netz gefunden, wie ich in C per UART pure Hex-Daten (Oder Binärdaten) senden kann. Alle senden eben genau nur einen String. Zumindest so wie ich das bisher verstanden habe.

Posted

MIOS_MIDI_TxBufferPut()

Achso, AVR und irgendeine Library, die Du irgendwo aus dem Web gefischt hast...

Gibt es keine uart_putc() funktion, die bspw. das Versenden von

uart_putc(0x90);

uart_putc(0x3c);

uart_putc(0x64);

erlaubt?

Schonmal in den Source code geschaut, wie uart_puts() die einzelnen Bytes versendet?

Gruss, Thorsten.

Posted

Hab keine Library verwendet. Spreche den UART selber direkt an.

Ich glaube aber den Fehler gefunden zu haben. Ich muss das morgen mal testen. Sollte das funzen gebe ich hier mal Bericht ab. Eventuell interessiert es ja jemanden ;-)

Posted

Wenn Du die uart_* Funktionen selber programmiert hast, solltest Du eigentlich den Unterschied zwischen einem String und Charactern (bzw. Bytes) kennen...

Gruss, Thorsten.

Posted

Genau das war es auch! Ich hatte mich durch ein voran gegangenes Projekt so verwirren lassen, dass ich die ganze Zeit nur an Strings dachte!

Als du dann uart_putc angesprochen hattest machte es klick. Nun läuft es. Oh man . . .*gehirngulasch*

Ich sollte noch erwähnen, dass ich nicht der Meister in AVR Programmierung bin! Aber ich gebe mir mühe ;-)

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...