Forum: Mikrocontroller und Digitale Elektronik DIY-MIDI-Controller


von Max K. (raaonq)


Lesenswert?

Hallo zusammen,

wie der Betreff bereits verrät, möchte ich einen MIDI-Controller bauen. 
Das Projekt hat mit meiner Seminararbeit in der Schule zu tun und ich 
bin weiß Gott kein Experte für E-Technik, weshalb ich darum bitte, 
schonend mit mir umzugehen, sollten meine Fragen banal erscheinen :)

Zuerst möchte ich schreiben, wie ich mir die ganze Geschichte vorstelle:
1. Die Knöpfe am Gerät selbst beinhalten je zwei ineinanderliegende 
Spulen, von denen die eine stationär und stromdurchflossen und die 
andere beweglich und dafür vorgesehen, Induktionsstrom abzugreifen, ist. 
Der Sinn dieser Konstruktion ist es, eine Anschlagsdynamik zu erzeugen.
2. Der abgegriffene Induktionsstrom wird in einen Integrierer geleitet, 
der den ganzen über die Zeit erzeugten Strom aufaddiert und somit 
indirekt anzeigt, wie tief der Knopf gedrückt wird.
3. Über einen AD-Umsetzer wird der Strom in digitale Signale umgewandelt
4. Die einzelnen Signale eines jeden Knopfes werden nacheinander und in 
einer bestimmten Reihenfolge abgenommen und in ein USB-Kabel geleitet.
5. Eine selbstgemachte Treibersoftware setzt die Signale in MIDI-Dateien 
um, die von einem Softwaresynthesizer interpretiert werden können.

Punkte 1 bis 3 dürften kein Problem sein (vorausgesetzt, mein 
handwerkliches Geschick und mein Budget reichen aus :) ), Punkt 4 ist 
die Stelle, an der ich nicht mehr weiter komme: es wird so viele 
AD-Umsetzer geben, wie es Knöpfe geben wird (vermutlich aus praktischen 
Gründen nicht allzu viel, aber es werden schon ein paar sein) und diese 
Knöpfe liefern alle gleichzeitig Daten; nur wie ich diese Daten bitweise 
weiterleiten soll, weiß ich beim besten Willen nicht.

Punkt 5 stelle ich noch in den Hintergrund.

Freue mich schon auf eure Antworten!

von Elvis (Gast)


Lesenswert?

So ganz verstehe ich nicht was du vorhast. Soll dein Controller Tasten 
haben (-> Anschlagdynamik) oder Drehknöpfe? In letzterem Falle verstehe 
ich weder den Sinn einer Anschlagdynamik noch deinen technischen 
Lösungsansatz. Im einfachsten Falle würde man Potis nehmen, so wie es 
die Controller-Selbstbauer schon seit vielen Jahren machen. Warum soll 
der Controller nicht direkt ein MIDI-Signal ausgeben? Kommt mir 
ebenfalls sinniger vor ... Aber vielleicht ist (mir) einfach noch nicht 
klar geworden was du machen willst.

von Gerald G. (gerald_g)


Lesenswert?

Nur so, möchtest du quasi ein simples keyboard (elektronisches Klavier) 
bauen?
Weil so ganz verstehe ich nicht was du machen möchtest? Vor allem diese 
Anschlagsdynamik

von Max K. (raaonq)


Lesenswert?

Ja, ich würde sagen "simples Keyboard" trifft es gut. Tut mir leid, wenn 
ich durch das Wort "Knopf" für Unklarheiten gesorgt habe; das liegt 
daran, dass ich Druckknöpfe benutzen will, die ich dann nicht in einer 
Reihe nebeneinander legen will wie die Tasten eines Klaviers, sondern in 
Reihen und Spalten wie die Bünde und Saiten einer Gitarre (erhoffe mir 
dadurch bessere Spielbarkeit, weil ich eigentlich Gitarrist bin, aber 
wie die Sache in der Ausführung aussehen wird, wird sich noch zeigen).

von npn (Gast)


Lesenswert?

Bleibt noch die Frage, warum du nicht gleich MIDI erzeugen willst, 
sondern erst irgendwelche Daten, die du dann über USB übertragen mußt. 
Und dann noch einen Treiber schreiben, der die Werte irgendwie nach MIDI 
übersetzt? Wenn du gleich MIDI ausgibst, kannst du damit einen 
beliebigen Klangerzeuger ansteuern. Ein Rack, ein Keyboard oder 
Synthesizer, oder auch ein Software-Instrument auf dem PC.

