MIDI Controller mit 92 Möglichkeiten bauen

Moin,

In der Tube habe ich von Götz Müller Dürholdt einen mehr Teiligen Workshop für einen eigenen selbstbau MIDI Controller gefunden.

hier der Link zu seiner Seite https://goetzmd.de/

Seine Erklärungen haben mir viel "AHA!" und " ...ach so geht das" gebracht.

...nun ja, den Entwurf und das Layout mit was soll wie und so ist fertig.
Das Frontblech auch so gut wie.

Also, es werden MIDI Controller mit 92 Möglichkeiten in 2 Varianten:
Version 1: mit 23 Fadern (Control Nummern) und 69 Tastern (Noten Werte) [=zusammen 92]
Version 2: Nur Taster 92 Stück

Warum genau 92 fragt ihr?
So fing ich an...
beim Layout habe ich viel und noch mehr als viel, hin und her geschoben

und geschaut was mit einer Vernünftigen Haptik bei dem vorgegebenen Platz geht.
Eigentlich ist es Zufall das beide Versionen auf die gleiche Zahl von 92 kommen.

GMD (Götz Müller Dürholdt) hat gut erklärt wie das mit den Multiplexern gemacht wird.

Als erstes nehme ich mir Version1 vor und als Frage stellt sich mir:
Ich nehme 3 ANALOG IN mit 3 Multiplexern (4051) für die 23Fader
und 9 DIGITAL IN mit 9 Multiplexern für die 69 Taster.
einige Anschlüsse bleiben dann ja noch frei, evtl. möchte ich da noch einige LED Ausgaben Anzeigen lassen. so als Blick in die Zukünftigen Ideen...

Die MIDI Ausgabe möchte ich über 5POL DIN machen.
Experimente mit dem UNO haben gut Funktioniert.

Jetzt die Frage:

MIDI ist ja nicht sooo schnell, von den Anschlüssen würde der UNO mit Multiplexern ja auch reichen.
oder sollte man da lieber einen anderen nehmen.

und: da bin ich noch nicht: Könnte ich auch eine kleine 16x2Anzeige anschließen und mir den ControllerNamen und Wert anzeigen lassen? oder einen beliebigen Text?

Also was sagt ihr?
UNO ja oder neee?

bei dem Sketch werde ich bestimmt auch noch einige Hilfe von euch benötigen. mal sehen...
:wink:

Grosses Dankeschön schon mal im voraus

LG Rebecca

Gefühlsmäßig würde ich einen Mega vorziehen. Der hat so viele I/O Pins, daß Du (fast) ohne Multiplexer auskommen kannst, und in der Abfrage der vielen Taster schneller werden kannst. Zudem hat der Mega mehrere Serial Schnittstellen, falls die bei der MIDI Schnittstelle eine Rolle spielen könnten. Ich selbst habe von MIDI keine große Ahnung.

Ein Display kann die Gesamtgeschwindigkeit auch ausbremsen, falls das eine Rolle spielt. Da könnte auch ein RasPi die bessere Wahl sein.

Der Mega hat auch mehr Speicher.
Grüße Uwe

Wie viele Fader und Taster kannst Du gleichzeitig bewegen und drücken?
Richtig - und deshalb ist die Rechenpower nicht so ausschlaggebend. LCD ist da locker drin, wenn das Scanning flott genug ist.
Und ich plädiere auch für einem Mega.

Vor zwei Jahren habe ich Dir vermutlich schon mal einen Teensy bekannt gemacht, mit dem ich als Unwissender recht schnell Töne an ein PC-Programm schicken konnte. Mehr Speicher und schneller sowieso, aber ob Du das wirklich brauchst, weiß ich nicht. Wollte es nur erwähnt haben.

Lieber gleich 20x4. Beim Mega2560 ginge auch OLED, braucht für die Fonts mehr Speicher.

Ich kann ich den anderen Aussagen nur anschließen. Die geschwindigkeit des UNO und seine Pin´s reichen zwar allemale aus. Nur !! Du willst ja sicherlich auch noch Presets erstellen und speichern. Dann hast Du ja noch die MIDI Codes die Du senden und empangen musst. Da muss ja eine Tabelle erstellt werden und das frisst Speicher.

