Forum: Mikrocontroller und Digitale Elektronik USB Mikrocontroller von ATMEL


von Gregor (Gast)


Lesenswert?

Hallo

Ich möchte einen ATMEL AT90USB647 Mikrocontroller mit eingebauten USB 
Controller verwenden um Messwerte von einem meiner Platine auf den PC zu 
übertragen. Nun ist mir beim Ansehen der ATMEL Datenblätter aufgefallen, 
dass es hierbei unterschiedliche Typen gibt:

Der AT90USB646 ist ein USB- Function Mikrocontroller, wohingegen
der AT90USB647, den ich verwenden möchte ein USB- On the Go (OTG) 
Mikrocontroller ist.

Gibt es also einen Unterschied zwischen einem USB- Function und einem 
USB- On the Go Mikrocontroller?

LG Gregor

von STK500-Besitzer (Gast)


Lesenswert?

On The Go unterstützt auch noch den Host-Modus. Den braucht man. wenn 
man mit einem Mikrocontroller auch noch USB-Stick oder sowas ansteuern 
will.
PDAs haben solch Controller i.d.R. integriert, da sie einerseits an den 
PC anschließbar sind, um Daten auszutauschen (PDA als USB-Device), 
andererseits kann man häufig irgendwelche USB-Devices an einen PDA 
anschliessen...

von Gregor (Gast)


Lesenswert?

Danke für die Antwort.

Da hätte ich noch eine Frage:

Der USB Controller des AVR benötigt sicher eine Firmware.  Wie sieht es 
hier mit der Auslastung des Controllers durch die Abarbeitung der 
Firmware aus? Der Controller sollte nämlich während des USB 
Datenaustausches auch noch andere Aufgaben (nicht besonders 
rechenintensive) ausführen können.

von Entwickler (Gast)


Lesenswert?

Das ist kein Thema, Rechenzeit bleibt genug, da der USB-Teil die 
eigentliche Datenübertragung übernimmt. Du schiebst quasi die Daten in 
den Fifo, der Controller versendet Sie dann. Richtig anstrengend ist 
allerdings die Implementierung des USB-Protokolls, wenngleich es auch 
einige mitunter sehr passende Sourcecodes hierfür gibt. Aber das erste 
Da-Ding von Windows, das Dein USB-Gerät akzeptiert hat, motiviert 
ungemein...:-) Viel Spass beim einfräsen.

von Gregor (Gast)


Lesenswert?

Wird eine Firware die das USB Prokoll implementiert nicht von ATMEL zur 
Verfügung gestellt?

von Entwickler (Gast)


Lesenswert?

Ja, das stimmt. Wenn Du allerdings andere Funktionen benötigst oder mal 
nen Fehler suchen musst, bist Du dem Atmelcode hoffnungslos 
ausgeliefert. Letztlich hilft es ungemein, wenn man versteht, was Atmel 
da programmiert hat. Weiterhin ist der Code nicht für jeden Compiler 
geeignet. Eine Umsetzung birgt ein paar Fehlerquellen und schwups, geht 
nichts mehr.

von Frank (Gast)


Lesenswert?

...und Atmel programmiert teilweise auf seltsame Weise...

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?


von Martin A. (realnameuser)


Lesenswert?

was muss man jetzt nun wirklich tun
um den Controller über USB Programmieren zu können

ich hab z.B. das AT90USB162 USB Entwicklungs-Board hier im shop bestellt
(kann ich jetzt leider nicht mehr im shop finden???)

kann man direkt mit z.B. AVR Studio loslegen ???
(bitte nicht lachen, ich bin absuluter Anfänger)

von Ulrich P. (uprinz)


Lesenswert?

Hi!

Der USB Code ist in C Programmiert und ist eben genau deswegen etwas 
merkwürdig, weil er mit dem IAR dem Keil und dem gcc compiliert werden 
kann. Außerdem finden sich noch einige Relikte aus einer Implementierung 
für einen 8051er mit USB darin. Es ist hilfreich einen Editor zu haben, 
der Codeteile anhand von #define aus und einblenden kann.

Ich habe aber schon einige Sachen mit dem ATMEl Code gemacht vor allem 
dem einfachsten, dem CDC Device. D.h. der Controller hängt an einem PC 
und simuliert einen COM Port, was bei korrekter Implementation ohne PC 
Seitigen Treiber funktioniert. Das Komplexe bei USB ist nämlich nicht 
der Controller, sondern der Treiber auf der PC Seite.