von Max K. (raaonq)


Lesenswert?

Hallo npn,

daran habe ich auch schon gedacht, bin aber zur Überzeugung gekommen, 
dass es für mich persönlich einfacher ist, diese Arbeit von einem 
Computer erledigen zu lassen.

von npn (Gast)


Lesenswert?

Max Kölbl schrieb:
> Hallo npn,
>
> daran habe ich auch schon gedacht, bin aber zur Überzeugung gekommen,
> dass es für mich persönlich einfacher ist, diese Arbeit von einem
> Computer erledigen zu lassen.

Na ok, deine Entscheidung. Aber dann kannst du das Teil nur am PC 
anschließen und an kein anderes Gerät. Genau das zeichnet ja eigentlich 
ein Musikinstrument aus. Der Tag wird kommen, wo du das Teil auch mal an 
einen Synthi anschließen willst.

War ja nur ein Vorschlag :-)

von Max K. (raaonq)


Lesenswert?

Es ist ja nur ein Schulprojekt :) Ich finde, ich betreibe eh einen viel 
zu großen Aufwand... trotzdem danke für den Vorschlag!

von Alexander (Gast)


Lesenswert?

Also vorne weg: Das Projekt ist für einen Anfänger (der scheinst du zu 
sein) sehr komplex. Für eine einfache Seminararbeit zu aufwendig.

Zum Thema AD-Wandler: Schau dir an wie Atmel das in seinen Atmegas 
gemacht hat. Dann sparst du ein paar AD Wandler. Ansonsten kriegst du 
AD-Wandler mit SPI oder I2C Interface, sind aber nicht gerade günstig. 
Die geben dir das Signal gleich als Binär kodierte Zahl aus. Also einen 
Wert zwischen 0 und 1024 (bei einem 8 Bit AD Wandler).

Das du am Computer das schneller erzeugt kriegst, naja deine Sache. Hast 
du schon einen uC mit USB und wenn ja welchen ? USB ist eine größere 
Baustelle, da kommt noch mal was auf dich zu. Wenn du allerdings einen 
USB-UART Wandler nutzt, ist der Aufwand direkt Midi auf dem uC zu 
erzeugen fast gleich (Midi ist relativ einfach zu erzeugen, aber da 
findest du viel Code im Netz).
Einen USB-Midi Treiber schreiben dauert auf jeden Fall länger (es sei 
denn du hast so etwas schon häufiger getan, das weiß ich natürlich 
nicht).

von Max K. (raaonq)


Lesenswert?

Alexander schrieb:
> Also vorne weg: Das Projekt ist für einen Anfänger (der scheinst du zu
> sein) sehr komplex. Für eine einfache Seminararbeit zu aufwendig.

Ja, ich bin definitiv Anfänger und die Komplexität dieses Projekts ist 
mir bewusst. Diese ganze MIDI-Geschichte interessiert mich halt und ich 
hätte mir erhofft, durch dieses Projekt die ganze Chose ein bisschen 
besser zu begreifen.

> Zum Thema AD-Wandler: Schau dir an wie Atmel das in seinen Atmegas
> gemacht hat. Dann sparst du ein paar AD Wandler. Ansonsten kriegst du
> AD-Wandler mit SPI oder I2C Interface, sind aber nicht gerade günstig.
> Die geben dir das Signal gleich als Binär kodierte Zahl aus. Also einen
> Wert zwischen 0 und 1024 (bei einem 8 Bit AD Wandler).

Klingt interessant. Danke für den Tipp, werde ich mir ansehen.

> Das du am Computer das schneller erzeugt kriegst, naja deine Sache. Hast
> du schon einen uC mit USB und wenn ja welchen ? USB ist eine größere
> Baustelle, da kommt noch mal was auf dich zu.

USB ist eine vertrackte Sache, das ist mir klar. Bis jetzt weiß ich auch 
noch nicht besonders viel darüber und nein, ich besitze keinen uC mit 
USB und wenn ich ehrlich sein soll habe ich auch keine Ahnung was das 
ist...

> Wenn du allerdings einen
> USB-UART Wandler nutzt, ist der Aufwand direkt Midi auf dem uC zu
> erzeugen fast gleich (Midi ist relativ einfach zu erzeugen, aber da
> findest du viel Code im Netz).
> Einen USB-Midi Treiber schreiben dauert auf jeden Fall länger (es sei
> denn du hast so etwas schon häufiger getan, das weiß ich natürlich
> nicht).

