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