Jump to content

Aufbau eines Tastaturscanners für Klaviaturen


Stephan

Recommended Posts

Hallo,

ich möchte gerne eine Orgelkonsole bauen, in der ich 4 Manuale (FATAR, 8x8-Diodenmatrix) und ein Pedal verbaut habe. Nun möchte ich einen möglichst effizienten und zuverlässigen Scanner für diese Klaviaturen bauen. Ich hab mir schon mal das Beispiel "sm_c_example1_v1c.zip" auf der Download-Seite von ucapps.de geladen. Funktioniert auch ganz toll!

Nun 3 Fragen:

1. Wenn ich 4 Klaviaturen anschließen möchte, ist es dann besser, 4 8x8-Matrix-Scanner zu implementieren? Wenn ja, muss ich die Assembler-Routine 4x bereitstellen, oder wie funktioniert das?

Oder soll ich besser eine 16x16-Matrix bauen, mit der ja dann 256 Tasten eingescannt werden können? Was ist performanter? (Die Manuale in einer 16x16-Diodenmatrix bereitzustellen, wäre kein Problem)

Mir geht es in diesem Fall um die Assembler-Routine (ich habe keine Erfahrung mit Assembler) - was muss ich hier ändern, um eine 16x16er Matrix zu implementieren? (Dazu brauch ich ja 16xDIN und 16xDOUT)

2. Ich möchte die verbleibenden 112 IOs natürlich für Registertaster weiterverwenden. Ist das mit einem PIC machbar, oder setzt man für solch einen Aufbau lieber für jedes Manual einen eigenen PIC ein, die dann alle per MIDI in Reihe geschalten werden? Das ganze sollte halt mit möglichst geringer Latenz realisiert werden.

3. Es gibt da noch einen "superfast 80us" Matrix-Download: "sm_c_example2_v1c.zip". Nur hier wird in der INIT-Routine die Shift-Register-Treiber über MIOS abgeschalten:

MIOS_SRIO_NumberSet(0); // DONT USE THE MIOS SRIO DRIVER!!!

Ich finde hier keine Einstellung welches Shift-Register für den Scanner hergenommen wird (möchte das selbst wählen können) und kann man hier die restlichen IOs der Shiftregister trotzdem als normale DIN und DOUTs verwendet werden? Wenn ja, wie?

Gruß

Stephan

Link to comment
Share on other sites

Hallo Stephan,

zu 1: hierfuer gibt es bereits einen fertige Driver, er findet bei der BLM16x16+X Verwendung, und bedient defaultmaessig 5 8x8 matrizen.

(Download hier, suche nach blm_scalar)

Das besondere an diesem Treiber ist, dass er eine C Schnittstelle bietet, so dass man die zu sendeten MIDI Events relativ einfach selbst anpassen kann - siehe auch das main.c file: http://svnmios.midibox.org/filedetails.php?repname=svn.mios&path=%2Ftrunk%2Fapps%2Fcontrollers%2Fblm_scalar%2Fmain.c

Eine 16x16 Matrix halte ich fuer ungeeignet, da sich hiermit die Latenz verdoppelt.

Zu 2: bei der BLM_SCALAR sind die uebrigen DIN Register frei belegbar. Die 5. 8x8 Matrix liefert Dir bereits 64 weitere Eingaenge, es bleiben 11 DINs uebrig.

Evtl. koennte man den Treiber auch so konfigurieren, dass noch mehr Matrizen gescannt werden (bin mir gerade nicht sicher, ob das problemlos funktioniert)

Zu 3: funktioniert mit dieser Variante nicht, deshalb findest Du auch keine Hinweise in der Dokumentation.

Gruss, Thorsten.

Link to comment
Share on other sites

Hallo Thorsten,

zuerst mal vielen Dank für die prompte Antwort!!

Leider kann ich aber unter dem Download-Link kein blm_scalar finden. Ich kann zwar den Sourcecode über svn downloaden, aber dort ist das blm-module nicht dabei. Wo kann man ein komplettes blm_scalar-Projekt herunterladen?

Kann ich das Projekt auch so ändern, daß nur 4 8x8-Matrizen gescannt werden? Ich möchte so viel DIN/DOUT-Register für meine Registertaster zur Verfügung haben.

Gruß

Stephan

Link to comment
Share on other sites

Hallo Stephan,

evtl. musst Du bei Deinem Webbrowser den Refresh-Button druecken; ich habe die blm_scalar Applikation erst vor zwei Stunden dort eingebunden (vorher war sie nur im Repository verfuegbar).

Die fuenfte Matrix laesst sich im Makefile wie folgt deaktivieren:


BLM_SCALAR_DEFINES += -DBLM_SCALAR_DIN5 0
[/code]

Zum SVN: das Repository wird nicht mit dem Webbrowser, sondern mit einem speziellen SVN Client heruntergeladen.

Falls Du unter Windows arbeitest, ist Tortoise die erste Wahl: http://tortoisesvn.tigris.org/

Weitere Infos stehen unter: http://www.midibox.org/dokuwiki/doku.php?id=windows_toolchain_core

Gruss, Thorsten.

Link to comment
Share on other sites

Hallo Thorsten,

vielen Dank für das Projekt BLM_SCALAR!

Wie funktioniert das, wenn ich Manuale besitze, bei denen die Diodengatter die Kathoden zusammengeschaltet sind? Klar, ich muss die Columns/Rows an den DOUT/DIN-Modulen tauschen, aber gibt es noch einen Parameter wie z.B. SM_SWAP_CR, damit auch softwareseitig die cols+rows richtig ausgewertet werden?

Gruß

Stephan

Link to comment
Share on other sites

Hallo Stephan,

die DOUTs muessen in diesem Fall invertierte Werte ausgeben, dies wird mit BLM_SCALAR_CATHODES_INV_MASK=0x00 eingestellt.

Ich werde Dir morgen eine spezielle Firmware zusammenbasteln, denn die verfuegbaren Defines (die in blm_scalar.inc ausgewertet werden) sind nicht immer selbsterklaerend.

Gruss, Thorsten.

Link to comment
Share on other sites

Hallo Stephan,

ich gehe davon aus, dass Du nichts vertauschen musst.

Falls die Tasten falsch gemapped werden, kann man die Notenwerte ja einfach in der Software umkodieren.

Hier liegt nun die reduzierte Firmware - sie sieht sehr uebersichtlich aus ;-)

http://svnmios.midibox.org/listing.php?repname=svn.mios&path=%2Ftrunk%2Fapps%2Fcontrollers%2Fblm_scalar_4x8x8_buttons%2F

Unter http://www.ucapps.de/mios/blm_scalar_4x8x8_buttons_v1.zip habe ich Dir ein fertiges Binary abgelegt, damit Du die Firmware gleich mal ausprobieren kannst.

Gruss, Thorsten.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...