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
> UART->USB Converter
könnte Zeitprobleme machen. Nimm doch gleich einen µC mit USB
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.
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
Das ist "klassisches MIDI", kein MIDI per USB. Kann man auch machen, man braucht dann aber einen USB-zu-MIDI-Adapter.
> 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
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
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
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.
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
http://www.fourwalledcubicle.com/files/LUFA/Doc/120219/html/_page__alternative_stacks.html Gruß Jonas
Am einfachsten nimmst du den ATmega32U4. Dieser ist z.B verbaut auf dem Arduino Leonardo. https://www.arduino.cc/en/Reference/MIDIUSB
> 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.
schau mal in der aktuellen Make, da gibt es genau so was für einen Kanal
google mal nach vb.net und midi. Ein windows-Pc ist mglw. einfacher zu programmieren, als ein microcontroller und bietet nahezu unbegrenzte Möglichkeiten.
grundschüler schrieb: > bietet nahezu unbegrenzte Möglichkeiten. ... aufs falsche Pferd zu setzen. Und das wäre hier definitiv der Fall.
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
Lassen sich die USB-Seriell-Umsetzer (FTDI, Prolific...) auf die unüblichen 31,25 kBaud für MIDI einstellen?
Beim FT232 zumindet geht das, aber was bringt das? USB-MIDI ist eine komplett andere Geräteklasse als USB-Seriell.
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.
>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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.