Forum: Mikrocontroller und Digitale Elektronik USB Kommunikation mit Atmega8


von TJ Rejay (Gast)


Lesenswert?

Hallo,

ich bin auf der Suche nach der Möglichkeit über USB sowohl Daten an 
einen Atmega8 zu senden als auch vom Atmega zu empfangen.

(Steuerdaten an den uC senden und ausgewertete Sensordaten am PC 
anzeigen)

Wer kann mir dazu ne schaltung liefern? ... zurzeit habe ich es so 
gelöst, dass ein 2. usb port verwendet wird, jedoch möchte ich dies 
vermeiden.

mfg Thomas

von Philipp F. (philippfister)


Lesenswert?

Hallo Thomas,
dein Problem verstehe ich jetzt nicht so ganz. Hast du einen USB <-> 
RS232 Wandler dazwischen oder wie? Dann ist das ja gar kein Problem. 
Hast doch jeweils eine sende Leitung und eine Empfangsleitung pro Seite. 
Die verbindest du über kreuz und gut!?

Gruß Philipp

von TJ Rejay (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Philipp!

Laut meinem Elektronik-Lehrer ist es möglich, die USB-Schnittstelle 
direkt (mittels Pulldown/Pullup weiß jetzt nicht genau was von beiden) 
mit dem RXD und INT0 des Atmega zu verbinden und ohne Pegelwandler zu 
betreiben.

Das selbe ist nun auch mit TXD und INT1, jedoch auf einem Separaten 
USB-Port.

Dies funktioniert auch schon aber ich will nicht den Platz verschwenden, 
wenn du verstehst, was ich meine. Mein Atmega übernimmt also das 
komplette USB-Management.

mfg Thomas

von avr (Gast)


Lesenswert?

Schau die mal das USB AVR-Lab an:

http://wiki.ullihome.de/index.php/Hauptseite

Das ist wohl die Beschaltung, die du suchst ;)

Hat wohl auch weniger Fehler als deine (z.B. AREF auf AVCC).

avr

von TJ Rejay (Gast)


Lesenswert?

trifft leider nicht genau das, was ich will.

mir geht es im grunde darum, mit einen Atmega8-16 AI um Ausgänge, die an 
H-Brücken liegen zu steuern und Eingänge (Drehzahlsensor, 
Inkrementalgeber usw) auswerten und die ausgewerteten Daten an den USB 
zu senden, wo er von meiner Software ausgewertet werden soll.

Ist es also möglich, irgendwie das "Handshake"-Prinzip hier zu 
realisieren oder kann ich nur eine Einwegkommunkikation herstellen?

von avr (Gast)


Lesenswert?

Dann schau mal in das Schaltbild:

http://shop.ullihome.de/catalog/userdownloads/10393_0de_0Produktinformation.pdf

(Seite 6)

Das ist die Beschaltung für die USB mit Widerständen und Dioden.

Was du mit deinen anderen Pins machst ist deine Sache!

avr

von Gaston (Gast)


Lesenswert?

Hier gibts auch noch was:
http://www.recursion.jp/avrcdc/cdc-io.html

von TJ Rejay (Gast)


Angehängte Dateien:

Lesenswert?

so wie ich das hier seh ists nichts anderes als 2 ZenerDioden, die den 
D+ und D- auf ein Spannungsmax von 3.3V begrenzen und 2 R's die den max 
Strom auf 20mA runterdrosseln, incl. pullup und pulldown widerstände.


ich überarbeite meine Schaltung nochmal, poste sie dann und sagt mir 
bitte dann, ob dies so stimmt.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

TJ Rejay schrieb:
> Hallo Philipp!
>
> Laut meinem Elektronik-Lehrer ist es möglich, die USB-Schnittstelle
> direkt (mittels Pulldown/Pullup weiß jetzt nicht genau was von beiden)
> mit dem RXD und INT0 des Atmega zu verbinden und ohne Pegelwandler zu
> betreiben.

USB in Software auf nem kleinen AVR und das fuer nen Anfaenger... toller 
Lehrer.

von Wayne M. (vibra)


Lesenswert?

moin moin

Du solltest dich mal mit den USB-Spezifikationen beschäftigen,wenn du 
das alles in Software realisieren möchtest würde ich mal bei obdev 
vorbeischauen.
http://www.obdev.at/products/vusb/index.html

mfg

von TJ Rejay (Gast)


Lesenswert?

@Michael: ich mach es als privates Projekt und hab den Lehrer gefragt, 
wie man es am Günstigsten und mit wenigstmöglich Platzverbrauch 
realisieren kann.

danke für den Link. ist genau das was ich gesucht habe :D

von Mike (Gast)