Ich tendiere zu einem Aufbau auf einer eigenen PCB mit dem nackten Atmega2560, dann hast du im vergleich zum Arduino Mega nochmals mehr Pins zur Verfügung und musst kaum noch was über Portexpander auslagern.

Ich hab für ein Projekt wo ich ein paar hundert I/O gebraucht habe zwei mal die günstige Variante mega 2560 PRO (aus fernost keine 10 Euro) und 10x pcf8575 genommen. Und ein i2c 16x2 Display. Klappt soweit ganz gut aber die Frage ist natürlich wie schnell du alles eingelesen haben musst. Ein paar millis vergehen da natürlich aber die gehen u.U. ja schon fürs debounce drauf :slightly_smiling_face:

Falls du später beim Sketch ankommst kannst du gerne von meinem Code klauen / dich inspirieren lassen (wenn überhaupt nötig :wink: )

10 Finger und Nase machen zusammen 11 :wink:

Die Regel wird aber eher 1,2,3,4 sein

Ja einen Teensy hab ich noch in der Bastel Kiste rumliegen.

mit der Anzeige... mal sehen, das hat noch keine Priorität

Eigentlich keine Veränderungen, also auch keine Presets
jeder Regler/ Taster bekommt feste Werte, änderungen sind in der über MIDI angesteuerten Software

Portexpander...
Meinst du damit die Multiplexer?

Bestimmt nötig.
Dankeschön

Erstmal wieder grande Dankeschön für euer Interresse und eure Mühe
Und Entschuldigt bitte meine absoluten Anfänger fragen.

Also MIDI arbeitet mit 31250Baut (Folge5 bei GMD), das klingt doch schon ziemlich langsam.

Grundlegende Überlegung:
Egal ob UNO oder Mega:
Werden alle Eingänge gleichzeitig abgefragt?
Dann sind A? Multiplexer easy mit maximal der 8fachen Zeit je Kanal
Oder checkt der Controller B? jeden Eingang nacheinander?
Dann ist also nach meinem Verständnis 11*8=die 88fache Zeit je Eingang.
Wie groß ist dann die wirkliche Latenz?
bis 5millisekunden ist kein Problem.
Wie rechnet man das denn richtig aus?

Und wäre die Latenz bei B? nicht beiden dann gleich, da doch beide mit 16MHZ getaktet sind?
Bei A? wäre es also ein deutlicher Gewinn an Schnelligkeit...

Der Mega lässt mehr Optionen für spätere Erweiterungen, besonders wegen wenn Display Ausgabe weil Grösserer Speicher... das macht ihn mir auch Sympathischer.

Ist die Ausgabe über 5POL DIN dort genauso Easy Möglich? Ist der Aufbau / Anschließen MEGA / UNO wirklich so ähnlich? siehe: MIDI-Controller selber bauen (E05) richtig löten lernen - MIDI-Out - YouTube

:wink:
Und ja, denke einige haben schon RICHTIG vermutet, es geht wieder um das Lichtpult. Da ich den "alles Freischaltdongle" inzwischen gekauft habe, kann ich jetzt mit vielen Schnittstellen an die Software, also auch über MIDI.
Ziel dieser Übung ist ein Lichtpult speziell nach meinen Wünschen und Ideen zu haben.

Dieser Workshop hat mir vieles was wie Klingonisches Vulkanisch klang, doch verständlich gemacht. Vor dem Sketch habe ich ein wenig noch muffen, mal sehen.

Diesmal wird es richtig EDEL


NEIN, das geht besser...
Ich möchte es ein wenig spannend machen, aber auch den langen Weg zum fertigen Layout etwas zeigen.

Vielleicht so:
Die analogen Eingänge müsstest du ja über den Multiplexer nacheinander einlesen.
Im Datenblatt des 4051 steht für t_PHL und t_PLH ein max Wert von 1µs. Wenn man das jetzt mal 2 nimmt für einen Kanalwechsel und die Analogwandlungszeit vom Arduino von

mit 100 µs dann wären es ja 23 x 102µs bzw. vielleicht ein wenig "extra" Reserve-Wartezeit beim Kanalumschalten um auf Nummer sicher zu gehen vielleicht 23 x 105µs .
Also grob 2,5ms.

