Hallo liebe Elektronik-Freunde, ich habe einen alten Alesis Photon X25 MIDI Controller aus dem Jahr ~2005 den ich vor dem Recycling mal auseinandergeschraubt habe. Die Klaviatur fühlt sich ziemlich gut an und so würde ich sie gerne mit Arduino nutzen. Leider weiss ich aber nicht wo ich anfangen soll. Auf der Unterseite befindet sich ein 8x2 male pin header. Dieses ist verbunden mit einer anderen Platine. Die 4 ICs die dort sichtbar sind sind (von links nach rechts) AHC138 - 3-LINE TO 8-LINE DECODERS/DEMULTIPLEXERS https://www.ti.com/lit/ds/symlink/sn74ahc138.pdf?ts=1609955729193 2 x AHC573 - Octal Transparent D-Type Latches With 3-State Outputs https://www.ti.com/lit/ds/scls242l/scls242l.pdf?ts=1609954871362 AHC541 - SNx4AHC541 Octal Buffers/Drivers With 3-State Outputs https://www.ti.com/lit/ds/symlink/sn74ahc541.pdf?ts=1609892897983 Sowas haben doch sicher schon viele schlauere Menschen vor mir versucht. Gibt es einen einfachen Weg das Modul mit einem Arduino anzusprechen?
:
Bearbeitet durch User
A. P. schrieb: > Aber woher weiss > ich wieviel Volt das Teil braucht? Woher was die anderen Pins tun? Das braucht überhaupt keine Speisespannung, denn es handelt sich lediglich um eine Tastenmatrix. Die sollte man mit einem Mikrocontroller abfragen, der kümmert sich um Abtastung und Erzeugung der MIDI Signale. Du möchtest einen Algorithmus, der 'N-Key Rollover' beherrscht, damit das gleichzeitige Drücken mehrerer Tasten erkannt werden kann. Nicht ganz trivial, als Anfänger gibts auch einfachere Programme. Als erstes solltest du die Matrix durchklingeln und die Erkenntnisse niederschreiben.
A. P. schrieb: > Gibt es einen einfachen Weg das Modul mit einem Arduino anzusprechen? Spricht etwas dagegen, ganz naheliegend die MIDI-Daten zu verwenden?
Matthias S. schrieb: > Das braucht überhaupt keine Speisespannung, denn es handelt sich > lediglich um eine Tastenmatrix. Wenn er die Logik weiterverwenden will schon... Hmmm schrieb: > Spricht etwas dagegen, ganz naheliegend die MIDI-Daten zu verwenden? Ja, es ist nur eine Tastatur! Gruss Chregu
Also auf dem letzten Bild sieht es so aus als ob die obere Reihe des 16er Pin-Headers zum AHC138 (in dem fall dann wohl der Treiber) geht und die untere Reihe zu einem der Buffer. Du hättest dann also von der Pin-Belegung her Spaltentreiber in der 1. Reihe vom 16er-Stecker und Zeilenleser in der 2. Reihe, mit Dioden auf der Platine. Zur Ansteuerung: https://www-user.tu-chemnitz.de/~heha/Mikrocontroller/Tastenmatrix.htm Wie das mit Arduino ist weiß ich nicht, aber irgendjemand wird da bestimmt eine Library für gemacht haben ...
Chregu schrieb: > Ja, es ist nur eine Tastatur! Es ist von einem kompletten Gerät die Rede. Wenn der Rest nicht defekt ist, kommen da MIDI-Daten raus, die man problemlos auswerten kann (Optokoppler, UART).
Für die Auswertung ihrer Klaviaturen benutzen die Hersteller von Keyboards meistens eigene ASICs mit. Kann aber sein, dass so ein stand alone Gerät das mit einem Controller tut. Aber ist das denn so kaputt, dass man MIDI nicht verwenden kann? M.W. ist das doch nur ein serielles Protokoll und zum Auswerten von Tastaturen sicher schnell genug.
Hmmm schrieb: > Es ist von einem kompletten Gerät die Rede. Naja: A. P. schrieb: > Die Klaviatur fühlt sich ziemlich gut an und so würde ich sie gerne mit > Arduino nutzen. Sagen wir mal: Es gibt das komplette Gerät... Gruss Chregu
Wow. Vielen Dank für eure Antworten! Sorry Chregu, Sorry Hmmm, ich habe nicht klar gesagt, dass ich tatsächlich nur die Klaviatur nutzen möchte. Hätte sie am liebsten direkt an nem Arduino dran bzw. ne einfache Platine mit nem IC bekomme ich noch hin. Vielen Dank AVerr für die Beschreibung der Belegung und dem Link. Ich glaube das ist es was ich tun muss. Vielen Dank Moscon, ich werde über ASICs nachlesen Jetzt erstmal den Link von AVerr von der TU Chemnitz reinziehen ... :D
ASICs für die Auswertung der Tastatur ist Blödsinn! Das kann jede MCU/CPU. Die Tastaturen sind zudem meist von Firmen wie Fatar hinzugekauft - einfache Matrix mit Dioden (die ja auch auf dem Bild zu sehen sind). Hierzu wird ein einzelner Pin der Matrix mit Pegel 0 angesteuert (alle anderen 1), und enstprechend rückgelesen. Im Code würde dies dann so aussehen (der Arrayindex wäre dann die MIDI Notennummer):
1 | KS0_PORT = 0; |
2 | |
3 | if(KB0_PORT) |
4 | KEY_current_state_au8[36] = 0; |
5 | else
|
6 | KEY_current_state_au8[36] = 1; |
7 | |
8 | if(KB1_PORT) |
9 | KEY_current_state_au8[37] = 0; |
10 | else
|
11 | KEY_current_state_au8[37] = 1; |
12 | |
13 | if(KB2_PORT) |
14 | KEY_current_state_au8[38] = 0; |
15 | else
|
16 | KEY_current_state_au8[38] = 1; |
17 | |
18 | if(KB3_PORT) |
19 | KEY_current_state_au8[39] = 0; |
20 | else
|
21 | KEY_current_state_au8[39] = 1; |
22 | |
23 | if(KB4_PORT) |
24 | KEY_current_state_au8[40] = 0; |
25 | else
|
26 | KEY_current_state_au8[40] = 1; |
27 | |
28 | if(KB5_PORT) |
29 | KEY_current_state_au8[41] = 0; |
30 | else
|
31 | KEY_current_state_au8[41] = 1; |
32 | |
33 | if(KB6_PORT) |
34 | KEY_current_state_au8[42] = 0; |
35 | else
|
36 | KEY_current_state_au8[42] = 1; |
37 | |
38 | if(KB7_PORT) |
39 | KEY_current_state_au8[43] = 0; |
40 | else
|
41 | KEY_current_state_au8[43] = 1; |
42 | |
43 | KS0_PORT = 1; |
44 | |
45 | // --------------------------------------------------------------------
|
46 | KS1_PORT = 0; |
47 | |
48 | if(KB0_PORT) |
49 | KEY_current_state_au8[44] = 0; |
50 | else
|
51 | KEY_current_state_au8[44] = 1; |
52 | |
53 | if(KB1_PORT) |
54 | KEY_current_state_au8[45] = 0; |
55 | else
|
56 | KEY_current_state_au8[45] = 1; |
57 | |
58 | if(KB2_PORT) |
59 | KEY_current_state_au8[46] = 0; |
60 | else
|
61 | KEY_current_state_au8[46] = 1; |
62 | |
63 | if(KB3_PORT) |
64 | KEY_current_state_au8[47] = 0; |
65 | else
|
66 | KEY_current_state_au8[47] = 1; |
67 | |
68 | if(KB4_PORT) |
69 | KEY_current_state_au8[48] = 0; |
70 | else
|
71 | KEY_current_state_au8[48] = 1; |
72 | |
73 | if(KB5_PORT) |
74 | KEY_current_state_au8[49] = 0; |
75 | else
|
76 | KEY_current_state_au8[49] = 1; |
77 | |
78 | if(KB6_PORT) |
79 | KEY_current_state_au8[50] = 0; |
80 | else
|
81 | KEY_current_state_au8[50] = 1; |
82 | |
83 | if(KB7_PORT) |
84 | KEY_current_state_au8[51] = 0; |
85 | else
|
86 | KEY_current_state_au8[51] = 1; |
87 | |
88 | KS1_PORT = 1; |
89 | |
90 | usw... |
Es gibt auch Tastaturtypen, da sind die Dioden in anderer Richtung verbaut. So nun viel Spaß.
>Sorry Chregu, Sorry Hmmm, ich habe nicht klar gesagt, dass ich >tatsächlich nur die Klaviatur nutzen möchte. Das Midi-Protokoll ist so ziemlich das einfachste das ich kenne und wesentlich einfacher als irgendwelche Matrix-Tastaturen abzufragen. Viele alten Midi-Keyboards die ich in den Händen hatte, senden aber wild Midi-Daten weil Potis klemmen etc. Also ich würde das Ding einfach in die Tonne hauen.
Zum Spaß würde ich es dem TO gönnen. Das Auswerten ist wirklich nicht schwer - Potis sind ja auch keine vorhanden. Einfach mal mit dem Tastaturlayout von meinem vorherigen Post mit einem Multimeter prüfen - sollte alles an der 8x2 Stiftleiste vorliegen. MIDI Protokoll an sich ist nicht sehr schwer, da die Kiste ja nur noch Note On/Off senden soll. Ich tippe mal, dass die Tastatur Velocity hat. Dann würden pro Taste zwei Schalter via Matrix vorhanden sein. Der Velocitywert würde sich dann aus der Verzögerung zwischen Schalter 1 und 2 der Taste ergeben. Bei MIDI kann es nur beim Thema Empfangen etwas tricky werden (was hier entfällt). Manche Geräte neigen dazu das erste und zweite MIDI Byte bei Folge einfach wegzulassen, um Daten zur Übertragung zu sparen (z.B. mehrere Note On's in Folge). Hatte ich erst Jahre später mal bemerkt, da manche Hersteller dies so machen, und andere eben nicht.
A. P. schrieb: > Die > Klaviatur fühlt sich ziemlich gut an und so würde ich sie gerne mit > Arduino nutzen. Wer sich auch nur einigermassen ernsthaft mit Musik beschäftigt für den sind zwei Oktaven eigentlich ziemlich sinnlos. Minimum (auch bei kleinen (Spielzeug-) Keyboards) ist wohl drei Otaven, besser noch mehr. Sonst wird's recht pfriemelig ....
> ASICs für die Auswertung der Tastatur ist Blödsinn! Das kann jede > MCU/CPU. Generell: MCU/CPU für die Auswertung der Tastatur ist Blödsinn! Das macht der in den Instrumenten verbaute ASIC locker nebenbei mit. Wenn der dann noch ein MIDI-out hat, braucht man eigentlich gar nichts tun. Hat man das Instrument seines ASIC beraubt, oder kennt der ASIC kein MIDI, bleibt nur MCU/CPU. Wenn der TO aber so etwas einfaches wie die Tastaturmatrix aufzudroeseln nicht hinbekommt, wird er an der Tastatur nicht viel Spass haben. Und nur 2 Oktaven sind eigentlich auch zu nichts zu gebrauchen.
Das ist eine einfache Diodenmatrixtastatur. Allerdings mit 2 Kontakten pro Taste, damit kann man eine anschlagsdynamische Tastenabfrage machen.
musikus schrieb: > Und nur 2 Oktaven sind eigentlich auch zu nichts zu gebrauchen. Die modernen DJs arbeiten mit nicht mehr :-)
> Die modernen DJs arbeiten mit nicht mehr :-)
Und so wie es sich anhoert sind die Synthies auch alle kaputt.
Klaviatur schrieb: > Viele alten Midi-Keyboards die ich in den Händen hatte, senden aber wild > Midi-Daten weil Potis klemmen etc. Ja, das ist ein Problem. Wenn man die Potis aber eh nicht braucht, muss man eben entweder dieses "Rauschen" wegfiltern oder die Potis totlegen. Tast Athur schrieb: > Manche Geräte neigen dazu das erste und zweite MIDI Byte bei > Folge einfach wegzulassen, um Daten zur Übertragung zu sparen (z.B. > mehrere Note On's in Folge). Hatte ich erst Jahre später mal bemerkt, da > manche Hersteller dies so machen, und andere eben nicht. Das ist Teil der MIDI-Spezifikation und nennt sich "running status". Deshalb muss man auch ein Note-On mit Velocity=0 als äquivalent zu Note-off interpretieren. Dadurch wird das Drücken und Loslassen einer Taste zu zwei MIDI-Nachrichten vom selben Typ, und running status kann angewendet werden.
Rolf M. schrieb: > Das ist Teil der MIDI-Spezifikation und nennt sich "running status". > Deshalb muss man auch ein Note-On mit Velocity=0 als äquivalent zu > Note-off interpretieren. Dadurch wird das Drücken und Loslassen einer > Taste zu zwei MIDI-Nachrichten vom selben Typ, und running status kann > angewendet werden. Danke Rolf für den Bennenung. Note on = 0 hatte ich im Laufe der Zeit dann auch mal bei einigen Geräten gesehen. Für Tests hatte ich immer Cubase "dazwischen" - das nutzt auch kein "running status", und "filtert" es auch. Hatte damals noch die MIDI Spec 1.0 als Grundlage verwendet, da hatte ich es nicht gesehen, oder vielleicht übersehen.
Tast Athur schrieb: > Danke Rolf für den Bennenung. Note on = 0 hatte ich im Laufe der Zeit > dann auch mal bei einigen Geräten gesehen. Für Tests hatte ich immer > Cubase "dazwischen" - das nutzt auch kein "running status", und > "filtert" es auch. Das kommt aber auch auf dein MIDI-Interface an. Wenn das ein class-compliant USB-MIDI-Adapter ist, dann liegt's daran, dass USB-MIDI kein running-status kennt. Das heißt, es wird beim Empfangen aufeglöst, und ob es beim Senden wieder angewendet wird, hängt vom Interface ab. Das kann die Software gar nicht beeinflussen. > Hatte damals noch die MIDI Spec 1.0 als Grundlage verwendet, da hatte ich > es nicht gesehen, oder vielleicht übersehen. Soweit ich weiß, war das schon immer drin. Aber das kann man natürlich schnell übersehen. Es ist auch eher weiter hinten in der Spec.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.