mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik USB Kommunikation mit Atmega8


Autor: TJ Rejay (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Philipp F. (philippfister)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: TJ Rejay (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: TJ Rejay (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann schau mal in das Schaltbild:

http://shop.ullihome.de/catalog/userdownloads/1039...

(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

Autor: Gaston (Gast)
Datum:

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

Autor: TJ Rejay (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wayne Monga (vibra)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: TJ Rejay (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: TJ Rejay (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: TJ Rejay (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: F. Reiling (freiling)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: TJ Rejay (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie jetzt? du meinst statt dem usb rs232 verwenden?


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

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TJ Rejay schrieb:
> wie jetzt? du meinst statt dem usb rs232 verwenden?

nö, zB einen FT232R...

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.