Ok, die Sache mit dem Treiber geb ich auf! Die Idee war offenbar eine 
Sackgasse. Aber kannst du das, was du geschrieben hast, bitte ein wenig 
genauer erklären?

von Alexander (Gast)


Lesenswert?

Hey,
also ich würde zuerst einmal einen uC aussuchen. Vllt. ein Arduinoboard 
(ist hier ein wenig verpönt, aber man kommt schnell zu Ergebnissen). 
Vorteil wäre: Es gibt dafür schon eine Midi-Library.
Alternativ kannst du natürlich auch einen Atmega Prozessor so kaufen.

In beiden Fällen empfehle ich dir das AVR Tutorial hier auf der Seite: 
http://www.mikrocontroller.net/articles/AVR-Tutorial

Da kriegst du erst ein mal einen Überblick was du grundsätzlich 
benötigst.
Wenn du das hast, schreib erst ein mal ein kleines Programm (LED 
blinken, Taster auslesen).

Wenn du den Taster ausgelesen hast, schreib dir die Routinen zum Senden 
von Midi. Dafür benötigst du den UART (wie der funktioniert, steht im 
Tutorial).

Zu Midi: http://www.mikrocontroller.net/articles/MIDI

Das ist jetzt schon einiges, aber wenn das läuft, kannst du dich mit dem 
AD Wandler beschäftigen. Jedoch hast du bis hierhin was lauffähiges für 
die Schule.

Dann kannst du den AD Wandler in Angriff nehmen. Die Atmegas von Atmel 
haben einen eingebaut, der wird mittels eines Multiplexers zwischen 6 
Eingängen umgeschaltet. Das könnte man vllt. noch erweitern mit einem 
weiteren Multiplexers.

Alternativ natürlich einen externen AD Wandler (haben meist höhere 
Auflösung). Vor diesem könnte man auch wieder einen Multiplexer schalten 
und so ein wenig sparen.

Ich glaub damit kommst du relativ gut voran.

von Max K. (raaonq)


Lesenswert?

Hallo Alexander,

meine Dankbarkeit ist nicht mit Worten auszudrücken. Wenn ich diese 
Sachen richtig verstehe, scheinen sie wirklich alles zu beinhalten, was 
ich brauche und sogar noch mehr :) Werde mich in der nächsten Zeit damit 
beschäftigen. Abgabetermin für die Arbeit ist Januar, und die 
Sommerferien stehen auch an, ich hab also genug Zeit, um diesen 
Informationsbatzen, den du mir gegeben hast, zu verarbeiten :D

von Rolf Magnus (Gast)


Lesenswert?

Max Kölbl schrieb:
>> Das du am Computer das schneller erzeugt kriegst, naja deine Sache. Hast
>> du schon einen uC mit USB und wenn ja welchen ? USB ist eine größere
>> Baustelle, da kommt noch mal was auf dich zu.
>
> USB ist eine vertrackte Sache, das ist mir klar. Bis jetzt weiß ich auch
> noch nicht besonders viel darüber und nein, ich besitze keinen uC mit
> USB und wenn ich ehrlich sein soll habe ich auch keine Ahnung was das
> ist...

MIDI ist erheblich einfacher als USB, und du brauchst dich nicht noch um 
irgendwelche Software drumherum kümmern. Du brauchst nur den UART mit 
einer einfachen Beschaltung, und dann musst du für drücken und loslassen 
von Tasten jeweils drei Bytes senden, und das war's.

von Max K. (raaonq)


Lesenswert?

Ja, inzwischen hab ich mich überzeugen lassen :)

Schätze, ich probiere diesen Arduino aus. Hab mich gestern noch darüber 
informiert und ich denke, das ist genau das, was ich brauche. Trotzdem 
danke für deinen Beitrag.

von rad-neu-erfinder (Gast)


Lesenswert?

Kannst dich auch mal da umschauen ... http://ucapps.de/

von rava (Gast)


Lesenswert?

genau. dann brauchst du nur noch die wandlung; sobald alles 
digitalisiert ist, übernimmt die midibox.

von Route_66 H. (route_66)


Lesenswert?

Alexander schrieb:
> Die geben dir das Signal gleich als Binär kodierte Zahl aus. Also einen
> Wert zwischen 0 und 1024 (bei einem 8 Bit AD Wandler).

