Forum: Mikrocontroller und Digitale Elektronik USB mit AT91? Effizient !


von Michael (Gast)


Lesenswert?

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...

von romanua (Gast)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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?

von Dirk D. (dirkd)


Lesenswert?

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.

von romanua (Gast)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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.

von romanua (Gast)


Lesenswert?

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.

von Dirk D. (dirkd)


Lesenswert?

> 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/

von Dirk D. (dirkd)


Lesenswert?

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

von Sven (Gast)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.