MIDI und ATMEGA32

Gast #3177444
Lesenswert?

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
Angehängte Dateien:
Gast #3177658
Lesenswert?

Hi,

habe das Problem immer noch. Habe mal an den wichtigen PINs gemessen:

Bevor ich das MIDI-Kabel anschließe habe ich an der MIDI Buchse MAB 5 
SH, wie in der Anleitung:

PIN5(VCC-Pin): 4,4 V
PIN4 (Signal-PIN): 4.98 V (Hab kein Oszilloskop, aber da müssten ja 
meine Notendaten rauskommen)


Nachdem ich das MIDI-Kabel dranschließe, habe ich folgende Situation:

Pin5: 2,88 V
Pin4: 1.85 V

Weiß nicht was ich da falsch mache... Habe alles korrekt verdrahtet. 
Sobald ich aber das MIDI-Kabel dranschließe verweigert der Controller 
seine Arbeit...


Gruß,

hoffe jemand hat eine Idee....
Gast #3177675
Lesenswert?

Hallo,

Du willst Signale nach außen senden = MIDI out.

Dann schreibst Du etwas von RxD = MIDI in.

Die verlinkte Seite hat das MIDI out an TxD angeschlossen.

An welchen Controller-Pin hast Du MIDI out angeschlossen?

Gruß Tom
Gast #3177697
Lesenswert?

Hallo, hab mich vertippt:

TxD(Controller Pin 15) ist angeschlossen an der Midi-Buchse.

Der Kommentar mit dem Low-Byte ist von der Version mit einem 16MhZ 
Quarz.
Ich habe meine Fusebits auf 8 MhZ int. Osz. gesetzt und mein LowByte 
dementsprechend angepasst. Sieht etwas unglücklich im Kommentar aus.

Habe auch schon daran gedacht, dass ich die Pins an der Midi-Buchse 
vertauscht haben könnte, aber auch das löst das Problem nicht...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren