Forum: Mikrocontroller und Digitale Elektronik Geschickte Hardwarewahl für ein einfaches USB-MIDI-Gerät?


von Solocan Z. (solocan)


Lesenswert?

Hallo liebe uC-Experten,

ich habe vor, ein eigenes USB-MIDI-Gerät-Projekt zu machen. Es soll 
folgendermaßen funktionieren:

3 Analoge Inputs (5V) müssen gelesen und irgendwie über USB an PC 
gestreamt werden. Später muss PC diese Peripherie als MIDI Device 
erkennen, damit der Stream als MIDI Signale in Musiksoftware zur 
Verfügung steht.

Meine Kette dafür wäre:

1. Analoge Inputs (0-5V Spannung)
2. Atmega 328PU (In: Analoge Pins, Out: UART)
3. UART->USB Converter
4. USB Device am (Windows) PC
5. Sensordaten am PC verarbeiten und MIDI-Messages generieren
6. MIDI Signale über das neue erstellte Gerät an den Sequenzer streamen.

Ist die Hardwarewahl und Interfacing für diesen Zweck sinnvoll?

Welche Software IDEs wären für die Entwicklung der benötigten Treiber 
unter Windows sinnvoll?

Ich bin in der Welt der Mikrocontroller und USB Treiber ein blutiger 
Anfänger. (Zwar einige anspruchsvolle Projekte mit Pi, ADC und 
Schaltkreisen aber noch gar keine mit richtigen Mikrocontrollern und 
USB-Treiberwelt)

Ich bin für Vorschläge sehr dankbar!

Grüße Can

: Bearbeitet durch User
von dummschwaetzer (Gast)


Lesenswert?

> UART->USB Converter
könnte Zeitprobleme machen. Nimm doch gleich einen µC mit USB

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Solocan Z. schrieb:
> Ist die Hardwarewahl und Interfacing für diesen Zweck sinnvoll?

Nein, da Du kein USB-Midi-Device hast, und daher auf dem PC noch einen 
Umsetzer von USB-UART auf Midi benötigst.


Nimm einen µC mit USB-Deviceunterstützung wie den ATmega32U4 und 
implementiere auf dem die USB-MIDI-Geräteklasse.

Alternativ kannst Du auch V-USB verwenden, dafür gibt es 
Beispielanwendungen mit MIDI. V-USB ist aber nicht standardkonform, da 
es nur Low-Speed-USB unterstützt, USB-MIDI aber High-Speed-USB fordert.

http://cryptomys.de/horo/V-USB-MIDI/

Es funktioniert trotzdem, wenn das Hostbetriebssystem tolerant genug 
ist.

Unabhängig davon lohnt es sich, das Projekt anzusehen, denn das 
eigentliche USB-Protokoll (Devicedeskriptor, zu versendende Daten etc.) 
ist das, das Du auch auf einem "richtigen" USB-Gerät verwenden willst.

von tommy (Gast)


Lesenswert?

Götz Müller-Dürholt beschreibt den Selbstbau eines
MIDI Controllers auf Arduino Basis auf seiner HP:

http://goetzmd.de/category/diy/diy-midi-controller

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das ist "klassisches MIDI", kein MIDI per USB.

Kann man auch machen, man braucht dann aber einen USB-zu-MIDI-Adapter.

von Gerhard (Gast)


Lesenswert?

> 5. Sensordaten am PC verarbeiten und MIDI-Messages generieren
verstehe nicht, warum du die MIDI Daten nicht direkt am µC erzeugst. Ist 
kein Hexenwerk und dafür wäre jeder AT-Mega schnell genug. Wobei 
natürlich - wie schon gesagt - ein µC mit USB Unterstützung mehr Sinn 
macht.

Gerhard

von Solocan Z. (solocan)


Lesenswert?

Vielen Dank für zahl- und hilfreiche Antworten!


Gerhard schrieb:
> verstehe nicht, warum du die MIDI Daten nicht direkt am µC erzeugst

