PIC USB Kommunikation

OP #4839123
Hallo,
Ich hab ein neues Projekt gestartet und brauche Hilfe um vorran zu 
kommen da es Neuland für mich ist.

Ich will über ein Digitalpiano (Yamaha) eine LED-Kette beleuchten die 
mit den angeschlagenen Noten jeweils für verschiedene LED's in der Kette 
aufleuchtet.
Der Part ist nicht das Problem (mit dem Arduino hab ich das schon 
hinbekommen, dazu musste der Arduino allerdings dauerhaft an den PC 
angeschlossen sein).

Nun will ich ein Board bauen dass die Mididaten des Pianos über USB 
einließt und den LED-Strip somit ansteuert.

Informiert habe ich mich schon über das MIDI-USB Protokoll, allerdings 
weiß ich nicht wie ich ich eine serielle Datenübertragung über USB an 
den PIC weitergebe.

Wie gesagt das ist Neuland für mich.
Ich benutze den PIC18F14K22 der besitzt serielle Schnittstellen.
Meine Frage nun: Wie lese ich über den PIC die Daten über USB aus?

Brauche ich einen externen Chip dazu?
Sollte ich mir einen PIC kaufen der USB direkt auslesen kann?
Wie löse ich das Problem am elegantesten?

Mfg
Markus
Persönliche Seite
Markus L. schrieb:
> Meine Frage nun: Wie lese ich über den PIC die Daten über USB aus?

Du brauchst einen USB-Host. Die meisten µCs mit USB-Unterstützung sind 
nur USB-Devices, keine USB-Hosts.

Es gibt USB-Host-Controller, die man über eine serielle Schnittstelle 
o.ä. an einen µC anschließen kann, ein bekanntes Beispiel ist der 
"Vinculum" VNC1L von FTDI.

Insgesamt: Das ist nicht trivial.
Dein Klavier hat keine normale MIDI-Buchse (5polig, DIN)?
Persönliche Seite
Markus L. schrieb:
> Kann man also jedes Beliebige Usb to serial Board nehmen?

Nein. Kein einziges.

USB-to-Serial sind USB-Devices, die man an einen USB-Host anschließt. Du 
aber brauchst einen USB-Host. Wie Deinen PC, der ist ein USB-Host. Und 
deswegen kannst Du Dein Klavier auch an den PC anschließen.

USB-Devices aber können miteinander nichts anfangen, die brauchen 
zwingend einen Host, um zu funktionieren. Mit einem USB-Serial-Adapter 
kannst Du auch keine USB-Sticks auslesen.
Gast
Nimm einen Raspi. Der ist klein, hat einen USB-Host und kostet nur ca 35 
Euro. Und man kann einfach einen Arduino anschliessen.
Dann muss da nur noch die Software geschrieben werden.
OP
Rufus Τ. F. schrieb:
> Der Threadstarter will einen PIC verwenden, keinen Arduino.

Ja deswegen, man will ja auch etwas bei so einem Projekt lernen.
Usb Hosts sind alle nicht so günstig, wenn es nicht anders geht gebe ich 
auch 20€ für das Board mit dem VNC1L aus.

http://de.farnell.com/ftdi/vdip1/entwicklungsmodul-f-r-vnc1l/dp/1329313

Angenommen ein Laie wie ich kauft das Ding, welches Interface davon 
(Uart,Spi,etc), verwendet denn ein Laie wie Ich am besten mit dem PIC?
Persönliche Seite
Markus L. schrieb:
> welches Interface davon (Uart,Spi,etc), verwendet denn ein Laie wie Ich
> am besten mit dem PIC?

Das, mit dem Du bereits Erfahrungen gesammelt hast und das schnell genug 
ist, um die Anforderungen zu erfüllen, die Deine Anwendung stellt - die 
MIDI-Nutzdaten kommen mit 31.25 kBaud, der Protokolloverhead für die 
Ansteuerung des USB-Hosts kommt dazu, so daß Du eine doch deutlich 
höhere Baudrate brauchen wirst, wenn Du UART verwendest.


Es gibt übrigens auch (exotische) USB-zu-MIDI-Interfaces:

http://www.kentonuk.com/products/items/utilities/usb-host.shtml

Letztlich ist das, was Du mit dem USB-Host anstellen willst, /genau das 
gleiche/.
Gast
Es gibt PICs mit USB OTG. Ob man damit Host spielen kann, so dass das 
Piano funktionier? Schwierig.

Hast du denn keine normale MIDI-Schnittstelle? Das sollte deutlich 
einfacher sein, denke ich.
Persönliche Seite
Hurra schrieb:
> Ob man damit Host spielen kann, so dass das Piano funktionier?

Dafür wäre so etwas da.

Erklärender Einschub für den Threadstarter:

USB OTG ("on the go") ist ein USB-Gerät, das sowohl Device als auch Host 
sein kann.

Ein PIC mit OTG-Funktionalität wäre also funktional gleichbedeutend mit 
einem PIC mit angeschlossenem USB-Host-Controller.

Die Software dafür ist aber nicht trivial (grundlegender USB-Stack und 
darauf aufsetzend USB-Midi-Unterstützung), keine Übung für 
Programmieranfänger.
Gast
Markus L. schrieb:
> Hurra schrieb:
>> Es gibt PICs mit USB OTG. Ob man damit Host spielen kann, so dass das
>> Piano funktionier? Schwierig.
>>
>> Hast du denn keine normale MIDI-Schnittstelle? Das sollte deutlich
>> einfacher sein, denke ich.
>
> Nein eine normale Schnittstelle gibt es nicht, nur USB.

Hmm. Also mit Host habe ich keine Erfahrung, aber USB-OTG-PICs hab ich 
schon verwendet, natürlich auch mit USB.

Es gibt Beispiele von Microchip:
http://ww1.microchip.com/downloads/en/AppNotes/01141a.pdf
http://www.microchip.com/doclisting/TechDoc.aspx?type=CodeExamples
Ich würde mir das mal ziehen, und schauen, wie komplex das ist.

Folgende PICs mit OTG fallen mir ein:
PIC32MX470F512H - ein ziemlich mächtiger 32-Bitter
PIC24FJ128GC010 - ein 16-bitter mit viel Peripherie

Natürlich gibts weitere.
Ich würde mal mit den Beispielen von Microchip starten, und schauen, 
wieviel Flash man braucht und welches Device am günstigsten ist. Und ob 
das überhaupt realisierbar ist.

Eine Warnung: Die Microchip-USB-Stacks sind NICHT leichtverständlich.

Für PIC32 wäre noch zu sagen: Harmony ist Geschmackssache aber 
inzwischen fast zwingend. Sollte man sich vorher ansehen.
Gast
Rufus Τ. F. schrieb:
> MIDI-Nutzdaten kommen mit 31.25 kBaud, der Protokolloverhead für die
> Ansteuerung des USB-Hosts kommt dazu, so daß Du eine doch deutlich
> höhere Baudrate brauchen wirst, wenn Du UART verwendest.

Sicher? Ich dachte immer über USB-MIDI kommt mehr und in höherer Rate.

?
Gast
> Ich dachte immer über USB-MIDI kommt mehr und in höherer Rate.

Brilliant beobachtet.
Eine Baudrate wie fuer ein serielles Midiinterface ist
bei USB natuerlich nicht relevant.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.