Hallihallo!
Ich hab mal wieder ein Problem... Ich will MIDI-Daten mit dem ATMega32 senden. (Das ganze geht über RS232 mit 31250 Baudrate, hier habe ich sie zum testen auf 9600 runtergeschraubt). Angefangen habe ich mit den Note_On und Note_Off Messages, die je 3 Byte lang sind. Folgendes ist mein Programmcode:Das wegkommentierte ich den MIDI_* Funktionen ist der eigentliche Code, zum Testen sende ich jedoch lieber "statische" Werte.Code:#include <Arios\serial.h> //#include <stdio.h> #include <util\delay.h> #include <Arios\main_f.h> void MIDI_NoteOn(unsigned char Channel, unsigned char Note, unsigned char Velocity) { char b1, b2, b3; b1 = 0x10010001; //b1 = 0x10010000; //b1 |= Channel; b2 = 0x01110111; //b2 = 0x01111111; //b2 |= Note; b3 = 0x01111111; //b3 &= Velocity; RS232_send(b1, 1, cBlocking); RS232_send(b2, 1, cBlocking); RS232_send(b3, 1, cBlocking); } void MIDI_NoteOff(unsigned char Channel, unsigned char Note, unsigned char Velocity) { unsigned char b1, b2, b3; b1 = 0x10000001; //b1 = 0x10000000; //b1 |= Channel; b2 = 0x01110111; //b2 = 0x01111111; //b2 |= Note; b3 = 0x01111111; RS232_send(b1, 1, cBlocking); RS232_send(b2, 1, cBlocking); RS232_send(b3, 1, cBlocking); } int main (void) { RS232_init(9600); if (SetPort(PORTD, PD5, DirOutHigh) != -1) { // funktion zum setzten der Ports, hier denke ich aber nicht von Intresse while(1) { RS232_send("\r\n=> Note on:\r\n", 19, cBlocking); MIDI_NoteOn(0x00000001, 68, 127); _delay_ms(1000); RS232_send("\r\n=> Note off:\r\n", 20, cBlocking); MIDI_NoteOff(0x00000001, 68, 127); _delay_ms(1000); } return 0; } while(1); }
Das Hyperterminal gibt mir folgende Werte aus:Was mit wundert: Meine eingegebenen Strings werden wunderbar gesendet, meine Werte jedoch sehen jedesmal anders aus und bestehen nicht mal aus drei bytes, sondern immer nur einem...Code:=> Note on: = => Note off: J => Note on: = => Note off: w => Note on: = => Note off: $ => Note on: = => Note off: Q
Wo liegt mein Fehler, bei der doch so einfachen Aufgabenstellung?
Vielen Dank für eure Mühe,
Bääääär
PS: Wenn nötig, hänge ich die serial-funktionen noch an, aber ich denke, meine strings zeigen, dass sie ordnungsgemäß laufen.







Zitieren

Lesezeichen