Forum: Mikrocontroller und Digitale Elektronik 2-Oktaven Klaviatur aus altem MIDI controller mit Arduino nutzen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von A. P. (a_p346)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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
von Matthias S. (Firma: matzetronics) (mschoeldgen)


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

von Hmmm (Gast)


Bewertung
0 lesenswert
nicht lesenswert
A. P. schrieb:
> Gibt es einen einfachen Weg das Modul mit einem Arduino anzusprechen?

Spricht etwas dagegen, ganz naheliegend die MIDI-Daten zu verwenden?

von Chregu (Gast)


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

von AVerr (Gast)


Bewertung
1 lesenswert
nicht lesenswert
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 ...

von Hmmm (Gast)


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

von Moscon (Gast)


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

von Chregu (Gast)


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

von A. P. (a_p346)


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

von Tast Athur (Gast)


Angehängte Dateien:

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

von Klaviatur (Gast)


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

von Tast Athur (Gast)


Bewertung
1 lesenswert
nicht lesenswert
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.

von meier (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
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 ....

von musikus (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
> 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.

von Einer (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Das ist eine einfache Diodenmatrixtastatur.
Allerdings mit 2 Kontakten pro Taste,
damit kann man eine anschlagsdynamische Tastenabfrage machen.

von Progger (Gast)


Bewertung
0 lesenswert
nicht lesenswert
musikus schrieb:
> Und nur 2 Oktaven sind eigentlich auch zu nichts zu gebrauchen.

Die modernen DJs arbeiten mit nicht mehr :-)

von musikus (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Die modernen DJs arbeiten mit nicht mehr :-)

Und so wie es sich anhoert sind die Synthies auch alle kaputt.

von Rolf M. (rmagnus)


Bewertung
1 lesenswert
nicht lesenswert
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.

von Tast Athur (Gast)


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

von Rolf M. (rmagnus)


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

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]
  • [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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.