PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MIDI auslesen?



1hdsquad
28.09.2006, 18:51
Hallihallö, ich habe mal wieder ein Problem: Lässt sich das MIDI Protokoll eines Keyboards (Ja, das mit schwarzen und weissen Tasten, http://de.wikipedia.org/wiki/Keyboards ;-)), auslesen, um eine Leiste mit LEDs in aufgemalten Tasten anzuschliessen, welche die gerade gedrückte Taste darstellen? Ich meine erstmal, ob es "einfach" ist (wie RS 232) oder "schwer" (wie USB).
MFG

PicNick
28.09.2006, 18:54
Wie RS232, also lächerlich.
https://www.roboternetz.de/wissen/index.php/MIDI-Interface

uwegw
28.09.2006, 18:57
MIDI ist nen RS232-Verschnitt. Also: "einfach wie RS 232"

1hdsquad
28.09.2006, 22:02
Ok, danke schön! Dann will ich mal schauen...

1hdsquad
29.11.2006, 22:31
Hallöchen!
Ich hab mir in einem Buch mal was nachgelesen, das ist aber von 1990, da dröhnt einem der Schädel bei der PC-Leistung der Zeit, wenn die dauernd von Amiga, C64 etc. reden ;-)
Und EPROMS wollt ich auch net brennen...
Das im Buch ist nicht schlecht, nur eben zu alt. Gibt es heutzutage standarisierte ICs für Midi? Wie gesagt, ich will das Gerät an den Midiausgang vom Keyboard anklemmen und für jede Taste eine LED haben, welche bei Tasdtendruck leuchtet. Cooler wäre auch noch, wenn man Duo-LEDs und die Anschlagdynamikfunktion der Taste verwendet, sodass die LED z.B. bei Druck rot aufblitzt und dann bis zum Loslassen grün leuchtet...
Also: gibts da was???
MFG und hier mal draufgehen, einfach geil: http://www.youtube.com/watch?v=bPjWP9pPPy8&mode=related&search=

robocat
30.11.2006, 00:49
vielleicht hilft dir das:
http://de.wikipedia.org/wiki/MIDI#Funktionsweise_des_MIDI-Protokolls
soweit ich sehe werden (häufig) jeweils 3 bytes übertragen, "0x9n kk vv" beim anschlag einer taste.
das (hex) 9 in den ersten 4 bit wäre für dich wichtig, wenn du die anschlagsdynamik und den notenwert erfassen willst, danach evtl. noch die zweiten 4 bit für den channel 0-15. darauf folgt die angespielte note (0-127) und die dynamik (0-127). nix klar?
dein µC empfängt ein 144-127-63 (alles dezimal). weil das erste byte >127 ist, weiß dein µC, dass ein neuer datensatz anfängt.
144 ist binär 10010000 -> die erste bytehälfte (binär 1001) ist der code für "Beginnt das Spielen einer Note", die zweite bytehälfte (man sagt nibble, ich weiss..) ist 0 also der erste kanal.
bei den nächsten 2 bytes ist das erste bit 0 (also dezimal 0-127), daran erkennt das gerät, dass es sich um den teil eines datensatzen handelt. als nächstes byte folgt die note (127 = der "höchste ton"), darauf die dynamik (63 dez), also "mittel starker" anschlag.

vielleicht würde folgendes klappen (pseudo-code, kanns leider nicht testen):

int byte;
while(1)
{
read(byte);
if(byte>127) //erstes byte ist statusbyte für attack (anschlag)
{
if(byte%127==2) // 3tter channel
{
read(byte); // note
led_an(byte%12); // 12 halbtonschritte angenommen, eine von 12 leds leuchten lassen
read(byte); // dynamik
if(byte>(63+32)) // anschlagsdynamik im oberen drittel
{
led2_an(); // stärkerer anschlag
}
}
}
}

sry falls ich mich täusche oder was falsch wiedergegeben habe.. korrigiert mich bitte!

