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
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...
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.
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.
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.
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)
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 AT90USB162WinAVR
( 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
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
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
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?