Lesenswert?

Hallo,

mir ist nicht ganz klar, wie der Atmega die USB Signale erzeugen soll. 
USB full speed wird mit 12MHz betrieben, wie kann man das durch Bit-Bang 
erzeugen? Oder geht nur Low-Speed ? Dann kann man aber nur max. 800 
Bytes/s übertragen, reicht das? Besser wäre auf jeden Fall, eine AVR mit 
USB-Schnittstelle zu nehmen, z.B. Atmega8U2 etc.

Gruss
Mike

von TJ Rejay (Gast)


Lesenswert?

also: es ist nur low-Speed USB möglich, da das USB signal virtuell auf 
dem Atmega erzeugt wird.

Die Anwendung ist wie gesagt, eine Ansteuerung von H-Brücken und ein 
"selbstgebauter Servo" ... also eigentlich nur eine einfache 
Motorsteuerung und eine Lenkung.

über Sensoren soll dann Drehzahl und "Lenkereinschlag" gemessen werden 
und über den USB zurückgegeben werden. um diese 4 zeitunkritischen 
informationen zu übertragen wird es wohl ausreichen :D

von TJ Rejay (Gast)


Lesenswert?

nach langem lesen steh ich immer noch am selben punkt. ich weiß zwar 
jetzt, dass das usb-protokoll implementiert wird, aber hab noch immer 
keine ahnung ob es überhaupt möglich ist, sowohl daten auf den atmega zu 
schreiben und zu lesen.


d.h. es sollte folgendes passieren:
Ausgangsdaten senden, Ausgänge setzen, eingänge lesen, eingangsdaten an 
pc, und wieder von vorne anfangen.

Ist dies überhaupt möglich mit implementiertem usb oder brauch ich einen 
seperaten contoller?

von F. R. (freiling)


Lesenswert?

Wieso willst du unbedingt die USB Schnittstelle in Software realisieren? 
nimm doch lieber die eingebaute Hardware-UART und dazu einen 
Pegelwandler und wickle die Kommunikation über RS232 ab. Klar, diese 
Lösung benötigt zwar mehr Platz, ich denke jedoch, dass du damit 
schneller an dein Ziel kommst. Denn zum Thema serielle Kommunikation 
gibts hier genügend Tutorials.
mfg

von TJ Rejay (Gast)


Lesenswert?

wie jetzt? du meinst statt dem usb rs232 verwenden?


--> ist nicht möglich, da mein laptop keine serielle schnittstelle hat.

von Justus S. (jussa)


Lesenswert?

TJ Rejay schrieb:
> wie jetzt? du meinst statt dem usb rs232 verwenden?

nö, zB einen FT232R...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nimm eine USB-RS232-Bridge, wie zum Beispiel den allseits beliebten 
FT232.

Der wird per USB an Deinen PC angeschlossen und stellt eine serielle 
Schnittstelle zur Verfügung, an die Du Deinen µC anschließen kannst. 
Wenn Du nicht ein fertiges USB-Seriell-Kabel verwendest, sondern direkt 
den FT232 mit Deinem µC verbindest, entfallen auch die sonst üblichen 
Pegelwandler, die die auf RS232-Schnittstellen üblichen Pegel (+/-12V) 
auf die vom µC vertragenen 0-5V anpassen.

von Joul (Gast)


Lesenswert?

Hallo,
USB in Software ist meiner Meinung nach Irrsinn...

Dennoch: auf der Homepage von V-USB steht doch, dass mehrere Endpunkte 
unterstützt werden. Du hast einen control Endpunkt, zwei interrupt/bulk 
IN und bis zu 7 interrupt/bulk OUT Endpunkte (wow, sind mehr als auf dem 
SAM7!! Ich sollte auf einen Mega8 umsteigen) zur Verfügung hast.
Damit könntest Du nun eine serielle Schnittstelle bauen (CDC) die 
benötigt(neben dem Control Endpunkt) einen interrupt IN, einen bulk OUT 
und bulk IN Endpunkt. Oder du könntest Deine Daten über die HID Klasse 
transportieren. Dazu benötigst Du(neben dem control Endpunkt) einen 
interrupt IN und interrupt OUT Endpunkt. Der Vorteil davon:
- keine Treiber nötig, da diese bereits im Betriebssystem integriert

Du schiebst Deine Daten einfach in das Sende FIFO des Endpunkts und 
fertig. Beim Empfangen der Daten das selbe nur umgekehrt

Bei Windows sind Funktionen zum Lesen und Schreiben auf und von einem 
HID in der hid.dll enthalten.

Die Jan Axelson hat schon viel dazu veröffentlicht (www.lvr.com).

Viel Erfolg...

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.