Forum: Mikrocontroller und Digitale Elektronik AT90USB162 - USB und UART


von Markus Schwarz (Gast)


Lesenswert?

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

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

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

von Markus Schwarz (Gast)


Lesenswert?

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

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

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.

von Markus Schwarz (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch mein Plan ;)

von Bad U. (bad_urban)


Lesenswert?

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

von Markus Schwarz (Gast)


Lesenswert?

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

von Bad U. (bad_urban)


Lesenswert?

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

von Markus Schwarz (Gast)


Lesenswert?

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

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

Markus Schwarz schrieb:
> Aber wie kriege ich diese Bootloader auf meinen µC????

Per ISP. Den Original-Bootloader gibt es ansonsten auch bei ATMEL.

von Markus Schwarz (Gast)


Lesenswert?

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

von Bad U. (bad_urban)


Lesenswert?

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

von Markus Schwarz (Gast)


Lesenswert?

Ich finde bei Atmel immer nur das PDF Dokument mit dem Quellcode....:( 
Aber was mache ich damit?

von Markus Schwarz (Gast)


Lesenswert?

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ß

von Markus Schwarz (Gast)


Lesenswert?

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

von Markus Schwarz (Gast)


Lesenswert?

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

von Markus Schwarz (Gast)


Lesenswert?

Na ok.... wenn es hier keine weitere Hilfe mehr gibt :(:(

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

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.

von Markus Schwarz (Gast)


Lesenswert?

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ß

von Markus Schwarz (Gast)


Lesenswert?

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

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

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.

von Markus Schwarz (Gast)


Lesenswert?

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ß

von Markus Schwarz (Gast)


Lesenswert?

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 ;) )

von Markus Schwarz (Gast)


Lesenswert?

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

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

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.

von Markus Schwarz (Gast)


Lesenswert?

Oh, das ist ja alles recht verständlich.... vielen Dank Christoph.

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.