p.s. bin fast sicher da stimmt irgendwas nicht :(

p.p.s. helge war mal echt gut, aber in dem fall eher nicht.

gruesse von der katz

PicNick
30.11.2006, 09:05
Das (theoretisch) erste Byte beinhaltet welcher Event und welcher Channel (0-15).
Das zweite ist, welche Taste (0-127)
das dritte, wie laut (0-127)

Es gibt aber auch andere Events, also da muß man schon genau schauen.

Das erste Byte kommt nur, wenn eine anderer Event oder ein anderer Channel da ist. (running status) Sonst kommt nur Note u. Velocity

shaun
30.11.2006, 13:28
Und selbst davon weicht der Sequenzer u/o die Midi-Verteiler-Kiste (wie immer man diese Boxen nennt, bin nicht aus der Szene) eines Kunden ab, für den ich demnächst ein Gerät umdesignen darf. Also nicht wundern, wenn es trotz Einhaltung der allseits bekannten Specs doch nicht so funktioniert wie geplant. Ich habe mir aus diesem Anlass eine Midi-to-Serial-Box nachgebaut, die die Rohdaten auf echtes RS232 umsetzt, so dass ich sie mit MidiSpy ansehen kann.

PicNick
30.11.2006, 14:05
..davon weicht der Sequenzer u/o die Midi-Verteiler-Kiste

Das täte mich interessieren, klingt unglaublich. Weiß man Näheres ?

shaun
30.11.2006, 14:31
Bisher nicht, daher ja auch der Konverter, um den MIDI-Datenstrom mitzulesen. Ich bin auch schon sehr gespannt, was mich da erwartet.

PicNick
30.11.2006, 14:39
Ok, denk aber dran, uns das mitzuteilen. Ich könnt' betroffen sein.

wkrug
30.11.2006, 19:17
Das Hardwareprotokoll von MIDI ist eigentlich einfacher als das von RS232.
Es handelt sich um eine einfache Stromschleife die von einem Optokoppler abgeschlossen werden.

Der schwierigere Teil ist eigentlich die Anzahl von verschiedenen Nachrichten, die über MIDI verschickt werden können.

Die für dich interessanten Befehle dürften "Note on", "Note off", "All Notes off" sein.
Die ersten beiden Befehle beschreiben welche Taste mit welcher Geschwindigkeit angeschlagen wurde. Wobei "Note on" mit einem velocity Wert von 0 ebenfalls eine Note abschaltet.
Auch Interessant dürften die "Aftertouch" Commandos sein, wenn das Keyboard das hergibt.

Ein kleines Problem dürfte die Datenabnahme sein. Ich würd einen PC900 Optokoppler von Sharp mit nachgeschaltetem Treiber für weitere MIDI Geräte verwenden.
Die CNY17 Optokoppler Lösung hat bei mir nie richtig funktioniert.

Da in einem MIDI Datenstrom eine Unmege an Nachrichten enthalten sein können, muss man gezielt nach den gewünschten Nachrichten suchen.
Dabei muß man dann auch entscheiden ob einer, mehrere oder gar alle 16 Kanäle des MIDI Protokolls überwacht werden sollen.

Interessante Nachrichten sind auch "Programm Change" und "Control Change" welche z.B. auf ein anderes Instrument umschalten oder die Lautstärke verändern.

Ich hab das Buch "MIDI in Therie und Praxis" zu Hause, da ist das Ganze wirklich verständlich erklärt und es sind auch ein paar Schaltungsbeispiele drin - hat aber auch schon ein paar Jahre auf dem Buckel.

1hdsquad
01.12.2006, 19:34
@ wkrug: Das ist mein Buch..., aber wie gesagt, das ist ja asbachuralt. Gibts keine Standardchips, mit denen das einfach geht? Im Buch ist eine Schaltung, mit der man ein nicht-midifähiges elektrisches Instrument "midifizieren" kann, wie der Autor sagt. Vom Ansatz könnte die Schaltung gehen, nur hat sie eben EPROMS drin, und sie gibt nicht für jeden Ton eine Spannung von 3 Volt (für LED) auf einem jeweils anderen "Kanal" (=LED) aus, sondern auf einem "Kanal" eine der Tonhöhe proportionalen Spannung...
Soll ichs mal posten?
MFG
Der Helge Fan
P.S.: Helge tourt in Deutschland, www.helge-schneider.de

wkrug
02.12.2006, 01:21
Ich hab mal aus dem Buch das "MIDI Baßpedal" gebaut.

Aber das ist ja genau der umgekehrte Weg.
Du hast eine vorhandene Tastatur und erzeugst ein MIDI Signal.

Du möchtest aber, wenn ich das richtig verstanden habe, aus einem vorhandenen MIDI Signal die Toninformationen rausfiltern und dadurch LED's zu leuchten bringen.

Mir ist kein käuflicher Chip bekannt der das kann.
Für einen Microcontroller dürfte das aber kein Problem darstellen.
Ich würd Da so an einen ATMEGA 8 oder 16 denken.
Der hat schon eine serielle Schnittstelle an Bord und könnte, mit entsprechender Software ausgestattet, sicher auch die "Note" Nachrichten rausfiltern. Sinn scheint mir das aber nur für einen Kanal zu haben, den man frei einstellen kann. Wie wärs mit einem BCD Schalter um ein Display zu sparen?.
Die Ausgangsports könnten dann über ein Software PWM sogar noch in der Helligkeit gesteuert werden. Bei der Menge an LED's wirst Du dann aber um einen nachgeschalteten Treiber (z.B. ULN 2003) nicht herumkommen.
Ein Software PWM für einen ATMEGA8 mit 3 Ausgangskanälen hätt ich in C (Codevision AVR) hier. Das zu Erweitern dürfte kein Problem sein.
Wenn Dir die Ports des ATMEGA 16 (ca. 30) für deine LED's nicht ausreichen kannst Du immer noch ein Schieberegister dranhängen, dann ist allerdings mit der Helligkeitssteuerung Ende.

Das mit dem Aufblitzen ließe sich vermutlich auch realisieren, aber dafür wäre dann die doppelte Anzahl an LED Ports nötig oder man macht das Ganze mit einem vorgeschalteten Kondensator pro roter LED.

tholan
02.12.2006, 02:09
Hey,
der Standartchip für Sowas heißt:
ATtiny2313, ATmega8 o.Ä.. Den mußte halt nur programmieren.
Ich habe gerade die Klangerzeugung der Drums
aus 'ner alten Quelle-Orgel extrahiert
und steuer die über MIDI mit 'nem Mega8 an.
Das Problemchen ist nur, Du brauchst dafür 'nen
"geraden" Quarz (1, 2, ... 16,20MHz) sonst wird der Fehler
bei 31250Baud (MIDI) zu groß.
Ich nehm übrigens als Optokoppler den 6N137, der ist billiger,
als der Klassiker PC900 und tut's klaglos.
Übrigens: MIDI ist Asbachuralt, da hat sich seit 1983
nicht viel geändert, sprich: Dein Buch stimmt sicher immer noch.
Nur die Chips, die sowas bedienen sind wesentlich komfortabler
geworden. Externe ROMs oder RAMs braucht man halt nicht mehr.
Und noch was interessantes: Im MIDI_Protokoll
ist jedes Byte, das mit einer 1 beginnt ein Statusbyte,
beginnt das Byte mit 0, so ist es ein Datum.
Das mit der proportionalen Spannung ließe sich sicher
gut mit der PWM bewerkstelligen. Wenn einzelne LEDs
leuchten sollen, sind Schieberegister (Serial in Parallel out) angesagt.
Wenn's wen interessiert, kann ich ja mal was Sachdienliches dazu Posten.

1hdsquad
02.12.2006, 15:52
Nur damit das keiner falsch versteht: Mit "Kanal" meine ich einen Ausgang für eine LED.
Was ist ein BCD-Schalter? Ein Display brauch ich nicht...
PWM ist auch egal, an und aus reichen.
@ tholan: Ja, poste doch mal.
Das Keyboard, an welches das Ganze dran soll, ist ein PSR 2100, das hat 61 Tasten, aber soviele LEDs brauch ich nichtmal. Das Blitzen war nur son Gedanke, das ist mir zu aufwendig (doppelte Port-Anzahl), also vergesst es.
Wie programmiere ich den Atmega etc.? Ich nehme an, an meinem PC? Also brauch ich ein spezielles Board und Software... Hab ich aber nicht! Könnte mir das jemand programmieren (="draufladen")?
MFG

1hdsquad
02.12.2006, 16:00
Hab mir grad mal Wiki reinmgezogen, "AVR-Einstieg leicht gemacht". Hab ich das richtig verstanden, dass ich den Atmega8 einfach an den Printerport schliessen kann mit dem Donglekabel? Und den dann programmieren?
MFG

wkrug
02.12.2006, 18:29
Hab ich das richtig verstanden, dass ich den Atmega8 einfach an den Printerport schliessen kann mit dem Donglekabel? Und den dann programmieren?

Anfangs konnt ich das auch nicht glauben.

Du hast das richtig verstanden.
Zum einspielen der Software in den Controller kannst Du dann aber leider nicht AVR Studio 4 verwenden.

Ich nehm zum Brennen der Atmel Controller Ponyprog und das geht mit dem Druckerport Dongle.

Es gibt im Internet sehr viele Lösungen für Programmierdongel für die Atmel AVR Reihe. Serielle und parallele.

Die einfachste Du ich kenne besteht aus einem Druckerportstecker mit 2 Widerständen einem kurzen Flachbandkabel und einem Pfostenfeldstecker

Schau mal auf diese Seite http://s-huehn.de/elektronik/avr-prog/avr-prog.htm

1hdsquad
03.12.2006, 12:05
Ist ja cool... Ich dacht immer, man bräuchte zwingend ein teures Board zum Programmieren.
MFG und danke schön!

1hdsquad
04.12.2006, 21:12
Ich hab wieder ein paar fragen:
1. Der Mega8 hat zuwenig Pins. Der Mega 32 aber auch! Ich hab 30 LEDs und dann noch Spannungsversorgung, Quarz, ISP und so weiter... Macht mehr als 40...
Da dachte ich mir, ich könnte ja die LEDs in ein Matrix schalten, das geht aber nicht, denn rein theoretisch muss ich eine beliebige Anzahl von Tasten gleichzeitig drücken können und es dürfen dabei nur die korrekten LEDs aufleuchten, aber bei beispielsweise einer 5x6 Matrix leuchten auch falsche LEDs, wenn ich Gruppe 1 (LED 1-5), Gruppe 2 (LED 11-16), Gruppe 3 (LED 1,6,11,16,21,26) und Gruppe 4 (LED 2,7,12,17,22,27) "aktiviere". In diesem Fall würden 4 LEDs leuchten, auch wenn ich nur 2 Tasten drücke! Nämlich LED 1,6,2,7. Blöd ;-) Kann ich Schieberegister verwenden? (schnell genug? Midi ist ja ein bisschen zeitkritisch...) Oder wie kann ich es anders machen?