Weil die Sensordaten noch wahrscheinlich kompliziert gefiltert werden 
müssen. Weil das am PC für mich wahrscheinlich einfacher geht. Das 
endgültige Ziel ist schon, alles am µC zu erledigen.

Rufus Τ. F. schrieb:
> Das ist "klassisches MIDI", kein MIDI per USB.

Ich bin ein USB-Neuling. Das verstehe ich nicht ganz. MIDI ist nach 
meinem Verständnis ein Kommunikationsprotokoll und USB ein serieller 
BUS. Meinst du, weil ich keine MIDI-Daten über den Bus schicke, sondern 
Sensordaten? Insofern stimmt es. Aber endgültiges Ziel ist, 
Datenverarbeitung am µC zu erledigen und MIDI Signale über USB zu 
schicken.

Was mir am Meisten zu denken gibt, ist der Windows Treiber, wie ich 
meinen irgendwie erzeugten MIDI Stream an meinen Sequenzer (i.e. Cubase) 
übertragen kann. Hat da jemand eine Idee, wie ich das am Besten machen 
soll?

Gruß Can

von DraconiX (Gast)


Lesenswert?

Solocan Z. schrieb:
> Was mir am Meisten zu denken gibt, ist der Windows Treiber, wie ich
> meinen irgendwie erzeugten MIDI Stream an meinen Sequenzer (i.e. Cubase)
> übertragen kann. Hat da jemand eine Idee, wie ich das am Besten machen
> soll?

Das ist ein ganz anderes Blatt. Deshalb ist es einfacher den Midistream 
direkt im µC zu erzeugen. Und den Midistream direkt an den Rechner 
ausgeben zu lassen. Allzu viel anders als das Signal im Rechner mit 
einem Extra Programm zu emulieren ist das dann auch nicht, und aktuelle 
µC schaffen das völlig Problemlos.

Nutze ein Mega32u4 und mit direkter USB Schnittstelle - da kannst du auf 
die Arduino Pro Micro Clone zurückgreifen, da ist die Hardware schon 
völlig vorhanden. Kauf dir ein ISP Programmer und leg los.

Als USB Stack kannst du dir ja mal LUFA anschauen, da sind auch schon 
einige Beispiele für MIDI dabei.

Der macht eine ADC Conversation alle 14 Clock Cycles - das sind ~1Mhz 
den Midiframe erzeugen und rauszuschicken - da wirst du dicke auf 5ms 
für einen Frame kommen - so schnell kann kein Mensch die Poti drehen :-D

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Solocan Z. schrieb:
> Ich bin ein USB-Neuling. Das verstehe ich nicht ganz. MIDI ist nach
> meinem Verständnis ein Kommunikationsprotokoll und USB ein serieller
> BUS.

Klassisches MIDI bedeutet, MIDI per serieller Schnittstelle (UART), 
stromgesteuert, mit 5pol DIN-Steckern. Wie seit den 80ern von praktisch 
jedem MIDI-Musikinstrument verwendet.

Um so etwas an einen PC anzuschließen, braucht man eine 
MIDI-Schnittstelle, so etwas war früher in manchen Soundkarten verbaut. 
Es gibt dafür aber auch USB-Adapter, die das in ein USB-MIDI-Gerät 
umsetzen.


MIDI per USB bedeutet, daß ein USB-Device die USB-MIDI-Deviceklasse 
implementiert.

Wenn das der Fall ist, wird kein Gerätetreiber mehr benötigt, denn das 
ist neben HID (für Tastaturen und Mäuse), Mass Storage (für USB-Sticks 
etc.) eine der Standardgeräteklassen, die mit Standardgerätetreibern von 
praktisch jedem Betriebssystem von Hause aus unterstützt wird.

> Aber endgültiges Ziel ist, Datenverarbeitung am µC zu erledigen und MIDI
> Signale über USB zu schicken.

Eben. Genau darum geht es uns.

von Frank K. (fchk)


