Geschickte Hardwarewahl für ein einfaches USB-MIDI-Gerät?

OP #4990964
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
Persönliche Seite #4991040
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.
Gast #4991739
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
OP #4991930
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
Gast #4991943
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
Persönliche Seite #4992029
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.
#4992046
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
#4992068
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.
#4992273
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
Gast #4992977
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.
Gast #4993091
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
OP #4995995
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren