Forum: Mikrocontroller und Digitale Elektronik AT90USB162 - USB-Verbindung


von Ralf (Gast)


Lesenswert?

Hallo zusammen.

Ich habe mir einen AT90USB162 gekauft, da ich mich an 
USB-Verbindung/-Datenaustausch herantasten möchte.

Nach dem Lesen des Datenblatts des Chips möchte ich ein winziges 
Programm schreiben, welches USB-Daten von einem PC empfängt und diese 
wieder an den PC zurückschickt.

Würde folgender Code hierfür funktionieren?
1
#include <avr/io.h>
2
3
4
int main(void)
5
{
6
    USBCON  |= (1<<USBE);        // enable USB controller
7
  UPOE  |= (1<<UPWE1);        // direct drive with USB
8
  UDPADDH |= (1<<DPACC);        // enable DPRAM direct access
9
  
10
    while (1) 
11
    {
12
    unsigned char read = UEDATX;  // read the received data from data register..
13
    UEDATX = read;            // ...and send it back to the host PC
14
    }
15
}
Ich habe mit USB und AVR zusammen noch nichts gemacht und entsprechend 
wenig Wissen darüber.
Im Netz findet man nicht wirklich brauchbare Code-Examples für einen 
einfachsten Datenaustausch zwischen AVR und PC.

Könntet ihr mir helfen?

Vielen Dank und Gruß

von avr (Gast)


Lesenswert?

Bei USB gibt es keinen einfachen Datenaustausch. Grundsätzlich muss man 
sich an die Regeln halten, sonst wird das USB Gerät vom PC abgelehnt. 
Das heißt, bei Aufforderung die entsprechenden deskriptoren senden. In 
diesen wird auch festgelegt, wie das USB Gerät kommuniziert (u.a. USB 
Klasse). Bevor du eine virtuelle serielle Schiedsstelle bekommst, musst 
du erst knapp 100 Bytes mit dem pc austauschen.

Kurz gesagt, USB ist eine verhältnismäßig aufwändige Schnittstelle. Ich 
würde dir empfehlen, ein fertiges USB Beispiel zu nehmen und darauf 
aufzubauen. Als Tutorial, um einen Überblick zu bekommen, ist 
beispielsweise usb in a nutshell sehr geeignet. Es gibt auch die 
offizielle Spezifikation, die umfasst aber gleich fast 1000 Seiten.

von Ralf (Gast)


Lesenswert?

>Kurz gesagt, USB ist eine verhältnismäßig aufwändige Schnittstelle.

Das habe ich vermutet...
Leider findet man zum oben genannten Controller so gut wie nichts im 
Netz im Bezug auf "Beispiel-Code".
Kurz gesagt: Ich komme überhaupt nicht weiter.

von Thomas W. (diddl)


Lesenswert?

Warum hast dir dir den alten Controller geholt und nicht die neueren U2 
oder u4?


Für USB musst du einen USB Stack implemnetieren, ist ziemlich komplex.

Deswegen empfehle ich die Verwendung von LUFA:
http://www.fourwalledcubicle.com/LUFA.php

Damit gehen die gängigen USB Implementationen kinderleicht.
Es gibt für fast alles fertigen Beispielcode.

von Thomas W. (diddl)


Lesenswert?

USB Daten vom PC empfängt und zurück sendet??

Dann musst du am PC ebenfalls den USB port anprogrammieren.


Viel einfacher geht es, wenn du Standard USB Schnittstellen verwendest:

+ USB serial interface (COMx)
+ USB Keyboard
+ USB Mouse
+ USB Midi
+ USB gemecontroller
:       :

von Jim M. (turboj)


Lesenswert?

Ralf schrieb:
> Leider findet man zum oben genannten Controller so gut wie nichts im
> Netz im Bezug auf "Beispiel-Code".

Bei mir steckt der AT90USB162 in einem USB-nach Joystick Wandler Projekt 
(für Sidewinder 3D Pro), und den Code gabs auf IIRC Github. War aber 
zumindest teilweise in Assembler, aber IMHO nur der 
Digital-over-Joystick-Port Teil.

Board ist ein altes Teensy 1.0 Version, die neueren haben andere µC 
drauf.

von hp-freund (Gast)


Lesenswert?

http://www.atmel.com/devices/AT90USB162.aspx?tab=documents

AVR272 hat doch alles was man braucht, oder?

von Simon B. (nomis)


Lesenswert?

Ich unterstütze die Empfehlung der LUFA-Library.

Mit der habe ich schon viele Dinge erfolgreich implementiert, häufig 
übrigens (wenn es um die Steuerung von etwas geht) über das 
CDC-Protokoll ("virtuelle serielle Schnittstelle")

Grüße,
        Simon

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.