2.Kann ich die LEDs direkt aus dem Mega/Schieberegister betreiben? (Im Wiki geht das mit einer LED, von 30 steht da nichts, und 20 mA mal 30 sind 600 mA... Ich denke nicht? Also: Welche Treiber?

3. Wie macht ihr die schönen Schaltpläne im Wiki? Muss man wieder Krösus sein und sich Eagle kaufen oder geht das kostenlos?

MFG und in riesiger Vorfreude auf eure zahlreichen Antworten ;-)
David

shaun
05.12.2006, 00:52
In einer Matrix steuerst Du natürlich die Spalten nicht alle gleichzeitig an, sondern nacheinander und aktivierst jeweils die Zeilen, deren LEDs in der jeweils angesprochenen Spalte leuchten sollen O:)
Schieberegister kannst Du selbstverständlich nehmen, wie schnell die Daten midiseitig reinkommen ist doch ziemlich egal und hat mit der Ausgabe nichts zu tun. Ich lese die Daten auch interruptgesteuert ein und je nach Note speichere ich deren Wert an eine Adresse und setze den Speicher für "ihre" LED auf einen voereingestellten Wert. Eine zweite, timergesteuerte Interruptroutine dekrementiert dann sämtliche gesetzten Speicher in 10ms-Abständen und sorgt dafür, dass alle LEDs, deren Speicherstellen ungleich Null sind, leuchten.

