Archiv für die Kategorie ‘Arduino’

Midi In Teil 2

Dienstag, 06. Januar 2009

Heute hab ich mich der MIDI-In Geschichte gewidmet. D.h. als erstes die Schaltung aus dem Arduino Forum aufgebaut. Leider hat sich dann aber heraus gestellt, dass die so garnicht funktioniert. Problem ist der 100k Widerstand, der die Basis des Optokopplers mit Masse verbindet. Wenn man den weg nimmt, funktionert’s. Naja. Fast. Oder: bedingt. Der Widerstand hat nämlich den Zweck, den 4N28, von dem ich zufällig auch noch welche da hatte, ich glaube von diesem Roboter, den ich nie gebaut habe, gewissermaßen zu pimpen. Der 4N28 ist nämlich nicht wirklich schnell genug, um MIDI Daten zu übertragen.

Wenn man den Widerstand nun also weg lässt, kommt es zu Problemen, wenn viele Messages gesendet werden. Das waren bei mir z.B. CCs von einem Slider oder AfterTouch Values. Wenn man nur einzelne Note On und Note Off Messages verschickt, funktioniert es eigentlich ganz gut. Der Trick soll nun sein, eben die Basis des Optokopplers über einen Widerstand an Masse zu hängen. Den Wert, der zwischen 47k und 1M liegt, soll man empirisch ermitteln. Klappt aber nicht. Ein wirklich bzw. halbwegs brauchbares Ergebnis gibt’s nur, wenn man den Widerstand komplett raus nimmt.

Erstmal zum Weiterbauen und Testen reicht es ja auch so. Aber spätestens, wenn ich Werte am laufenden Band  empfangen will, muss da eine Alternative her. Habe einige Schaltungen ([1], [2]) gesehen, die einen 6N138 verwenden.

Auf der Softwareseite gibt es für den Arduino eine Midi Library.

Bug in der Matrix

Sonntag, 04. Januar 2009

desk

Gute Nachricht vorneweg: Nach dem ich die letzten zwei Tage überwiegend mit Löten verbracht hab, ist sie fertig, meine RGB LED Button Matrix. Als Treiber hab ich den Maxim 7219 verwendet — oder genauer, drei davon. Ja, die Faulheit hat gesiegt. Jede Farbe wird also durch einen eigenen Chip angesteuert. Da LEDs Common Cathode sind, hängen die Digit Pins der drei 7219 jeweils zusammen an einer Reihe der Matrix. Ich hoffe, dass das kein stromtechnisches Problem ist (wenn eine RGB LED voll leuchtet, fliessen da rund 60 mA aus der Kathode). Aber wenn jede Farbe einzeln und nacheinander geschaltet wird, sollte alles gut sein. Oder?

Softwareseitig habe ich gestern eine Arduino Lib für den 7219′er entdeckt. Runtergeladen. Ausprobiert. Funktioniert. Jedenfalls wenn man die 7219 brav initialisiert, benutz, und danach wieder deaktiviert.

Wenn man das aber nicht tut, und die Treiber nicht auf dunkel schaltet, gibt’s ein lustiges Gewitter. Hoffe mal, dass es eher ein Softwareproblem ist. Eine Ursache könnte auch sein, dass ich die Data Signale via DOUT-DIN von einem Chip zum nächsten durchschleife. Es wäre denk ich einen Versuch wert, mal zu probieren, jede Farbe direkt — also über einen eigenen Data Pin am Arduino — anzusprechen.

Im Video unten sind die Kathoden/Digit/Row Pins für Grün und Blau nicht angesteckt, d.h. nur die Anoden/Segment/Column Pins sind an die 7219′er angeschlossen. Wobei aber eigentlich nur die roten LEDs getrieben werden. Wo kommt also das “Übersprechen” her?

Arduino Midi Out

Donnerstag, 01. Januar 2009
Arduino Midi Out

Arduino Midi Out

Gesundheitlich etwas angeschlagen, und desshalb nicht zum feiern in der bayrischen Hauptstadt, hab ich heute mal die Midi Geschichte ausprobiert.

Eigentlich ganz leicht. Die “Schaltung” kommt vom Tod Blog. Dort gibts auch ein passendes Arduino Patch (das macht aber noch einiges mehr). Man klemmt einen 220 Ohm Widerstand zwischen +5 V und Pin 4, Pin 2 auf Masse und Pin 5 an TX.

Einfach, wenn man weiss, ob die Pins am Stecker oder an der Buchse gezählt werden. Naja, Pin 2 sollte man auch als Blinder finden. Bei Pin 4 und Pin 5 stehen die Chancen 50/50. Ich habe mal naiver Weise angenommen, dass Tod von vorn auf die Buchse geschaut hat.

Mit oben abgebildeter Zählung, die übrigens beruhigender Weise der Spec entspricht, und unten stehender Beschaltung klappt’s bei mir.


Zum testen habe ich ein minimales Arduino Patch gebaut, dass eine CC Message schickt:

/*
* Basic example for sending MIDI Messages
*/
void setup()
{
  Serial.begin(31250);        // set MIDI baud rate
}
void loop()
{                             // Message: 0xBn , CC where n = channel
  midiMsg( 0xB2, 22, 127 );   // sends CC22 on channel 3
  delay(1000);                // wait a sec
  midiMsg( 0xB2, 22, 0 );
  delay(1000);
}
void midiMsg(byte cmd, byte data1, byte data2)
{
  Serial.print(cmd, BYTE);
  Serial.print(data1, BYTE);
  Serial.print(data2, BYTE);
}

Arduino MIDI in

Donnerstag, 18. Dezember 2008

… guckst du hier:

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1187962258/