Hallo,
nach einigen Stunden suchen im Internet, durchstöbern des Datasheets vom
Controller... irgendwie habe ich gerade einen leichten Tiefpunkt :(
Mit µC Programmierung in C habe ich keine Schwierigkeiten, da bin ich
realtiv fit drin. Doch jetzt wollte ich mcih mal etwas weiterbilden und
was neues ausprobieren :) Doch leider scheitert es hier...
Was ich habe/machen möchte.
Ich habe mir das Entwicklungsboard mit dem AT90USB162 gekauft und würde
damit gerne etwas rumspielen.
Zunächst: Nein, ich nehme keinen FTDI Chip ;) Mit COM-Schnittstellen
habe ich aus Visual Basic herraus schon gearbeitet, jetzt will ich mich
an USB herrantrauen.
Leider gibt es auf diesem Gebiet wirklich nicht sehr viele Informationen
im Internet.
Eigentlich habe ich Fragen zum gesamten Thema AT90USB und die USB
Verbindung.
Über Links würde ich mich sehr freuen, ebenso auch über Antworten ;)
Ist es zum Beispiel machbar, dass ich die vorhandene USB Schnittstelle
von dem Controller verwende, und darüber auf der UART Schnittstelle was
wegschicke?
Also sprich: Ich habe zum Beispiel ein µC mit 2 UART Schnittstellen. Die
eine Schnittstelle nutze ich dazu, um mit dem PC/Software zu
kommunizieren.
Mit Hilfe der Software schicke ich auf den µC Daten, die er auf der
UART2 wieder herrauschickt. Ich hoffe ihr versteht was ich meine...
Jetzt könnte ich natürlich vor der einen UART1 Schnittstelle einfach
einen FTDI Chip vorsetzen, der mir aus einer USB einen virtuellen
Comport zaubert, und damit hätte ich das Problem gelöst.
Aber ist es möglich, den AT90USB per USB anzusprechen via einer Software
und damit die UART Schnittstelle zu steuern?
Sozusagen das UDR der UART Schnittstelle per USB zu beschreiben ;)
Ist das möglich?? Ich weiß, ziemlich verwirrend geschrieben ;)
Vielen Dank schonmal,
Gruß
Markus
Markus Schwarz schrieb:> Ist es zum Beispiel machbar, dass ich die vorhandene USB Schnittstelle> von dem Controller verwende, und darüber auf der UART Schnittstelle was> wegschicke?>> Also sprich: Ich habe zum Beispiel ein µC mit 2 UART Schnittstellen. Die> eine Schnittstelle nutze ich dazu, um mit dem PC/Software zu> kommunizieren.> Mit Hilfe der Software schicke ich auf den µC Daten, die er auf der> UART2 wieder herrauschickt. Ich hoffe ihr versteht was ich meine...
Bis hierhin habe ich nicht wirklich was verstanden... ;-)
> Aber ist es möglich, den AT90USB per USB anzusprechen via einer Software> und damit die UART Schnittstelle zu steuern?>> Sozusagen das UDR der UART Schnittstelle per USB zu beschreiben ;)
Du willst also einfach die Daten über USB per virtuellem COM-Port
einlesen und eventuell noch verarbeiten, bevor sie über UART wieder
rausgeschrieben werden?
Wenn dem so ist, empfehle ich dir den LUFA-USB-Stack. Dort ist alles
drin, inklusive Beispiele, was du brauchst.
http://www.fourwalledcubicle.com/LUFA.php
Hallo Christoph,
erstmal Danke für deine Antwort :)
Das LUFA Projekt ist garnicht mal so schlecht, da muss ich mich mal in
Ruhe durcharbeiten.
Ich habe mal versucht aufzuzeichnen, was ich vorhabe.
Im Prinzip möchte ich gerne, das vom UART verwendete Datenregister (UDR)
via USB zu füllen mit Daten.
Vom PC aus schicke ich Daten, zB "Hallo Welt", an den µC. Diese Daten
sollen im µC gespeichert werden und anschließend via UART ausgegeben
werden. Das speichern der Buchstaben oder Zahlen, sowie das versenden
mit der UART Schnittstelle, dass ist für mich verständlich und möglich.
Ich bin nur noch nicht ganz dahinter gekommen, wie ich die Daten in den
µC reinbekomme.
Gruß,
Markus
Markus Schwarz schrieb:> Ich bin nur noch nicht ganz dahinter gekommen, wie ich die Daten in den> µC reinbekomme.
Das LUFA-Projekt bringt Treiber mit, die auf dem PC einen virtuellen
COM-Port einrichten über USB. Für das PC-Programm sieht es dann so aus,
als hätte der PC eine zusätzliche serielle Schnittstelle. Zum testweisen
Senden von Daten mit dem PC eignet sich fast jedes Terminalprogramm.
Markus Schwarz schrieb:> Ich habe mal versucht aufzuzeichnen, was ich vorhabe.
Wenn du eine Zeichnung gemacht hast, hast du sie vergessen anzuhängen.
Hallo,
ich nutze im moment auch LUFA als CDC-Device. Da gibt es dann einige
Funktionen mit denen du den Input-Buffer abfragen, Bytes empfangen,
Bytes und Strings senden kannst. Und die empfangenen Bytes kannst Du
dann natürlich speichern oder per UART ausgeben.
Gruß
Bad Urban
Edit: Das mit Startbit--"Hallo Welt"-- usw. wird so wohl nicht
funktionieren...
Äh, warum denn nicht?? Kann ich jetzt doch aber auch schon machen...
"Hallo Welt" in ein Array abspeichern und jeden einzellnen Buchstaben
nach einander rausschicken...
Ich werde mir mal aus dem LUFA Projekt das "USBtoSerial" etwas genauer
anschauen... das könnte vielleicht sehr weiterhelfen...
Sorry, hatte mich vorhin etwas kurz gefasst. Das geht natürlich schon.
Da war nur ein kleiner Fehler drin. Start- und Stopbit müssen beim UART
bei jedem Zeichen mitgesendet werden und nicht nur einmal im String.
Aber das macht der uC ja von alleine.
Also ich hab damals das CDC-Demo von Lufa für die ersten Gehversuche
genommen und das dann erweitert. Scheint mir am Anfang die einfachste
Lösung zu sein.
Gruß
Bad Urban
Guten Abend,
irgendwie habe ich mir das doch etwas einfacher vorgestellt - oder mache
ich es mir nur zu kompliziert??
Naja... aufjedenfall klappte via Flip alles prima, doch dann kam ich auf
die doofe Idee, mit WinAVR den kompletten Controller erstmal zu erasen
;)Naja... Nun ist alles weg - wohl auch der Bootloader.
Aufjedenfall zeigt mir das Ding nichts mehr an wenn ich es an USB stecke
- verständlicher weise.
Kommunizieren mit dem Controller kann ich noch, Port Pins toggeln lassen
klappt wunderbar.
Nun aber diese Sache mit dem Bootloader... Im LUFA Packet gibt es einen
Bootloader Ordner... DFU oder CDC. Soweit so gut...
Aber wie kriege ich diese Bootloader auf meinen µC????
Da komme ich irgendwie absolut nicht hinter :(:(
Wenn mir jemand helfen kann.... VIELEN DANK SCHONMAL!!!
Gruß,
Markus
Äh, ja genau.. per ISP.
Bei dem LUFA Bootloadern ist erstmal der AT90USB1284 eingetragen... wenn
ich im Makefile meinen 162 eintrage, bekomme ich Error-Meldungen beim
kompilieren.
Bei Atmel auf der Seite gibt es den Bootloader in einem PDF Dokument,
was muss ich denn dann damit machen??
Danke dass du so schnell geantwortet hast..
Wenn Du den At90USB mit z.B. dem MK II flashst wird der Bootloader
überschrieben. Beim Flashen mit FLIP über USB passiert das nicht. Den
kannst Du aber einfach wieder drauf flashen. Den gibts auch als Hex-File
bei Atmel. Musst mal danach suchen. Einfach mit dem MK II draufspielen
und die Sache läuft wieder.
Gruß
Bad Urban
So,
über Umwege habe ich nun den DFU Bootloader gefunden...
Wenn ich jetzt das LUFA "USBtoSerial" Project kompiliere und das .hex
File per Flip aus den Controller ziehe, dann passiert erstmal nichts.
Damit der Controller sich als "virtuelle Schnittstelle" an dem PC
anmeldet, dafür muss der CDC Bootloader geladen werden, ist das richtig?
Oder kann ich jetzt auch schon die USB Schnittstelle öffnen und auf den
µC zugreifen? Bei mir installiert sich nur irgendwie kein neues
USB-Device :(
Gruß
Sooo... den vorherigen Post könnt ihr ruhig vergessen...
Ich habe jetzt irgendeine HID FIrmware draufgepackt, aufjedenfall meldet
der µC sich jetzt als HID an und das bringt mich schonmal nen Stückchen
nach vorne.
Hat irgendwer von euch gute Anleitungen oder Tipps, wie ich mit HID´s
umgehe??
Dankeschön schonmal...
Wenn ich die Atmel CDC/HID Firmware auf den Controller per FLIP lade,
dann tut sich garnichts.
Im Geräte Manager sehe ich nichts dass sich da was tut...
Irgendwo aus dem Internet habe ich noch eine andere HID Firmware
gefunden, mit diese Firmware meldet sich der Controller immerhin als HID
Gerät an, und mit der Atmel Demosoftware kann ich die PortsPins abfragen
und setzen.
Leider ist die Firmware nur im .a90 Formart vorhanden und somit kann ich
dort nichts verändern dran.
Auch die LUFA Firmwarebeispiele lassen sich problemlos aufspielen, aber
im Gerätemanager tut sich nichts.
Habt ihr vielleicht Tipps für mich??
Markus Schwarz schrieb:> Na ok.... wenn es hier keine weitere Hilfe mehr gibt :(:(
Es gibt Leute, die sind auch einfach mal eine Woche nicht im Büro... ;-)
Die LUFA-Beispiele laufen eigentlich alle problemlos, daher gibt es
eigentlich nur zwei Möglichkeiten:
a) Du hast das LUFA-Beispiel falsch kompiliert, beispielsweise falscher
Prozessor eingestellt oder falscher Quarztakt.
b) Es gibt ein Problem mit dem Board. Da es das AT90USB-Board aber
nicht gibt, müsstest du zumindest sagen, um welches Board es sich
handelt.
Guten Morgen erstmal :)
Als "Board" hab ich dieses hier:
http://www.amazon.de/Development-USB-Stick-AT90USB162/dp/B004FM8PO2/ref=sr_1_1?ie=UTF8&qid=1297836916&sr=8-1
Ja, ich gebe zu... es war halt günstig ;)
Kompiliert habe ich das ganze mit AVR Studio 4.18 und WinAVR 20100110.
Beim Kompilieren bringt er keine Fehler und sagt alles ist gut. Das .hex
File schiebe ich dann entweder per Flip auf den Controller oder per ISP
mit AVR Studio.
Die Fuse Bits sind "richtig" eingestellt. Wenn ich ein eigenes Projekt
auf den µC schiebe, dann funktioniert das. (zum beispiel PortPin toggeln
lassen, UART Schnittstelle...)
Im CDC LUFA Projekt habe ich als Taktfrequenz 16000000 eingestellt,
Board TEENSY (meins ist ja kompatibel laut Amazon) und MCU at90usb162.
Startadresse teilweise auf 0x3800 oder 0x7000 eingestellt.
Fehler bringt er mir ja nicht, es läuft einfach nur nicht ;)
Gruß
Wenn ich vom LUFA den CDC Bootloader laden will, dann bringt er mir den
Fehler beim übertragen:
The contents of the HEX File does not fit in the selected device.
Kennt jemand diese Fehlermeldung??
Markus Schwarz schrieb:> Wenn ich vom LUFA den CDC Bootloader laden will, dann bringt er mir den> Fehler beim übertragen:>> The contents of the HEX File does not fit in the selected device.
Sagt im Prinzip ja schon alles aus: Die Software ist zu groß für den
Flash-Bereich. Entweder du optimierst sie oder du lässt über ein paar
#define-Anweisungen noch Teile raus. Hier weiß ich aber nicht, was die
CDC-Software bietet.
Aber ich kriege den Code auch nicht kleiner.... der bleibt sturr bei
seiner Größe!
Hat hier im Forum denn noch niemand die LUFA Code´s auf nen AT90USB162
bekommen?? Wenn ja... wie groß war bei euch den der Code sodass ihr
nicht diesen Fehler bekommen habt? Bzw. welchen Code habt ihr genommen?
Es läuft auch sowohl unter WIndows Vista nicht, wie auch unter Windows
XP.
Gruß
Ich glaub es nicht.... 23:20Uhr!!!! Jetzt kann ich ins Bettchen gehen...
Es funktioniert!!!! Und zwar könnte es an mehreren Ursachen gelegen
haben:
Die Fuse-Bit Einstellungen... da ich normallerweise über Flip mit dem
DFU Bootloader geladen habe, habe ich mir darüber keine Gedanken
gemacht. Aber jetzt habe ich gemerkt, das wenn ich vom Bootsektor die
Startadresse verändere, dass dann manchmal das Programm läuft, und
manchmal nicht :-D Und anscheinend stand diese Adresse die ganze Zeit
einfach nur falsch...
Und mein 2ter großer großer Fehler war, dass wenn ich den ISP Stecker
dran gesteckt gelassen habe, dann hat der Controller das Programm nicht
ausgeführt. Und ich kam nie dadrauf, den ISP Stecker abzuziehen :(:(
Naja, jetzt läuft es alles ganz ganz wunderbar... einige
Startschwierigkeiten, aber... puh... jetzt kann ich schlafen gehen :)
Danke dass ihr mir trotzdem immer geholfen habt, wo ihr konntet :)
Tolles Forum...
Gruß und gute Nacht (naja, ich glaube ich bastel jetzt doch noch ein
wenig weiter ;) )
Hallo,
ein paar kleine Fragen hätte ich noch.... Irgendwie weiß ich gerade
nicht ganz weiter..
Wenn ich das LUFA CDC Paket auf den Controller gepackt habe und den
Treiber ausgewählt habe, dann habe ich einen weiteren COM-Port im
Gerätemanager.
Was ist dann aber genau dieser COM-Port? Ist der at90usb dann nur als
BlackBox zusehen und der COM-Port ist Rxd/Txd von dem Controller?
Ich hoffe es ist verständlich... also dient der Controller dann nur als
interface und ich kann eine serielle Komponente an den PC anschließen
oder ist der "COM-Port" im Gerätemanager der at90usb? Sodass ich dann
den Port öffnen kann (mit zB Visual Basic) und dann in dem at90usb
PortPins setzen kann und sowas...
Oder sind die einzellnen Funktionen des at90usb ausser gefecht gesetzt
und ich habe einfach nur eine Verbindung von Rxd/txd Rts... nach USB
hin?
Dankeschön schonmal..
gruß,
markus
Markus Schwarz schrieb:> Was ist dann aber genau dieser COM-Port? Ist der at90usb dann nur als> BlackBox zusehen und der COM-Port ist Rxd/Txd von dem Controller?
Für deine PC-Applikationen sieht es wirklich so aus, als wäre ein neuer
COM-Port vorhanden, obwohl intern alles über USB läuft. Die Daten kommen
im USB-Teil des AT90USB an, was dann weiter damit geschieht, ist eine
Programmierungsfrage.
> Oder sind die einzellnen Funktionen des at90usb ausser gefecht gesetzt> und ich habe einfach nur eine Verbindung von Rxd/txd Rts... nach USB> hin?
Schaue dir den Code nochmal genau an. Du kannst die USB-Daten auslesen
und dann zum Beispiel an den UART weitergeben, du kannst aber auch alles
andere damit machen.