1hdsquad
05.12.2006, 16:39
Nacheinander heißt in winzigen Abständen von Sekundenbruchteilen? Gibts da online irgendeine "Lektüre" zu?
Mit der Geschwindigkeit stimmt auch, war zu kurz gedacht...
Mit der Matrix würde praktisch heißen: Ich aktiviere in meinen obigen Beispiel erst die eine und dann die andere LED, aber so schnell, dass man es nicht sieht? Oder versteh ich das nicht? Ich hab als Vorbild einfach die Matrix einer Tastatur genommen.
MFG

shaun
05.12.2006, 16:57
Hast völlig recht, genau so läuft's. Nennt sich dann gemultiplext, unter "multiplex led" mal suchen, je nach Laune noch den Controllertypen dazu, dann findest Du bestimmt brauchbare Codebeispiele. Wird übrigens meistens für 7-Segment-LED-Anzeigen gemacht, alle Segmentleitungen parallel und dann ein Display nach dem anderen mit einigen 100Hz ansteuern. Der Strom muss dabei natürlich grösser werden, theoretisch soviel mal Nennstrom wie Du Displays bzw. Spalten hast, praktisch hilft der Einsatz von Low-Current-LEDs viel mehr. Bei hochstromiger Ansteuerung muss man auch immer dran denken, dass die LEDs der gerade aktiven Spalte bei einem Programmabsturz nichts zu lachen haben.

