www.mikrocontroller.net

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


Autor: Ronn (Gast)
Datum:

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

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!

Autor: Otto (Gast)
Datum:

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

Otto

Autor: Ronn (Gast)
Datum:

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

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

Bewertung
0 lesenswert
nicht 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_Di...)
die Änderung eines Controllers
0xBn cc vv   Controller, Wert   Control Change   Ändert den Zustand eines Controllers (siehe nächster Abschnitt) (cc = Controller)
und zwar hier:
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:
PC#: Program Number
CC#0: Controller Number 0 (Bank Select MSB)
(Example) 
When changing to Patch #30-3 (Bank 30, Number 3)
Transmit MIDI messages from an external MIDI sequencer in following order.
CC#0: 1
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

Autor: Oliver (Gast)
Datum:

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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

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

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.