Forum: Mikrocontroller und Digitale Elektronik Midi Befehl mit einem Atmega16 senden


von Ronn (Gast)


Lesenswert?

Hallo,

ich habe Heute den ganzen Tag erfolglos versucht an ein 
Gitarreneffektpedal über das Midiprotokoll eine Bank Select Message zu 
senden.

Es wäre wirklich sehr nett, wenn mir irgendwer aus meiner Verzweifelung 
heraus helfen kann.

Meine Hardware(die relevante):

Ich nutze einen Atmega16 mit einem 8Mhz Quarz.
PinD1(TXD) ist über einen 220 Ohm Widerstand an Pin5 der Midi 
Eingangsbuchse angeschlossen und +5Volt ist auch über einen 220 Ohm 
Widerstand an Pin4 der Midieingangsbuchse angeschlossen.

Wenn ich An PinD1 eine Led anschließe sehe ich diese beim senden kurz 
aufblitzen.

Meine Software(auf das nötigste beschränkt):

#ifndef F_CPU
#define F_CPU 8000000UL    // Systemtakt in Hz - Definition als unsigned 
long beachten >> Ohne ergeben Fehler in der Berechnung
#endif

#define BAUD 31250UL          // Baudrate

// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = 
kein Fehler.

#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
  #error Systematischer Fehler der Baudrate grösser 1% und damit zu 
hoch!
#endif


    UCSRB |= (1<<TXEN);                // UART TX einschalten
    UCSRC |= (1<<URSEL)|(3<<UCSZ0);    // Asynchron 8N1

    UBRRH = UBRR_VAL >> 8;
    UBRRL = UBRR_VAL & 0xFF;


if (!(PINA & (1<<PINA1) )) {            // wenn Taster1 gedrückt

while (!(UCSRA & (1<<UDRE))){}
    UDR = 0b10110001;
while (!(UCSRA & (1<<UDRE))){}
    UDR = 0b00000001;
while (!(UCSRA & (1<<UDRE))){}
    UDR = 0b00010011;
}


Unter diesem Link findet Ihr die Anleitung des Gitarreneffektpedals:
Auf Seite 86 steht eine Tabelle mit den Midibefehlen!

http://lib.roland.co.jp/support/en/manuals/res/1811397/GT-8_e7.pdf

P.S.: Ich habe sehr lange im Forum, sowie mit Google nach vergleichbaren 
Problemen und Lösungsansätzen gesucht, da ich jedoch auch noch nicht 
besonders gut im Programmieren bin konnten mit die Lösungsansätze nicht 
weiterhelfen.

Vielen Dank für eure Bemühungen!

von Otto (Gast)


Lesenswert?

sieh Dir mal die Schaltung hier an: 
Beitrag "Drum-Trigger mit MIDI-Ausgabe"

Otto

von Ronn (Gast)


Lesenswert?

Danke für den Tipp, leider ist da für mich kein lesbarer Sourcecode mit 
dabei, aus dem ich lernen könnte.
Die Hex Dateien kann ich nicht lesen.

Aber trotzdem Danke für den Tip.

Vllt kann sich jemand noch genau mein Problem angucken ?
Das wäre echt super, ich weiß nicht mehr weiter.

mfg
Ronn

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Du sendest
    UDR = 0b10110001; = 0xB1
    UDR = 0b00000001; = 0x01
    UDR = 0b00010011; = 0x13

Das bewirkt entsprechend dem Midi-Protokoll
(http://de.wikipedia.org/wiki/Musical_Instrument_Digital_Interface)
die Änderung eines Controllers
1
0xBn cc vv   Controller, Wert   Control Change   Ändert den Zustand eines Controllers (siehe nächster Abschnitt) (cc = Controller)
und zwar hier:
1
0xBn 01 vv   1   Modulation MSB   Stellung des Modulationsrades
Du änderst also die Stellung des Modulationsrades auf Midi-Kanal 1.
Ist es das, was du wollstest?

Eher nein.
In dem Dokument aus deinem Link steht:
1
PC#: Program Number
2
CC#0: Controller Number 0 (Bank Select MSB)
3
(Example) 
4
When changing to Patch #30-3 (Bank 30, Number 3)
5
Transmit MIDI messages from an external MIDI sequencer in following order.
6
CC#0: 1
7
PC#: 19
Also mußt du erst einen Controller 0 (Bank Select) mit dem Wert 1 
senden:
0xB0 0x00 0x01
Und danach einen Program Change mit Wert 19 dez = 13 hex:
0xC0 0x13
Insgesamt also 5 Bytes :-o

Ein Tipp: Lies dir die Midi-Geschichte nochmal genauer durch ;-)
z.B. auch hier: 
http://www.blitter.com/~russtopia/MIDI/~jglatt/tutr/bank.htm

von Oliver (Gast)


Lesenswert?

>PinD1(TXD) ist über einen 220 Ohm Widerstand an Pin5 der Midi
>Eingangsbuchse angeschlossen und +5Volt ist auch über einen 220 Ohm
>Widerstand an Pin4 der Midieingangsbuchse angeschlossen.

Nur zur Sicherheit: Eine Masseverbindung gibt es aber auch noch, oder?

Oliver

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

>Nur zur Sicherheit: Eine Masseverbindung gibt es aber auch noch, oder?

Das würde bei einer galvanisch getrennten Schnittstelle wie MIDI ja nun 
gar keinen Sinn machen!

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
Noch kein Account? Hier anmelden.