1hdsquad
05.12.2006, 17:03
Kann ich denn überhaupt einen Ausgang auf + und - schalten? Sonst könnt ich auch An jeden Port 2 LEDs anschliessen, eine mit Kathode, eine mit Anode. Je nach Polund leuchtet dann die eine oder die andere, und dann auch ebenb PWM, wenn beide an einem Port leuchten sollen.
MFG

1hdsquad
05.12.2006, 17:13
Haha, wenn das Programm abstürzt, merkt man es wenigstens sofort ;-).
Code muss ich mal zurecht fummeln, wird schon klappen (die Programme auf meinem TI 83+ sind auch Basic...). Allerdings muss man auch bedenken, dass ich in den seltesten Fällen so viele Tasten einer Gruppe drücke, denn ich spiele ja auf dem Keyboard "nur" Musik und ich habe nur 10 Finger.
Multiplexen ist also auch nur pulsen der LEDs.
MFG

wkrug
05.12.2006, 17:20
Kann ich denn überhaupt einen Ausgang auf + und - schalten? Sonst könnt ich auch An jeden Port 2 LEDs anschliessen, eine mit Kathode, eine mit Anode. Je nach Pol und leuchtet dann die eine oder die andere.

Richtig, aber nicht zu Ende gedacht, denn dann leuchtet die Eine, oder die Andere aber niemals sind beide gleichzeitig Ein- bzw. Auszuschalten.

Ich würds trotzdem mit nem Hardware Schieberegister mit Latch machen.
Ist auch vom Timing her unkritischer und braucht nur 3 Leitungen - DATA; CLOCK; LATCH.
Da dabei die leuchtenden LED's ständig angesteuert sind, gibts auch bei einem Controllerhänger keine Probleme mit Überlastung.

