Hallo Leute, ich soll im Zuge eines Projekts eine Messung mit einem AT91SAM7 durchführen. Die Einarbeitung habe ich mittlerweile hinter mir was die Ports, Timer und den ADC betrifft. Jetzt möchte ich die Daten auf meinen PC übertragen. Da ich kein Informatiker, sondern Elektrotechniker bin, hab ich lediglich mit der UART Schnittstelle und dem Hyperterminal Erfahrung. Der AT91 bietet aber auch eine USB Schnittstelle an. Jetzt muss ich sagen, dass mich das doch sehr reizt. Habe ein Testprogramm gefunden, welches auf dem AT91 läuft und von meinem PC auch als USB Device erkannt wird. (Zu finden unter: http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index_at91.html) Jetzt meine Frage: Wie arbeite ich mich da am schnellsten und effizientesten in USB ein? Sehr viel Zeit habe ich leider auch nicht für Literatur. Sonst weiche ich wieder auf UART aus. Wie schon erwähnt. Ich bin kein Informatiker, daher beschränken sich meine Programmierkünste bei C auf Rechenalgorithmen, primitive Visualisierung, Ausgabe auf Dateien und natürlich dem Programmieren von µC, eben wie es für E-Techniker typisch ist. Ich brauch daher erst mal das prinzipielle Verständnis von USB und wie der PC darauf reagiert. Wie werden die Daten rübergeschaufelt. Aber vor allem, wie reagiert der PC auf den Empfang der Daten. Wie USB erkannt wird, also die Config, ist glaub ich nicht so relevant, da ich das ja schon als Programm habe Für wirklich gute Links bin ich dankbar. Sagt mir auch bitte in welcher Reihenfolge die Wissensaneignung am effizientesten ist. Vielen Dank schon mal...
Wie USB an sich vom Protokol her geht, gibt es sehr schnell bei "USB in a Nutshell"(googeln) zum nachlesen. Wie man ein HID Device aus Windows anspricht habe ich in USB Complete (C#,C++,VB) gelesen. Bei Bedarf gibt es eine ATMEL-Appnote, die eine AT91-spezifishe Implementierung (C) zeigt. Bei mir ging es. Verglichen mit UART war es aber nicht schnell.
Ist das Protokoll wirklich wichtig? Schließlich kann ich ja auch mit der UART Daten übertragen ohne zu wissen wie das Protokoll aussieht. Aber die ATMEL-Appnote klingt interessant. Und noch eine Frage: was genau ist USB Complete? Wo finde ich das? Was erfahre ich daraus? Wie schnell eigne ich mir das Wissen an? Schnelle und gute Ergebnisse sind mir wirklich wichtig?
Also wenn Du nicht viel Zeit hast, solltest Du vielleicht wirklich beim UART bleiben. Oder aber Du orientierst Dich an deinem Beispiel-Programm. Das implementiert eine Standard-USB Klasse und bietet Dir dann einen virtuellen COM-Port. D. h. auf PC-Seite kannst Du die gleichen Tools (z. B. Hyperterminal) verwenden wie beim UART. Wenn Du ein eigenes USB-Gerät entwickelst mußt Du auch auf PC-Seite einen Device-Treiber schreiben. Das ist nicht so einfach, wenn Du darin noch keine Erfahrung hast. Das Beispiel bietet Dir aber auch die Möglichkeit über eine Treiber von ATMEL mit dem Device zu kommunzieren. Beschreibung: http://www.atmel.com/dyn/resources/prod_documents/doc6123.pdf Ist aber alles (inkl. PC-Applikation zum Lesen/Schreiben von Daten) in dem Beispiel vorhanden. USB Complete ist eine Buch von Jan Axelson (einfach bei Amazon suchen) Bei http://www.beyondlogic.org/ findest Du auch noch einiges zum Thema USB (z. B. das besagte USB in a Nutshell). Aber wie gesagt, in dem WinARM Beispiel ist doch alles enthalten was Du brauchst.
Lies dir "USB in a Nutshell" durch, sind nur ca. 20 Seiten mit Bildern. Danach wirst Du wissen, glaube ich , ob Du bei UART bleibst oder nicht. Es gibt so zu sagen verschiedene Modi (Transfer Types), Du musst dich fuer einen entscheiden. Dann gibt Standard-Device Classes (da kannst Du Transfer Types nicht waehlen, dafuer gibt es Treiber, die Du nicht mehr schreiben musst.) Dann gibt es Enumeration, die du auch verstehen musst usw., wie gesagt: USB in a Nutshell. USB Complete ist ein "dickes" Buch, aber daraus habe ich nur das Kapitel zum Host-Side Programierung gelernt.
Na denn, ich werde das dann wohl doch nicht so schnell schaffen. Mein Beispielprogramm ist mir aber auch ein bisschen suspekt. Nennen wir es Reizüberflutung. Genau deswegen brauch ich ja auch ein kleines Hintergrundwissen. Nun gut. Nehmen wir an ich hätte Zeit? Was wäre dann die beste Lernstrategie (Welche Themen,Bücher in welcher Reihenfolge?). Und was das Programmieren von Device-Treibern angeht, da bin ich auch absoluter Neuling? Ist es von Nöten den PC in seiner Architektur so zu erlernen wie man es bei µC normalerweise tut, oder nimmt man einfach einen Compiler der alle Bibs schon drin hat und gut ist? "USB in a Nutshell" ...20 Seiten und ich kanns? Ich glaube, ich brauch da dann doch noch etwas, oder? Auch wenn ich sagen muss, dass es wirklich appetitanregend aussieht.
Wenn Du USB in a Nutshell durch hast, wirst Du, glaube ich, das Gefuehl haben, wie machbar es ist und wie schnell es bei dir gehen wird. Zu Device-Treibern kann ich dir nichts sagen. Ich habe ein HID-Class Device implementiert, da es eine Standard-Klasse ist , ist der Treiber dafuer ein Standard-Treiber bei Windows. Man muss nur wissen wie man ihn aus deinem Win-Program heraus anspricht. Das steht gut in USB Complete beschrieben.
> Was wäre dann die beste Lernstrategie Schwer zu sagen. Ein Vorschlag wäre: Nimm Dir das Beispielprogramm. Lies Dir Nutshell durch und versuche das Beispielprogramm (inkl. Enumeration) zu verstehen. Dann könntest Du Dir ein anderes USB Buch zulegen (z. B. USB Complete). Vielleicht brauchst Du es aber dann auch nicht mehr. Es gibt noch eine Alternative zu einem eigenen Device-Treiber (selbst wenn man keine Standard-Klasse implementiert): libusb Das ist eine Bibliothek um USB-Geräte anzusprechen. Gibt es für Linux und auch für Win32 http://libusb-win32.sourceforge.net/
Noch ein Wort zu Device-Treiber: Du mußt nicht den PC in seiner Architektur erlernen sondern eher das Betriebsystem. Für Windows gibt es das Device Driver Development Kit von Microsoft. Such mal nach DDK Für Linux gibt es die Kernel-Sourcen ;-) Aber das solltest Du vermeiden, wenn Du Dein eigentliches Ziel nicht aus den Augen verlieren willst. Mit dem Thema Device -Treiber kannst Du schon mal mehrere Wochen/Monate verbringen
Um wieviel Daten handelt es sich denn ? Kommst Du mit normalen UART Gechwindigkeiten aus ? Wenn ja, würde ich empfehlen, einen USB <--> UART Wandler einzusetzen. Diesen kannst Du mit ein paar Bauteilen an die "normalen" TX/RX Leitungen vom AT91 anschliessen und über einen Treiber taucht dann das über USB-angeschlossene Gerät wieder als Com-Port in Windows auf. Damit kann man ganz normale Programme in Windows benutzen, die Com-Ports ansteuern können. Hersteller z.b. FTDI siehe FT232RL o.ä. Ich finde dies sehr praktisch, da ich auf der µC-Seite mit einem UART rede und auf der PC-Seite benutze ich z.B. ganz normale Terminal-Programme. Wie gesagt kommt auf den Anspruch an, wa Geschwindigkeit angeht. Gruß Sven
Also vielen Dank ersteinmal für die ganzen Antworten. Also auf die Geschwindigkeit von USB bin ich nicht wirklich angewiesen. Wie schon am Anfang erwähnt reizt es mich die USB Schnittstelle näher kennenzulernen. UART würde auch völlig reichen. Aber neben dem Interesse ist es auch wahrscheinlich, dass ich mich irgendwann wohl mit USB mal auseinandersetzen muss. Jetzt wäre ein günstiger Zeitpunkt ist aber anscheinend zeitlich doch nicht machbar. Da ich mehr aus der Energierichtung komme brauche ich für dieses Mikrogetue einfach mehr Zeitaufwand. Das kann dann bei mir wohl auch mehrer Wochen dauern. Daher wollte ich nicht allzu viel Zeit verlieren. µC sind ein Ding für sich. Auf dem Gebiet lern ich einfach nicht effizient. Verlier da immer viel Zeit. Daher meine Fragen. Aber es hat viel geholfen. Danke nochmal
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.