Pascal Posted April 12, 2008 Report Posted April 12, 2008 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 Note0x64 VelocityHab 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 . . . Quote
nILS Posted April 12, 2008 Report Posted April 12, 2008 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) Quote
Pascal Posted April 13, 2008 Author Report Posted April 13, 2008 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. Quote
TK. Posted April 13, 2008 Report Posted April 13, 2008 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 vonuart_putc(0x90);uart_putc(0x3c);uart_putc(0x64);erlaubt?Schonmal in den Source code geschaut, wie uart_puts() die einzelnen Bytes versendet?Gruss, Thorsten. Quote
Pascal Posted April 13, 2008 Author Report Posted April 13, 2008 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 ;-) Quote
TK. Posted April 13, 2008 Report Posted April 13, 2008 Wenn Du die uart_* Funktionen selber programmiert hast, solltest Du eigentlich den Unterschied zwischen einem String und Charactern (bzw. Bytes) kennen...Gruss, Thorsten. Quote
Pascal Posted April 14, 2008 Author Report Posted April 14, 2008 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 ;-) Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.