Dann gehts eventuell schon mit nem ATMEGA8

1hdsquad
05.12.2006, 17:26
Naja, dann hab ich wieder keine Ahnung von der Ansteuerung der Register :-(
MFG

wkrug
05.12.2006, 19:59
Das geht relativ einfach.
ich geh mal von einem 48 stufigen Schieberegister aus.
Im Controller sind die Werte der 48 Bits also 6 Bytes aus deiner MIDI Routine vorliegend.
Wo eine LED leuchten soll liegt eine 1, wo keine leuchten soll ist eine Null.
(Du kannst es aber auch genau andersrum machen, wenn Du ein IC mit open Collector ausgängen hast)

Nun legst Du das erste Bit auf einen Controllerausgang, der mit dem Dateneingang des Schieberegisters verbunden ist.
Nun produzierst Du auf dem Ausgang der mit Clock des Schieberegisters verbunden ist eine 1 und gleich wieder eine 0.
Damit wurde das erste Bit ins Schieberegister eingelesen.
Jetzt legst Du das zweite Bit auf den Data Ausgang und erzeugst wieder einen Clock impuls usw. usw.........
Sind alle Bits dermaßen eingelesen übernimmst Du die Daten mit einem Impuls auf der Latch Leitung des Schieberegisters.
Die meisten Schieberegister kann man Kaskadieren, d.h. mehrere hintereinanderschalten - musst Dir halt nur ein passendes = möglichst viele Ausgänge, serial Data out( zum Kaskadieren), mit Latch raussuchen.

Hab mal in meine Halbleiteranschlußtabelle geschaut und den CD 4094 gefunden - das könnte ein möglicher Kandidat sein. Schau Dir bei Bedarf halt mal das Datenblatt an (von wegen Strombelastbarkeit, Geschwindigkeit usw.) Den gibts auch als 74HC4094 variante.

1hdsquad
06.12.2006, 22:32
Ich nehme definitiv den MEGA16. Da ich genügend Pins frei habe, werde ich mir die Register sparen (weniger Kosten und Schaltungsaufwand). Wenn ich z.B. diese LEDs nehme http://www.produktinfo.conrad.com/datenblaetter/175000-199999/184283-da-01-en-Hochleistungs-LED_TLHK5100_rot_5mm.pdf
kann ich entspannt meine Matrix aufbauen, da ich einen Pulsstrom von 1 Ampere 10 Mikrosekunden lang haben kann...
Und wenn ich bei 2 Gruppen jede LED-Gruppe der Matrix z.B. 0,5 Millisekunden "aktualisiere", habe ich 100 Hertz. Dann hätte ich doch einen Pulsstrom von 60mA (normal 30mA), weil die LED nur die halbe Zeit leuchtet, oder nicht?
Das ist mir jedenfalls leichter, einfach weil auch die Bauteilmenge sinkt.
Wie ist denn das jetzt mit den Treibern? Im Datenblatt des MEGAs steht, dass er pro pin 60 mA oder so was aushält, insgesamt glaub ich 300. Ist mir zu knapp, kann ich einfach Transistoren nehmen?Ich poste auch mal den Plan, noch ohne LEDs...
MFG

wkrug
07.12.2006, 01:06
60mA pro Port ?
Ich hatte mal irgendso was mit 20mA gegen Masse und 10mA gegen die positive Versorgungsspannung im Kopf und 200...300mA insgesamt, aber Datenblatt befragen hilft weiter \:D/
Wenn du gegen die positive Versorgungsspannung PNP Transistoren einsetzt und gegen die Negative NPN geht das mit Transistoren sicher.

Für die Menge an Transistoren würd ich aber dann schon wieder Transistorarrays einsetzen (Bauteileaufwand ?).

Bevor Du Dir Gedanken über die LED Ausgabe machst würd ich erstmal mit der Abfrageroutine für das MIDI Signal und ein paar LED's zur Ausgabe meine ersten Versuche machen. Da brauchst Du noch nicht so viele Bauteile und zum vorläufigen Austesten sollte das auch genügen.
Die "große" Version kannst Du ja dann später noch auflegen.

1hdsquad
07.12.2006, 22:12
Ich hatte die 60 im Kopf, muss noch mal schauen.
Die Routine bau ich mir gerade zusammen, ist schon ein bisschen knifflig als erstes Projekt ;-)
Scheiss zeitkritische serielle Datenübertragung, auch wenn ich nur empfangen muss.
Hat der MEGA16 fixed UART parameter?