Lesenswert?

Rufus Τ. F. schrieb:

> MIDI per USB bedeutet, daß ein USB-Device die USB-MIDI-Deviceklasse
> implementiert.

Und als Ergänzung: Kein USB-UART Chip implementiert die USB-MIDI 
Deviceklasse, das sind im besten Fall CDC-ACM Geräte und ansonsten 
proprietäre Geräte, die immer einen Spezialtreiber benötigen.

Du kannst also keinen fertig programmierten Chip nehmen, sondern MUSST 
einen Microcontroller mit Hardware-USB einsetzen, einfach damit Du 
überhaupt korrektes USB-MIDI hinbekommst.

fchk

von fpga (Gast)


Lesenswert?


von Mick (Gast)


Lesenswert?

Am einfachsten nimmst du den ATmega32U4. Dieser ist z.B verbaut auf dem 
Arduino Leonardo. https://www.arduino.cc/en/Reference/MIDIUSB

von Thomas G. (blasebalg)


Lesenswert?

> Was mir am Meisten zu denken gibt, ist der Windows Treiber, wie ich
> meinen irgendwie erzeugten MIDI Stream an meinen Sequenzer (i.e. Cubase)
> übertragen kann. Hat da jemand eine Idee, wie ich das am Besten machen
> soll?

Sobald dein BS ein MIDI-Port erkannt hat sollte der in Cubase zur 
Verfügung stehen.... Neue Spur erzeugen (MIDI-Spur) aufnehmen und 
fertig.
Mein MIDI Selbstbaukram hat alles einen klassischen MIDI-Ausgang. So ein 
billig MIDI-USB-Umsetzter von ebay an den PC dran und alles funzt.
So hab ich einen "echten" MIDI-Eingang und kann auch mal umstöpseln und 
die Software auf'm µC fällt wesentlich kleiner aus.

von Heinz (Gast)


Lesenswert?

schau mal in der aktuellen Make, da gibt es genau so was für einen Kanal

von grundschüler (Gast)


Lesenswert?

google mal nach vb.net und midi.


Ein windows-Pc ist mglw. einfacher zu programmieren, als ein 
microcontroller und bietet nahezu unbegrenzte Möglichkeiten.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

grundschüler schrieb:
> bietet nahezu unbegrenzte Möglichkeiten.

... aufs falsche Pferd zu setzen. Und das wäre hier definitiv der Fall.

von Stefan K. (stefan64)


Lesenswert?

Solocan Z. schrieb:
> Was mir am Meisten zu denken gibt, ist der Windows Treiber, wie ich
> meinen irgendwie erzeugten MIDI Stream an meinen Sequenzer (i.e. Cubase)
> übertragen kann. Hat da jemand eine Idee, wie ich das am Besten machen
> soll?

Das ist genau Dein Problem!
Ein solcher Treiber ist eine ganz andere Liga als irgendein 
Windows-Programm.

Die einfachste Lösung, mit vielen Beispielen im Netz ist meiner Meinung 
nach die von Thomas:

Thomas G. schrieb:
> Mein MIDI Selbstbaukram hat alles einen klassischen MIDI-Ausgang. So ein
> billig MIDI-USB-Umsetzter von ebay an den PC dran und alles funzt.

Ein Microcontroller mit Midi-Schnittstelle ist von der Hardware super 
einfach und von der Firmware nicht mehr als ein einfacher UART mit etwas 
exotischer Baudrate, alles Sachen, die Du schnell und zuverlässig in den 
Griff bekommen kannst.
Und den Midi-USB-Umsetzer wirst Du für andere Sachen sicher noch öfters 
gebrauchen können.

Viele Grüße, Stefan

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Lassen sich die USB-Seriell-Umsetzer (FTDI, Prolific...) auf die 
unüblichen 31,25 kBaud für MIDI einstellen?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Beim FT232 zumindet geht das, aber was bringt das?

USB-MIDI ist eine komplett andere Geräteklasse als USB-Seriell.