Bei den digitalen stellt sich mir wie gesagt die Frage ob du die Tasten entprellen musst oder ob das durch deinen Aufbau schon gegeben ist. Dabei können alleine ja schon 50 ms draufgehen. Muss aber ja nicht zwingend ein Problem für dich sein, weil es ja nur eine Verzögerung für die Erkennung des Tastendrucks bedeutet (aber dafür dann einen stabiler Zustand darstellt) und nicht zwingend auf den Ton auswirkt. Bin da jetzt aber nicht so der Ton- bzw. Musikexperte :slight_smile:

Grundsätzlich sparst du auf jeden Fall Zeit wenn weniger Kommunikation mit den Multiplexern nötig ist und möglichst viele Eingänge direkt am Mega dran sind.

Dein Verständnis ist richtig da nacheinander gelesen wird, z.B. so nach dem Motto:

int taste1 = digitalRead(PIN_TASTE1);
int taste2 = digitalRead(PIN_TASTE2);
...
int fader1 = analogRead(PIN_ANALOG_GRUPPE1);
// hier naechsten multiplex kanal ansteuern und ein paar mikros warten
int fader2 = analogRead(PIN_ANALOG_GRUPPE1);
...
int fader9 = analogRead(PIN_ANALOG_GRUPPE2);
// hier naechsten multiplex kanal ansteuern und ein paar mikros warten
int fader10 = analogRead(PIN_ANALOG_GRUPPE2);
...

Viel Spaß beim Basteln :slight_smile:

PS: da das Ganze in Summe ja schon umfangreich ist, würde ich empfehlen das Programm schrittweise aufzubauen und zu erweitern, damit man Fehler schneller findet. Also z.B. erst 1 Taste einlesen, dann 2 oder mehr, dann Multiplexer hinzunehmen, dann 1 Fader einlesen, dann 4051 hinzunehmen und so weiter. Kann viel Frust sparen weil man dann nicht stundenlang alles aufbaut und programmiert und dann tagelang Fehler sucht :slight_smile: Außerdem halten viele kleine schnelle Erfolge die Motivation besser hoch :wink:

1 Like

Klingt nach einem interessantem Projekt. Würde da gerne mehr Infos dazu lesen.
Was hat es genau gesteuert? Was war Was wie wo und überhaupt.

Ok,
Dann also den MEGA.

Danke euch allen für die Entscheidungshilfe und Tipps.

Nehm ich jetzt den Pro oder Standard? Gibt es da nennenswerte Unterschiede?

Was meint Entprellen?

LG Rebecca

du meinst den arduino_bahnhof?
das war für einen modellbaubahnhof. da war alles digital. das oben ist nur pseudocode worauf du aufbauen könntest :slight_smile:

gibt zu dem bahnhof leider nicht viel zu lesen. hab nur n bild vom testaufbau:

1 Like

zum thema entprellen:
https://www.mikrocontroller.net/articles/Entprellung

kurzum: wenn du die taste drückst ist wechselt der zustand nicht sofort von high nach low, sondern ein paar millisekunden high,low,high,low,high,low. das ist mechanisch bedingt und kann durch externe beschaltung (RC-Glied) oder softwaremäßig ausgeglichen werden.
Das macht dir Ärger wenn du auf einen Signalwechsel (Taste wird gedrückt, Wechsel von z.b. high nach low) etwas in deinem Programm anstoßen willst. Du bekommst wegen dem Prellen nämlich viele Signalwechsel obwohl du nur 1x die Taste drückst. Das muss aber nicht zwingend ein Problem darstellen und hängt von deinem Programmaufbau ab. Wollte nur drauf hinweisen, dass du es schon mal gehört und im Hinterkopf hast falls du bei deinen ersten Versuchen mit deinem Programm "komische" Effekte hast :slight_smile:

1 Like

Nein.
Multiplexer verbindet ein Pin mit einem von x anderen. ( wobei x wahrscheinlich 2,3,4 8,16 sein kann.
Ein Port Expander stellt einen Port zur Verfügung also 8 oder 16 Pins die einzeln als Eingänge oder Ausgänge definiert werden können (wie die Pins des Arduino).
Grüße Uwe