Edit: Ups, Doppelpost. Kann gelöscht werden.

1hdsquad
07.12.2006, 22:17
Ich hatte die 60 im Kopf, muss noch mal schauen.
Die Routine bau ich mir gerade zusammen, ist schon ein bisschen knifflig als erstes Projekt ;-)
Scheiss zeitkritische serielle Datenübertragung, auch wenn ich nur empfangen muss. :-s ](*,)
Hat der MEGA16 fixed UART parameter?
Mein aktuelles Problem ist von MIDI-Natur: Sendet das Keyboard immer Daten oder nur bei gedrückter Taste? Ich weiß nämlich nicht, wie das mit dem buffered hardware UART ist. "Merkt" der, wenn das Byte, bestehend aus 10 bits (Start-, 8 Daten- und Stoppbit), anfängt? Oder kann es auch sein, dass er mitten im Byte anfängt, wenn er den Anfang verpasst hat (und nicht "mitzählen" konnte, bei welchem Bit er ist)?
MFG
David

wkrug
08.12.2006, 08:51
Der UART "merkt" wenn ein Byte anfängt und aufhört und auch wenn Codefehler entstehen kriegt der USART das mit.

Soweit ich weiß ist das Empfangsregister doppelt gepuffert.

Das heißt du kannst ein Byte auslesen, während das nächste empfangen wird.

Das Statusregister muß vor dem Empfangsregister ausgelesen werden, sonst werden im Register gesetzte Fehlerbits gelöscht.

Ich würd die Empfangsroutine sowieso in einem Interrupt auswerten und die Daten in einen Ringpuffer einlesen, der im Hauptprogramm abgearbeitet wird.

100 Byte sollten locker reichen.

Ob das Keyboard ständig Daten sendet kann man nicht sagen.
Wenn es "Active Sensing" "SMTP" (Time Protocoll) hat sendet es sicher ständig Daten. Wobei "Active Sensing" sehr wenige Bytes produziert.

Achte darauf, das ein Keyboard Daten für alle 16 möglichen MiDi Kanäle senden kann!

1hdsquad
08.12.2006, 21:05
Wenn es Active Sensing hat, sendet es aber dadurch keine Note-On/Note-Off Befehle, nehme ich an. Active Sensing brauch ich aber auch nicht. Mit den Kanälen weiss ich, dank "Midi in Theorie und Praxis", cooles Buch. Wahrscheinlich wird mein Ding alle Kanäle empfangen können ohne Beachtung dieser, denn es wird nur ein Keyboard eingesetzt zum Senden der Befehle und der Tastensplit ist auch egal.
MFG

wkrug
08.12.2006, 21:47
Active Sensing ist so ne Art Ausfallsicherung.
Wenn es aktiviert ist wir alle paar Sekunden, wenn nichts anderes auf dem Bus ist, ein Byte gesendet.

Dadurch kann ein Empfänger feststellen wenn das MIDI Kabel unterbrochen wurde und "hängende Noten" abschalten.
SMPTE ist ein Timecodeprotokoll das dazu dient mehrere MIDI fähige Geräte (Sequenzer) miteinander zu Synchronisieren. - Nur zur Erklärung.

Du wirst wohl nicht darum herumkommen mehrere Bytes miteinander auszuwerten - im MIDI Runnung Mode werden die Statusbytes nur einmalig gesendet, danach kommen nur noch Werte bis ein anderes Statusbyte gesendet wird.