Hallo!
Hast Du den binären Zahlenbereich neu erfunden?  :-)

von J. S. (engineer) Benutzerseite


Lesenswert?

Route 66 schrieb:
> Hallo!
> Hast Du den binären Zahlenbereich neu erfunden?  :-)
Na, vielleicht hat er schon dezimiert :-)

An den TE: Sieh Dir mal meinen MIDI32 auf meiner Webseite an, der hat 
ähnliche Ansprüche (0...1023) und eine Beschleunigungsfunktion.

Das, was Du "Anschlagsdynamik" nennst, dürfte auf Dasselbe hinauslaufen, 
wobei Du es analog produzierst und damit genauer und schneller bist, als 
ich, allerdings wirst Du dann sehr schnell drauf kommen, dass Du auch 
ein schnelles MIDI brauchst. Das war seinerzeit mein Problem. Mit den 
klassischen Analog-2-MIDI Conversions Schaltungen, die es haufenweise zu 
kaufen gibt, wirst Du nicht weit kommen.

Wenn es was bringen soll, brauchst Du USB-Ausgang.

Hier ist was zur Inspriation:

Mein "MIDI2000" : http://www.96khz.org/oldpages/limitsofmidi.htm
Die Hardware : http://www.96khz.org/htm/midiviaspdif.htm

von Max Kölbl (Gast)


Lesenswert?

Ja, Anschlagsdynamik (oder "Velocity") dürfte das Gleiche sein wie eine 
Beschleunigungsfunktion. Dieser Wert gibt an, wie schnell eine Taste 
gedrückt wird und ist das zweite der drei Standardbits, die immer 
anfallen, wenn man eine Note spielen möchte. Aber das weißt du 
vermutlich eh schon :)

Über die Geschwindigkeit habe ich mir schon von anfang an Sorgen 
gemacht. Analoge Signale sind zwar schnell bei Empfänger, aber dort 
müssen sie trotzdem noch umgewandelt werden. Alle nacheinander. Wenn ich 
bei, sagen wir, zwölf Tasten wäre das noch kein Problem, aber sollten es 
mehr Tasten und vielleicht ein paar simple Controller werden (hätte 
nämlich schon vor, den Apparat von Zeit zu Zeit zu erweitern; auch nach 
dem Abgabetermin meiner Seminararbeit), dauert eine Rundherumabtastung 
aller eingehender Werte entsprechend länger. Außerdem würden mir am uC 
langsam die Pins ausgehen, aber das ist ein anderes Thema...

Bezüglich USB: die meisten uC haben doch eine USB-Buchse zum Programme 
überspielen/Daten einlesen. Wäre das nicht die Lösung?

von J. S. (engineer) Benutzerseite


Lesenswert?

Klar, USB wäre in allen Belangen die Lösung. Es braucht aber eben noch 
ein Stück hardware, dass die Tasten sequenzialisiert. Bei mir geht das 
von Anbeginn an mit 25 MHz. Für eine slotbreite von 128 Tasten / 128 
Controller geht das dann mit immerhin 96kHz Abtastung, also synchron in 
einem sample.

Mit USB 2.0 bekäme man die Daten auch entsprechend weg. Fragt sich halt 
nur, was ein Zielsystem wie z.B. ein PC wieder draus macht, z.B. an 
Latenz addiert.

: Bearbeitet durch User
von Max K. (raaonq)


Lesenswert?

Oh weh, eine neue Baustelle!

Na gut, man kann nicht behaupten, dass das Thema schnell langweilig 
wird, es gibt immer wieder Neues zu entdecken...

Sanken für deinen Kommentar, werde mich einlesen.

von J. S. (engineer) Benutzerseite


Lesenswert?

Und wie ist der Stand?

von Max Kölbl (Gast)


Lesenswert?

Es ist peinlich zuzugeben, aber passiert ist nicht besonders viel. Ich 
hab jetzt einen Arduino Due zu Hause liegen und einen Freund 
konsultiert, mir bei der Durchführung des Projekts zu helfen. Außerdem 
ist das Projekt nicht mehr teil meiner Seminararbeit, weil es sich nicht 
richtig ins Thema einbauen lässt. Stattdessen wird es fürs Schülerforum 
oder Jugend Forscht benutzt. Sobald es fertig ist, werde ich es mit den 
erforderlichen Hintergrundinformationen in diesem Thread 
veröffentlichen.

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
Noch kein Account? Hier anmelden.