Hi, in Zukunft werde ich immer wieder Projekte haben bei denen der AVR mit dem PC verbunden werden muss und das möglichst über USB. Diese Geschichte mit den Virtuellen COM-Ports klingt für mich aber nach ziemlichem Murks, da ich aus einem Programm heraus somit nicht erkennen kann, ob mein Device nun am PC hängt oder nicht (ohne jetzt auf allen freien COM-Ports ne Verbindung aufzubauen und zu fragen "Bist du Device XYZ?"), ich müsste das manuell machen. Also CDC ist nix für mich, bleibt dann noch HID. Kann ein USB-Gerät im HID-Modus mit mehr als 100mA an Strom versorgt werden oder geht das nur über einen gesonderten Treiber (womit das USB-Gerät dann ja auch kein HID mehr wär und wo auch immer man einen solchen Treiber nun hernehmen soll...). Übrigens programmiere ich unter Windows mit C#, hat da schonmal jemand was mit USB gemacht? Habe derzeit keine Vorstellung wie man aus C# heraus USB-Geräte ansteuert. lg PoWl
Das mit dem virtuellen ComPort ist einfach nur eine schnelle Lösung. Mit den FTDI Seriell zu USB Wandlern ist es zb. auch möglich zu erkennen ob diese angesteckt sind und auch noch viel mehr. Das Stichwort dafür heisst D2XX.dll. Du kannst aus deinem Programm herraus die Funktionen der dll nutzen um direkte Verbindungen zu den USB-Seriell Wandlern herzustellen, ohne den Umweg über die virtuellen Com Ports. Das war jetzt zwar nicht direkt die Antwort auf deine Frage aber vielleicht hilft es ja auch. Mfg Christian
OK, wenn das so möglich ist wär das natürlich recht prima. Ich möchte nur den Murks vermeiden, in einer Liste mit möglichen COM-Ports mein Gerät herauskramen zu müssen. Wenn das mit der DLL geht wär das schon ein entscheidender Schritt. Ich wäre ja auch recht mit einverstanden, wenn alle COM-Ports angepollt werden und nach dem verfügbaren Gerät gefragt wird, ich hab nur bedenken, dass dadurch andere COM-Geräte irgendwelchen Mist machen und danach nicht mehr ansprechbar sind. Die FTDI-Chips, müssen die nicht zuerst programmiert werden bevor man sie benutzen kann? Ist das kompliziert oder kann man dafür schnell ein kleines spezialprogramm in den µC in der vorhandenen Schaltung einbauen? Wie viel Strom steht durch die FTDI-Chips dem USB-Gerät zur Verfügung? Die Geräte sollen hinterher teilweise komplett, auch mit bis zu 500mA per USB versorgt werden damit ich kein extra Netzteil brauche. lg PoWl
Für C# und USB Programmierung habe ich hier ein paar links, habe mich aber auch noch nciht damit befasst, aber du kannst dich gerne mal melden wenn du etwas lauffähiges hast :) (habe aber noch nie C# programmiert sondern nur C++ und en bissel Java) http://www.codeproject.com/KB/cs/USB_HID.aspx http://www.codeproject.com/KB/cs/essentialpinvoke.aspx http://msdn.microsoft.com/de-de/library/aa446536.aspx 500 mA müsstest du per USB versorgen können, dass ist doch nach Norm die höchste zulässige Stromstärke. Oder täusche ich mich nun?
Naja also der Strom geht theoretisch bis zu den 500 mA. Ich hab ehrlich gesagt noch nie mehr als 100 mA über USB versorgt. Die Chips müssen grundsätzlich nicht programmiert werden damit sie funktionieren. Die Einstellungen auf dem Chip werden nur über die USB Verbindung gemacht. Es gibt dazu ein Programm von FTDI. Nennt sich MProg. Da kann man auch schön alle möglichen Einstellungen sehen. Besonders kompliziert fand ich das nicht. Die Programmierung ist aber auch über die dll möglich. Also könnte das auch ohne weiteres automatisiert werden. Mfg Christian
Ja, richtig, allerdings kriegen USB-Geräte erstmal nur 100mA zur Verfügung. Ich bin mir nun leider nicht so ganz darüber im Klaren ob die 500mA durch entsprechende PC-Software (mein Programm!) freigegeben werden können oder ob es dazu einen gesonderten Treiber braucht (der FTDI-Treiber?). Sollten die 500mA auch für CDC-Geräte verfügbar gemacht werden können wäre eine solche Lösung ja auch ganz nett, zumal es da Projekte gibt, in dem man den AVR im CDC-Modus direkt an USB anschließt.
Bei den FTDI-Chips ist der maximale Strom, der vom Bus gezugen werden kann, in den Einstellungen auf dem Chip enthalten. Der Chip stellt dann einen PWREN# Pin zur Verfügung, mit dem die größeren Verbraucher nach der erfolgreichen Anmeldung eingeschaltet werden können. Aber selber verwendet hab ich diese Feature noch nicht. Mfg
Also ich habe das so auf meinem AVR-Demoboard. Und es läuft ohne Probleme, nutze aber den COM-Port, aber das ist ja nur eine Treiber sache. Die Einstellungen werden über MPROG gemacht, hier das PDF dazu http://www.ftdichip.com/Resources/Utilities/MProg.pdf Habe es auch auf 500mA gestellt. Du kannst auch deine eigene PID/VID vergeben. Diese muss dann aber in der inf-Datei des Treibers dann mit drinne stehen. Kannst sogar einen eigenen Namen vergeben und so. Das zum Thema ansprechen des Treibers http://www.ftdichip.com/Documents/ProgramGuides/D2XXPG34.pdf Gruß John
Wenn man die FT232R Typen nimmt spart man auch das externe EEPROM. Mfg
OK, danke, da werd ich mich mal einlesen. Wie schauts mit sowas aus: http://www.recursion.jp/avrcdc/
Und schau Dir mal VUSB an, vielleicht gibt's da die Lösungen, die Du suchst. Die haben eine ganze Seite über damit realisierte HID-Projekte: http://www.obdev.at/products/vusb/prjhid.html
Insbesondere auch die SharpUSBLib dürfte in Verbindung mit C# für dich interessant sein...damit geht so ziemlich alles was du an Anforderungen hattest, bis auf die Sache mit den 500mA, da bin ich mir nicht sicher... Hat eben auch den Nachteil dass man das auch alles wirklich selbst implementieren muss...
Argh, ich meinte natürlich zusammen mit VUSB, also VUSB + C# + SharpUSBLib sind eine gute Kombi...
OK, mal reinlesen. Danke! Weiß nun jemand noch genau wie es mit dem Strom aussieht? Welche möglichkeit gibt es für USB-Geräte an die vollen 500mA zu kommen? Wie siehts jeweils für CDC und für HID geräte aus? Können die einfach nach mehr Strom nachfragen? Geht das aus der PC-Software heraus mit der die Geräte kommunizieren? Oder nur über einen gesonderten Treiber? lg PoWl
Wie viel Strom Deine Schaltung braucht sagt das Gerät selber. USB ist nun mal relativ komplex und wenn man ne eigene ID will auch teuer. Wenn man dann noch Treiber unter Windows entwickelt und die von Microsoft abgesegnet sein sollen, dann wirds richtig teuer. Es gibt aber Lösungen um das quasi zu umschiffen. Ein virtueller COM-Port ist wohl das einfachste, führt aber die Idee hinter USB ad absurdum. Für AVRs gibts auch einen Software-USB-Stack. Einen Treiber für Linux zu schreiben ist auch kein Hexenwerk und die ID kann man bei einem Reseller kaufen. Aber für eine große Serienproduktion gibts wohl nur den offiziellen weg.
Ne VID wollte ich mir jetzt nicht unbedingt besorgen müssen. Wann braucht man die denn und gibts da Umwege? Was machen die Leute mit ihren selbstbau USB-Projekten? Ich möchte nichts weiter als mit dem USB-Gerät gelegentlich mal ein wenig kommunizieren, muss auch erstmal kein dauerhafter und regelmäßiger Datenstrom sein. Das USB-Gerät als HID zu verwenden wäre natürlich ne möglichkeit, ist aber wohl komplexer da ich mich dann auch noch in die SharpUSBLib einarbeiten müsste und mir das gegenüber CDC wohl keine Vorteile bringt (widersprecht mir ruhig!). Per CDC könnte ich die normalen Serial-Port Funktionen nutzen und einfach alle freien verfügbaren COM-Ports anpollen um das Gerät zu erkennen. So nun zur wichtigsten Frage die über letztes entscheidet: Das USB-Gerät sagt dem PC wie viel Strom es benötigt? Geht das auch mit einem USB-Device das über CDC am PC dran hängt (braucht man da eigentlich auch ne VID)? lg PoWl
Hallo Paul Eine VID/PID brauchst Du immer. Solange Deine Kombination aus VID/PID nicht mit irgend einem existierenden Gerät an Deinem PC kollidiert, hast Du auch keine Probleme. In Deinen vier Wänden kann es Dir keiner verbieten, bei Problemen kann Dir aber auch keiner helfen und ich würde in so einer Situation auch keinen Fremden an meinen PC lassen. Wenn kein Treiber sich das Gerät anhand der VID/PID Kombination exklusiv schnappt, dann ist VID/PID in der Praxis egal und kann auch mehrfach von unterschiedlichen Geräten benutzt werden. So gesehen, z.B. bei einem portablem Navi. Das hat die Device Klasse Massstorrage, darüber wurde der Treiber gefunden. Als VID war die von Microsoft eingetragen und als PID 0xFFFF. Nun wird in den Windows CE Lizenz Bedinungen wohl drinstehen, dass der Hersteller das durfte. Microsoft wird wohl aber etwas dagegen haben, wenn das gleiche Spielchen mit einem AVR getrieben worden wäre. Ich habe noch nicht gesehen, dass ein MS-OS auf so einem Teil gebootet hat... Das Feld zur Stromversorgung gibt es bei jeder Konfiguration Ein Device Descriptor beschreibt das Gerät (VID/PID) Name ... und wie viele Konfigurationen es unterstützt. Eine Konfiguration beschreibt dann erst die Geräte Klasse CDC/MDC, da sich ein Gerät einmal als Modem ausgeben könnte und wenn es das OS für sinnvoll hält als spezielles Gerät oder Masss Storrage Device. In jeder Dieser Konfigurationen kann es vorgeben unterschiedlich viel Strom zu verbrauchen. Wenn das Gerät nicht gelogen hat, kann so das Betriebssystem entscheiden bei Akku betrieb z.B. die sparsamste Konfiguration zu benutzen. Zu jeder Konfiguration gehören dann ein oder mehr Endpoints über die dann die eigentliche Übertragung der Daten stattfindet. Einerseits gibt es Bücher zu USB, die das Wesentliche zusammen fassen. Du wirst aber nicht um herkommen die Spezifikation zu lesen. http://www.usb.org/developers/docs/usb_20_052709.zip (1. Einstiegspunkt wäre dann usb_20.pdf. ) Da steht von der Bauform der Stecker, über die Signale auf der Leitung, Codierung bis hin zu den für alle Geräte gültigen Operationen alles drin. Je nachdem für welche Geräteklasse Du Dich entscheidest solltest Du auch die Dokumentation dazu lesen. Viele Grüße, Thorsten
Ich habe das Buch "USB 2.0 Studienausgabe". Ich denk da werde ich mich mal reinlesen, das ist zwar trocken, aber nicht ganz so trocken wie die reinen specs. Danke!
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.