Ich seh bei deinem Projekt die Krux eher in der Software als in der Ansteuerung der "paar" Led's

Den/die ausgewerteten MIDI Kanäle würd ich schon einstellbar machen - mit der Option alle Kanäle gleichzeitig scannen.

Vieleicht baust Du ja auch ein Display ein auf dem Du siehst welche MIDI Kanäle aktiv sind ?

Für dein Keyboard wirst Du das sicher nicht brauchen, aber eventuell kommt ja bei Deinem Projekt ein schönes MIDI Testgerät raus....?

1hdsquad
08.12.2006, 22:02
Naja, mal schauen. Ich brauch das Ding ja nicht, sondern mein Herr Vater ;-)
Er will nur LEDs, vielleicht überrasche ich ihn einfach. Kann man ja auch noch nachrüsten..
Lust auf ein Display, digitale Drehencoder etc. hätt ich aber auch.
Den Schaltplan hab ich soweit fertig, muss noch mal mit dem Board sehen. Kann das auf einer Lochrasterplatine aufgebaut werden?
Ach ja: Bei Active Sensing wird glaub ich alle 300 ms ein Byte gesendet, das erspart das Drücken des Panic-Knopfes, wenn man bei gespielter Note den Kanal umstellt (uns somit der Note-Off-Befehl auf dem richtigen Kanal ausbleibt ) :gift hähähähä...
Geh mal da drauf, die haben den Roland TB-303 nachgebaut.
http://www.ladyada.net/make/x0xb0x/index.html
MFG
1hdsquad

wanderer
09.12.2006, 23:40
3. Wie macht ihr die schönen Schaltpläne im Wiki? Muss man wieder Krösus sein und sich Eagle kaufen oder geht das kostenlos?

MFG und in riesiger Vorfreude auf eure zahlreichen Antworten ;-)
David

Gibt doch ne Freeware Version von Eagle ;)

1hdsquad
10.12.2006, 13:00
Hab ich später auch gesehen. Ist aber doch schon ***, die Beschränkung!
MFG

1hdsquad
20.12.2006, 16:45
Kann ich den ISP auch anders verwenden, wenn ich den mikro nicht programmieren, also die Pins als z.b. Ausgänge nutzen?
MFG

wanderer
20.12.2006, 17:19
Ja kannst du...

1hdsquad
21.12.2006, 23:08
Ok, dann konfiguriere ich sie wie gewohnt. Danke schön!

1hdsquad
13.01.2007, 17:22
So?
Müsste so gehen, oder?
An die großen Stecker kommen die 36 LEDs

wkrug
13.01.2007, 17:35
Wenn PD6 und PD7 noch als Multiplexleitung für die LED's dienen sollen würd ich die Ports noch mit Transistoren puffern.

tholan
13.01.2007, 23:49
Hi,
den Pullup (4k7) zwischen Optokopler und PD0
kannst Du weglassen, wenn Du den internen Pullup
im Code aktivierst.
Ist vielleicht ein klein bischen Arbeit weniger :)

1hdsquad
14.01.2007, 17:28
@ wkrug: Also noch zwei Transistoren dazwischen? Warum?
@ tholan: Oh, das vereinfacht die Sache ja komplett ;-)
Danke für die Antworten, werde mal weitermachen und irgenwann den Code posten, erstmal muss mein Pollinboard ankommen...
MFG

1hdsquad
24.01.2007, 20:44
So? Mit den Transistoren müsste es doch gehen...

wkrug
25.01.2007, 07:59
Also noch zwei Transistoren dazwischen? Warum?
Weil mehrere Leuchtdioden gleichzeitig aktiv sein können und sich der Strom dann aufaddiert und der Port (kann er nun 60mA?) überlastet werden könnte.

1hdsquad
26.01.2007, 16:20
Also so? Jeder kann 20mA, glaub ich.
MFG
Achja: Das Pollinboard loift super! Bin für den Preis zufrieden damit...