Hm, ich bin mir nicht ganz sicher, was es da an USB-Profilen gibt. Wenn, dann müsste man unbedingt ein bestehendes Audio-Ausgabegerät-Profil implementieren, einen Windows-Treiber schreiben ist zu zach.
Im Prinzip hat man da (mindestens) folgende Probleme zu lösen:
- Datenstrom Windows -> IC (digital) über USB: Man muss auf der IC seite ein passendes Standard-Audio-Profil implementieren, irgendwas wirds schon geben, aber es kann sein, dass man einige Funktionen (wie Lautstärke,..) implementieren muss, und man bekommt den Audiostream sicher codiert, und möglicherweise muss man einen Haufen Formate entgegennehmen können, je nachdem wie das Handshake funktioniert.. (müsste man nachschaun)
- USB ist kein Echtzeitprotokoll, nicht mal ansatzweise. Damit Audio da drüber geht, muss man am IC immer Blöcke entgegennehmen, in einem Buffer schmeißen und dann decodieren und mit dem richtigen Timing abspielen. Das Decodieren, USB-Protokoll-Handling und Abspielen kann einiges an Instruction-Cycles kosten. Mit nem standard-20Mhz-AVR wird man da nicht auskommen schätz ich. Dh. man braucht entweder a) einen leistungsfähigeren IC mit mehr Taktfreq., idealerweise mit integrierten USB-Controller (der aber einerseits unbedingt USB-interne Buffer- und Control-Requests selbst implementiert, aber andererseits nicht ein fix verdrahter "COM-over-USB" controller ist (wie diese Standard FT-irgendwas Chips z.B.), oder b) einen fertigen IC der USB-Controller, Decoder und am besten auch DA-Wandler fertig drin hat. Beides ist nicht ganz billig, aber vllt. kann mans als Samples bestellen
Man kann auch µCPUs ohne USB nehmen, und z.B. einen Maxim-USB-Controller dazuhängen, braucht aber mehr platz und mehr Strom, und mittlerweile hat wohl eh jeder bessere µCPU und MC einen USB-Controller drauf. Ein FPGA wäre Overkill, und würde wohl auch den ganzen Strom selber fressen.
- DA Wandler und analoge Endstufe: Da kommt man natürlich in analoges Schaltungsdesign rein, da wirds dann immer etwas haarig, das sauber hinzubekommen. Und jeder IC mehr bedeutet natürlich auch mehr Strom- und Platzverbrauch. Und sparsam muss das ganze natürlich auch sein. Ist sicher machbar (am besten Referenz-Designs verwenden), aber einfach nen DA-Wandler und Transistor zamhängen wird zu unschönen überraschungen führen
- Stromversorgung: Wie schon erwähnt braucht man eigentlich immer einen USB-IC clientseitig, auch wenn man nur Strom will. Besonders bei Notebooks muss man aufpassen, da kanns schon sein dass der im Battery-Mode nicht genug am USB-Port hergibt ohne negtiation. Dafür kann man dann sich mit dem Host ausmachen: 1) 100mA, 2) 500mA, oder 3) 1.5A wenn der Host den neuen Battery-Charging standard unterstützt (auch während (Fullspeed-, also 12Mbit) Kommunikation), oder gar 1.8A auf Dedicated Charging Ports (D- auf D+ mit Widerstand kurzgeschlossen Hostseitig, keine Daten-Kommunikation möglich). Wenn der Host nicht genug hergeben will wie man haben will (500mA oder 1.5A), muss man entweder den Verbrauch runterschalten oder hat halt Pech gehabt.
Allerdings, das ist keine stabilisierte Spannungsquelle! D.h. das kann zwischen 5.25V und 4.75V (+-5%) schwanken, und wirds auch tun. Für nen möglichst linearen und stabilen D/A-Wandler ist das keine geeignete Quelle, da müsste man zuerst nen Spannungs-Stabilisator davorhängen (da sind billig/einfach und niedriger Stromverlust mal wieder zwei verschiedene Ziele), sofern der D/A das nicht selbst kann.
Außerdem, das Kabel (und der Host selbst) haben natürlich einen Widerstand. Je mehr Strom man zieht, desto mehr bricht die Spannung ein (auch für den IC und Wandler) (AWG 28, die dünne Variante von USB-Power-Litzen, hat auf 2m knapp 0.43Ohm, bei 500mA fallen 0.22V bzw. 0.11W ab, wenn ich mich nicht verrechnet hab).
Und man darf nicht vergessen, V+ ist bei USB 5V (+-5%), die D+ und D- Datenleitungen sind aber bei 0V und 3.3V. Je nachdem was man für nen USB-Controller, µCPU,.. hat, braucht man da u.U. noch einen Spannungswandler auf 3.3V (die Hofer-Billig-Lösung kann auch einfach 2 Dioden in Serie sein, bei etwa 0.6-0.7 forward voltage drop kommt man dann auf 3.6-3.8V, der Rest wird in den Dioden verheizt).
Alles zam sicher machbar und ein interessantes Projekt, aber halt nix was man einfach an nem Wochenende zamschustert.
Wenns einen fertigen IC gibt, würd ich auf alle Fälle den verwenden, auch wenn man 90% der Funktionen net braucht (das is sowieso bei den meisten ICs immer der Fall, einfach weils einfacher und billiger ist, in einen IC einen haufen Funktionen reinzustecken und jeder verwendet halt nur das was man braucht, als für jeden Anwendungsfall einen eigenen IC zu designen, zu produzieren, testen und lagern..). am besten mit Referenz-Design. Man erspart sich die ganzen Probleme mit USB-Protokoll, Stromversorgung und -stabilisierung und analoger Endstufe, über die die Designer schon alle drübergestolpert sind und (hoffentlich) gelöst haben, und unterm Strich ists wahrscheinlich auch billiger (und kleiner) als 4 verschiedene ICs und nen haufen diskreter Teile.
Wenn dann meine CNC Fräse da ist, kann ich ja dann die Platinen routen (und überhaupt das ganze Gehäuse
). Einen Stundensatz für die Fräse werd ich mir dann noch überlegen