Für den Controller ist MiDi eine ganz normale serielle Schnittstelle mit den Parametern 31250b/sek 1 Startbit 1Stopbit kein Parity Bit (31250,8,N,1).
Senderseitig kommt eine MiDi Leitung per 220 Ohm Widerstand an +5V, die andere Midi Leitung per 220 Ohm an den Ausgangspin des Controllers.
Empfängerseitig wird ein Optokoppler ( laut Spezifikation ein PC900 von Sharp ) per 220 Ohm Widerstand an diese beiden Leitungen angeschaltet.
Am Ausgang des Optokopplers kann man dann die MiDi Signale wieder abgreifen ( !Pull Up widerstand ).
Andere Optokoppler gehen auch - Von Lösungen mit CNY 17 Optokopplern würde Ich aber absehen - Das hat bei mir noch nie richtig funktioniert, auch wenn im Internet anderes behauptet wird.
Hier ein Beispiel mit MiDi in und Thru.
Ein Note On Befehl besteht aus 3 Bytes.
1. Note On = 9x ( das x steht hier für den Midi Kanal auf dem die Note gesendet wird; 0...F )
2. Die gedrückte Note = XX ( Das XX ist hier die gewälte Note; 00...FF )
3. Und zuletzt die Anschlagstärke ( Velocity )= XX (Das XX ist hier die Anschlagstärke = 00...FF)
Beispiel:
0x91,0x80,0x80 wäre ein Note On befehl auf Kanal 2! in der Mitte der Tastatur ( welche Note genau müsste Ich jetz nachschlagen - Google hilft ) mit mittlerer Anschlagdynamik.
Tabellen wären hier.
Ein Note off Befehl ist genauso aufgebaut, lediglich das erste Byte ist 8x.
Ein Note On Befehl mit der Velocity 00 bewirkt das gleiche wie ein Note Off Befehl und wird deshalb von vielen Herstellern auch so benutzt.
Das musst Du für dein Keyboard selbst rausfinden wie das dort gemacht wird.
Für Midi selbst gilt, das Befehle immer >=80 (hex) sind.
Das lässt sich prima für einen Empfänger brauchen, da man bei Werten über 0x80 immer weiss, das es sich um einen Befehl handelt und je nach Befehl noch eine gewisse Anzahl von Bytes kommen müssen.
Eine Besonderheit ist hier der sog. MiDi Running Mode.
Hierbei wird der Befehl - also das erste Byte - Nur einmal gesendet.
Danach folgen nur noch Parameterwerte bis sich der Befehl wieder ändert.
Ob das bei Deinem Keyboard benutzt wird, sollte sich in der MiDi Spezifikation deines Instruments finden lassen.
Es ist ein Option die nicht zwingend benutzt werden muß!
Eines deiner Probleme wird sein, das wenn Du eine Taste losslässt, für diese Taste ein Note On mit der velocity 0 oder ein Note Off gesendet wird.
Das ließe sich meiner Meinung nach ändern, wenn Du das mit Toggeln machst.
Ein Note on mit velocity >00 schaltet das Relais ein. Ein weiteres Note On der selben Taste Velocity >00 schaltet das Relais wieder ab.
Auch ein Ein und Ausschalten über eine Oktave wäre möglich. Ein C auf der tieferen Oktave schaltet das Relais aus. Ein C auf der höheren Oktave schaltet das Relais ein.
Bei mehr als 7 Relais kannst Du ja auch die Halbtöne zwischen den Oktaven mit verwenden.
Noch ein Tipp:
Ich würde die Notenwerte zumindest für das erste Relais aus im EEPROM des Controllers speichern.
Du kannst dann dein Relais Interface in einen "learn Modus" bringen ( z.B. ein schalter ) - Auf dem Keyboard die entsprechede Taste drücken - Der Controller speichert das im EEPROM ab (Note On + Notenwert ).
Somit liesse sich das Ganze sehr schnell an jedes Keyboard anpassen, ohne sich Gedanken über Notenwerte oder MiDi Kanäle machen zu müssen.
Die restlichen Werte für die weiteren Relais kann der Controller dann sehr einfach berechnen.
Zum Treiben der Relais könntest Du ein ULN2803 IC verwenden.
Direkt an die Controller Pins würde Ich die Relais nicht anschalten.
Solche Relais Platinen mit Treiber gibts bei diversen Internethändlern zu kaufen.
Ich hab mir da auch mal ein Buch besorgt "MiDi in Theorie und Praxis" vom Elektor Verlag.
Das Buch ist leider etwas unstrukturiert, zeigt aber viele Beispiele vor allem an Hardware.
Bei der Erstausgabe des Buchs war der 8051 Controller aktuell - Beispiele für den Arduino sind da somit nicht drin.
Eventuell gibts ja eine Bücherei, die das Buch führt?!
Ja - Dann kannst Du ja schon mal mit dem Basteln beginnen!
Lesezeichen