Gast
#3177444
Hallo an alle! Ich bin am verzweifeln: Habe versucht ein paar MIDI-Signale nach draußen zu schicken von einem ATMega32. Habe alles nach dieser Anleitung gemacht: http://elektro.wienker.org/?p=405 Das heißt RxD liegt auf PORTD. Bei mir läuft noch ein Display auf PortC und sonst nichts. Auf dem Display lasse ich lediglich Alles Buchstaben durchlaufen nur um zu sehen, ob mein Controller noch läuft. Hier mein Code: #define F_CPU 8000000 #include <avr/io.h> #include <util/delay.h> #include "lcd.h" void ADC_Init(void); uint16_t ADC_Read( uint8_t channel ); uint16_t ADC_Read_Avg( uint8_t channel, uint8_t nsamples ); // Hauptprogramm int main(void) { unsigned char i = 66; unsigned char buffer = 0; unsigned char wert[5]; initialize(); lcd_init(LCD_DISP_ON_CURSOR); init_USART(); uint16_t adcval; //ADC_Init(); // Endlosschleife while (1) { play_C_Chord(); lcd_clrscr(); lcd_data('W'); lcd_data('e'); lcd_data('r'); lcd_data('t'); lcd_data('!'); lcd_data(wert[0]); lcd_data(wert[1]); lcd_data(wert[2]); lcd_data(wert[3]); lcd_data(wert[4]); lcd_data(i); i++; if(i==80) i = 62; } return 0; } void sendchar(unsigned char c) { while(!(UCSRA & (1<<UDRE))) { } UDR = c; } void play_C_Chord(void){ ////////////////////// // Play C Major Chord ////////////////////// sendchar(0x90); //Note ON sendchar(0x3C); //Note: C3 sendchar(0x7F); //Velocity: 127(Max) sendchar(0x40); //Note: E3 sendchar(0x7F); //Velocity: 127(Max) sendchar(0x43); //Note: G3 sendchar(0x7F); //Velocity: 127(Max) //////////////////// // Wait 1 second //////////////////// _delay_ms(1000); ////////////////////// // Stop playing Chord ////////////////////// sendchar(0x80); //Note OFF sendchar(0x3C); //Note: C3 sendchar(0x00); //Velocity: 0 sendchar(0x40); //Note: E3 sendchar(0x00); //Velocity: 0 sendchar(0x43); //Note: G3 sendchar(0x00); //Velocity: 0 _delay_ms(1000); } void initialize(){ DDRA = 0x00; // PortB als Ausgang deklarieren DDRB = 0xff; PORTB = 0x02; DDRC = 0xff; // PortC als Display-Ausgang deklarieren //DDRD = 0xff; } void init_USART(void) { UCSRB |= (1<<TXEN); //UART TX (Transmit enable) UCSRC |= (1<<URSEL)|(3<<UCSZ0); //Mode Async 8N1 (8 Databits, No Parity, 1 Stopbit) //UBRR defines baudrate //Baudrate for MIDI is 31250 //UBRR = (Clock-frequency / (Baudrate * 16)) - 1 //Clock-frequency = 16000000 Hz => UBRR = 31 UBRRH = 0; //Highbyte is 0 UBRRL = 15; //Lowbyte ist 31 (decimal) } ---------------------------------- Alles läuft sobald ich mein MIDI-Kabel dranhänge. Dann hängt sich der Controller auf. Als ob plötzlich irgend eine verbotene Spannung an Pin5 von der MIDI-Buchse drankommt... Habt ihr eine Idee was ich ausprobieren könnte? Danke, viele Grüße, Stefan
