Midi mit C Control

Gast #2107539
Lesenswert?

Hallo zusammen

Bemühe seit zwei Tagen die Suche und Google aber ich komme einfach nicht 
weiter. Hab seit letzter Woche das C Control Evulution Board von Conrad 
mit dem Mega32 Prozessor. Hatte im Studium C++ und kann recht gut damit 
umgehen. In die Mikroprozessortechnik habe ich mich schon etwas 
eingelesen und einfache Schaltungen funktionieren prima.

Ich möchte aber folgendes erreichen:

Mein C Control Board soll MIDI-Daten an mein Keyboard senden. Nur senden 
nicht empfangen!!!! Also zB "Spiel Note G" usw. Ich weiß dass diese MIDI 
Befehle in Hex-Codes übertragen werden. Aber wie stelle ich das genau 
an??
Hab eine Midibuchse und das mit dem 220Ohm Widerstand weiß ich bereits. 
Muss die andere Leitung durch die ja dann offensichtlich die Daten 
geschickt werden, einfach an einen freien Port meines Boards? Wie steuer 
ich diesen Port dann genau an?? Ich muss doch dann die etsprechenden 
Datenbytes über diesen Port senden oder?
Was ich benötige sind gezielte Befehle in C!
Muss ich auch wie ich schön öfters gelesen habe eine Boudrate 
einstellen?
Wie funktioniert das?

Vielen Dank für eure Hilfe
Moderator (Firma: Titel) Persönliche Seite #2107558
Lesenswert?

Ein Midi-Ausgang ist zuallererst mal nichts anderes, als eine LED 
anzusteuern (die sitzt nämlich auf der Empfangsseinte im Optokoppler).
Hast du das schon gemacht?

Kannst du eine LED blinken lassen?
Gut, dann passt schon mal die Hardware...

Und wenn das geht, dann übertrage mal ein paar Bytes mit einer Baudrate 
von 9600 über eine serielle Schnittstelle zum PC.

Wenn das geht, hast du eigentlich alles, was du für MIDI brauchst:
einen LED-Ausgang und eine serielle Schnittstelle.
Dann schließt du nur noch die Midi-Buchse statt der LED an den TX Pin 
der seriellen Schnitte an, schaltest die Baudrate auf 31,25kBd um und 
fertig...
Gast #2107609
Lesenswert?

Das MIDI-Protokoll ist bei Wikipedia recht gut erklärt:
http://de.wikipedia.org/wiki/Musical_Instrument_Digital_Interface#Funktionsweise_des_MIDI-Protokolls

Der UART des ATmega muss auf 8 Databits, No Parity, 1 Stopbit sowie 
31250 baud initialisiert werden. Wie das funktioniert, steht im 
Datenblatt des ATmega32 (mit Asm- und C-Codeschnipseln).

Die Standard-MIDI-Beschaltung steht hier (Seite 6):
http://www.avrfreaks.net/modules/FreaksArticles/files/19/Midi%20and%20the%20AVR.pdf

Die 2 in Reihe geschalteten Inverter am TxD des µC kann man 
vernachlässigen, da AVRs diese Stromschleife mit ca. 5mA direkt treiben 
können.

Grüße
Gast #2108036
Lesenswert?

Hier sind die 2 Funktionen, die du brauchst.
Berechnung von _UBRR wie folgt:

          f(osc) [Hz]
_UBRR = --------------- – 1
          16 * 31250
1
#define _UBRR /* siehe Formel */
2

3
/* Funktion zum Initialisieren des UART */
4
void USART_Init()
5
{
6
    /* Set baud rate */
7
    UBRRH = (unsigned char) (_UBRR >> 8);
8
    UBRRL = (unsigned char) _UBRR;
9
    /* Enable transmitter */
10
    UCSRB = (1<<TXEN);
11
    /* Set frame format: 8data, 1stop bit */
12
    UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);
13
}
14

15
/* Funktion zum Senden eines Bytes über UART */
16
void USART_Transmit( unsigned char data )
17
{
18
    /* Wait for empty transmit buffer */
19
    while ( !( UCSRA & (1<<UDRE)) );
20
    /* Put data into buffer, sends the data */
21
    UDR = data;
22
}

Grüße
Johannes

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