von Schoasch (Gast)


Lesenswert?

Um es nochmal klar zu sagen: Es braucht keine Treiber, in Windows 
musst Du nichts programmieren. USB-MIDI Geräte kannst Du einfach 
anstecken und sie stehen im System zur Verfügung (wie Massenspeicher, 
Tastaturen usw auch). Insofern ist es eigentlich ganz einfach: Einen 
USB-fähigen Controller mit ADC auswählen und passenden Code suchen.

Der PIC16F1455 z.B. hat alles an Bord, was Du brauchst: USB und einen 
ADC mit 5 Kanälen. Außer je einem Pufferkondensator für VCC und V-USB 
braucht er keine weiteren Bauteile. Bei Microchip gibt es Beispiel-Code 
für verschiedene USB-Varianten, unter anderem MIDI (der Code ist für das 
Eval-Board "low pin count USB development kit", man kann ihn aber 
problemlos in den nackten Chip programmieren). Da wird ein Schalter auf 
dem Board ausgelesen und dann eine MIDI-Note an den Host geschickt. 
Statt Schalter musst Du nur den ADC lesen und kannst dann die Werte als 
MIDI Noten oder Controllerdaten schicken. In einer Header-Datei trägst 
Du den Geräte-Namen ein, unter dem es dann im System und in der 
Anwendung, z.B. Cubase, zu finden ist. Und fertig.

Ich denke eine ähnlich einfache Lösung ist auch mit AVRs zu machen. Wenn 
Du da schon Erfahrung hast und ein Programmiergerät, ist das 
wahrscheinlich einfacher und günstiger. Um den PIC zu programmieren 
bräuchtest Du sonst noch ein PICkit 3.

von fpga (Gast)


Lesenswert?

>Ich denke eine ähnlich einfache Lösung ist auch mit AVRs zu machen.

Ja, darauf hab ich schon mal verwiesen, läuft 1A:

http://www.fourwalledcubicle.com/files/LUFA/Doc/120219/html/_page__alternative_stacks.html

Der Lufa-USB-Stack ist mit abstand der BEste für avr's. Dazu ein 
passendes Board, wie hier:

http://www.watterott.com/index.php?page=search&page_action=query&desc=on&sdesc=on&keywords=AT90USB&x=15&y=4

Gruß J

von Solocan Z. (solocan)


Lesenswert?

Hallo Leute,

ihr seid alle fantastisch! Vielen vielen Dank für die Beiträge. Ihr habt 
mir sehr weitergeholfen!

Ich denke, ich fange einfach mit einem 32U4-USB Board und einem SPI 
Programmierer an.

Thomas G. schrieb:
> Mein MIDI Selbstbaukram hat alles einen klassischen MIDI-Ausgang. So ein
> billig MIDI-USB-Umsetzter von ebay an den PC dran und alles funzt.

Mein Ziel ist es, einen USB-Ausgang zu haben. Langfristig muss 
zusätzlich ein MIDI-OUT implementiert werden. Das ist gedacht für ein 
akademisches Projekt. Der USB ist vorgegeben.

Jetzt wo die komplette Datenverarbeitung auf dem Microcontroller 
erfolgen muss, macht mir die Prozessorleistung von 32U4 Bedenken. Hat 
denn jemand (relativ anspruchsvolle) Filter darauf laufen? wie z.B. 
Kalman Filter etc.

Beste Grüße aus Stuttgart

von Stefan K. (stefan64)


Lesenswert?

Solocan Z. schrieb:
> Ich denke, ich fange einfach mit einem 32U4-USB Board und einem SPI
> Programmierer an.

Überleg Dir mal, ob ein ICE oder AVR-Dragon nicht die bessere Wahl sind. 
Damit kannst Du nicht nur downloaden, sondern auch echt debuggen. 
Preislich macht das heute nicht mehr so viel Unterschied (Dragon ca 
50€).

Gruß, Stefan

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.