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
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.
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...
vielen dank für die schnellen antworten was mir fehlt ist zB genau der Code zum Übertragen/Senden von Bytes Gruß
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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.