Wenn Du das CDC Beispiel von ATMEL verwendest hast Du relativ schnell 
verstanden, was Du wo ändern kannst / musst um es Deinen Wünschen 
anzupassen. Schau Dir ggf. einfach bei http://www.usb.org/home die Doku 
an.

Es gibt ein paar Dinge, die ATMEL icht fertig gemacht hat. So werden nur 
die nötigsten Device Informationen beim Anstecken übertragen. Die 
Seriennummer fehlt z.B. was dazu führt, dass beim Wechsel des USB Ports 
am PC immer eine neue COMx Schnittstelle emuliert wird. Um immer auf der 
gleichen Schnittstelle, also COM6 oder so, zu bleiben, muss man diesen 
Teil noch aktivieren.
Es gibt auch Programme, die die Handshake Leitungen benötigen, zumindest 
RTS/CTS und DSR/DTR sollten funktionieren. Das hat ATMEL einfach weg 
gelassen. Ich hatte das in einer Version 1.0.4 von deren CDC Demo mal 
alles eingebaut und man hat mir auch gesagt das zu veröffentlichen. Ist 
aber bis heute nicht geschehen. Also auf Wunsch, kann ich Dir das 
zukommen lassen.

Allerings habe ich bei genau dieser vergleichsweise einfachen Aufgabe 
das meiste gelernt, was für die USB Verwendung auf einem Controller 
nötig ist.

Meine Entwicklungsumgebug ist ein AT90USB1287 und ein AT90USB162 WinAVR 
( AVRgcc) und ein Editor, natürlich kann man bei installiertem WinAVR 
uch das AVRStudio einsetzen, kein Problem nur eine Frage der Vorliebe.

Für das Stöbern in unbekanntem Code hat sich bei mir der SourceInsight 
Editor bewährt. (Nicht billig, Nutzen aber unbezahlbar)

Gruß, Ulrich

von Martin A. (realnameuser)


Lesenswert?

ok,
ich möchte eigentlich ohne Umwege den Controller programmieren
WinAVR und AVR Studio hab ich schon runtergeladen

wenn ich's richtig verstanden hab brauch ich also
noch einen Treiber auf der PC Seite  ???

emil: realnameuser(at)web.de

danke

von Ulrich P. (uprinz)


Lesenswert?

Jein...

Also, wenn Du den Baustein über USB programmieren willst, dann musst Du 
das Flash-Tool von Atmel installieren. Dieses legt dann ein verzeichnis 
mit der .inf und einer .sys oder/und .dll an.
Steckst Du den AVR dann mit gedrückter HWB Taste oder auf GND gelegter 
HWB Leitung an den USB, dann wird einmalig zur Treiberinstallation 
aufgefordert.
Danach kannst Du das immer wieder machen und der Flasher erkennt den USB 
ebenso, wie der PC.

In Bezug auf Deine eigene Software auf dem USB Chip kommt es darauf an, 
was Du machen willst. Für die in den AMEL Application Notes angegebenen 
Beispiele für Memory, HID und CDC brauchst Du keinen Treiber, sondern 
nur eine .inf Datei, die dem Windows sagt, dass das Device eben eines 
dieser standard Dinger ist, die die Windows eigenen Treiber benutzen 
wollen. D.h. wenn Du mit der Flasher Prozedur vom Anfang meines Textes 
eben das CDC Beispiel geflasht hast und dann reset ohne HWB Leitung 
ausführst, erkennt der PC Deinen AT90USB eben als neues Devivce und 
hätte gerne eine .inf dafür. Die findest Du für jedes Beispiel in den 
jeweiligen Quellcode Unterverzeichnissen. Die gibst Du dem Windows auf 
Anfrage einfach und fertig.

Die INF Datei ist kein Treiber, sondern stellt lediglich die Verbindung 
zwischen einer Vendor- und Product-ID und einem dafür zuständigen 
Treiber seitens Windows her. Da HID, Memory und CDC bereits in Windows 
existieren, reicht die einfache INF.

Gruß, Ulrich

von Martin A. (realnameuser)


Lesenswert?

ok, pc hat den AT90USB erkannt
(allerdings musste ich zusätzlich den Reset betätigen)

jetzt versuch ich mit dem AVR Studio 4.13 sp2 zu verbinden
->Connect to selected AVR Programmer ->Connection failed

an was kann das liegen?
mach ich was grundsetzliches falsch?

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.