www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Midi mit C Control


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf Schwarz (spacedog) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Midi benutzt 31,25 kBaud. Erst mal prüfen, ob C-Control das kann. Und 
ich denke, daß nur ein bestimmter Pin zum Senden benutzt wird, TxD oder 
ähnlich.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen dank für die schnellen antworten

was mir fehlt ist zB genau der Code zum Übertragen/Senden von Bytes

Gruß

Autor: Johannes F. (emitterfolger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das MIDI-Protokoll ist bei Wikipedia recht gut erklärt:
http://de.wikipedia.org/wiki/Musical_Instrument_Di...

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/fi...

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

Autor: Johannes F. (emitterfolger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier sind die 2 Funktionen, die du brauchst.
Berechnung von _UBRR wie folgt:

          f(osc) [Hz]
_UBRR = --------------- – 1
          16 * 31250

#define _UBRR /* siehe Formel */

/* Funktion zum Initialisieren des UART */
void USART_Init()
{
    /* Set baud rate */
    UBRRH = (unsigned char) (_UBRR >> 8);
    UBRRL = (unsigned char) _UBRR;
    /* Enable transmitter */
    UCSRB = (1<<TXEN);
    /* Set frame format: 8data, 1stop bit */
    UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);
}

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

Grüße
Johannes

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.