mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Software USB mit AVR


Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich will einem Atmega8 eine USB-Schnittstelle verpassen.
Aus "Geiz ist Geeiiill" gründen soll das natürlich die Softwarelößung
von "IGOR..." sein.
So nun läuft ja der Usb-Bus an sich ja auf 3,3V und mein AVR auf 5V.

Ich habe noch nirgends eine Lösung für dieses Problem gefunden(liegt
nicht daran das ich nicht danach gesucht habe;-).
Endweder mit mosfets so wie man es beim I2C Bus machen kann, oder
Z-Diode oder Einfach nur ein Widerstand rein?

Kann mir jeamdn weiterhelfen wie man das "Level shiftet" ? ;-)

Mfg
Ulrich

Grund der völligen Verwirrung:
http://www.harbaum.org/till/lcd2usb/
(Da geht der Pull-Up aufs gleiche Level wie VBus)

Autor: Philipp Burch (not logged in) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich würde dir empfehlen, den AVR gleich an 3.3V laufen zu lassen. Der
sollte da keine Probleme damit haben und du kannst ihn dann auch gleich
aus dem USB versorgen (Vorsicht mit 5V, der kann bis etwa 4.2V
runterfallen!). Ausser natürlich, du hast noch andere Bauteile, die
unbedingt 5V(-Pegel) benötigen...

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich will aus kostengründen und bauteiegründen auf 5V bleiben....

Autor: rkhb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich lasse alles mit 5V aus der USB-Versorgung laufen und siehe da: es
klappt, der PC ist nicht explodiert und der USB-Port wird nicht
abgeschaltet. Noch nicht einmal den Pullup-Widerstand musste ich
angleichen.

viele grüße
ralph

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe die Schaltung von Igor hier im Gang. Funktioniert in Verbindung
mit einem LT1780 als Wandler USB/RS232. Gespeist wird er
aus einer USB-Buchse und nimmt da bei 5 Volt knapp 40mA auf.

MfG Paul

Autor: Christian Rötzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Software-USB mit AVR hat immer irgend einen Hacken. Entweder, das
Dingens läuft mit 5V und schiebt daher auch 5V-Pegel an den Host, oder
der AVR wird hart an seiner Taktgrenze betrieben. Der Clock ist ja
festgelegt auf 12MHz. Es gibt diverse Schaltpläne, wo das Teil dann mit
3.5V betrieben wird. Wenn Du probeweise die Spannung weiter (ein wenig,
z.B. auf 3.3V) reduzierts, nippelt Dir das Teil ab.
Folgerung: Die Lösung ist nicht consumer-tauglich, da zu viele
unterschiedliche Geräte als Host denkbar sind, oder Serienstreuung
einen Strich durch die Rechnung macht.
Für den Privatgebrauch z.B. als Programmer oder so ist's vorzüglich
geeignet und funktioniert als einzeln erstelltes Gerät regelmäßig, bei
mir eben auch.
Der OP sucht aber wohl einen billigen Weg zum Serienprodukt, oder
Ulrich?

Autor: Lupin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Braucht USB tatsächlich 3.3V pegel? Oder hab ich was missverstanden?

Warum ist die spannung vom USB port dann 5 volt und nicht 3.3?

Autor: Christian Rötzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das musste ja kommen ;-)
Die USB-Versorgung ist ziemlich variabel und schlabberig, ich glaube
4.4V - irgendwas, um grosse Leitungslängen abdecken zu können. Die
Signalpegel sind aber sehr wohl auf 3.3V spezifiziert. Ein sauber
designtes USB-Gerät hat also irgendwo (und wenn's nur für die
Kommunikation ist) eine 3.3V Stabilisierung.

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich will nicht den Atmega8 bei 3,3V betreiben noch sontige basteleien
machen. Ich brauche nur eine möglichkeit die Pegelsoweit anzupassen das
ich sicherstellen kann, das mir nix auf dem Mainboard beim einstecken
abraucht...kann doch nicht sein das es da nix gibt?

Ich habe von "Analoger Elektroik" wenig Ahnung bzw. genauer gesagt
nicht viel Erfahrung.
Rein intuitiv stelle ich mir folgende Lösungselemente vor:
Zwischen GND und D+,D- Eine Z-Diode damit die Spannung nicht höher als
3,3V kommt.

Ich habe bisher noch recht wenig im Code von den Software-USB Lösungen
gelesen. Vielleicht ist es möglich für jede Datenleitung einen Ein und
Ausgang zu verwenden. Für die Eingänge müsste ich dann weiter nichts
mehr machen und für die Ausgänge könnte man Einfach noch einen
Widerstand in Reihe schalten.
Der Widerstand würde die Spannung begrenzen und die Z-Diode dann die
Spannung.

Oder soll ich den Levelshifter per Mosfet machen? Genau so wie sie in
der Elektor mal vor ein paar Monaten gepostet wurde?


Bezüglich kosten:
Wenn möglich würde ich es schon so günstig wie möglich lösen da es
eventuel eine Platine für andere Private User geben soll. Und die
freuen sich ja auch wenn das alles günstiger wird. Bedingung ist
natürlich immer das es funktioniert....

Mfg
Ulrich

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eventuell geht ja sowas.

Den Ausgangspin auf LOW bzw. internen PULL-UP aus.
Den Ausgang über einen 3.3V pull-UP durch umschalten des DDR
realisieren.

=> DDR = 0 -> Hochohmig -> 3.3V über PULL-UP
   DDR = 1 -> Ausgang Low

Autor: Gironymo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits,

leider kenn ich mich damit nicht so gut aus und deshalb ist mein Post
auch eher als Frage zu verstehen ;o)

Kann man für diese Zwecke nicht einen Optokoppler verwenden?

Was ich weiß, sind die ca. 5V wegen der Kabellänge.

mfG Markus

Autor: Marcus Lok (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist zwar schon etwas her, daß ich mich umgesehen habe, aber das
Problem ist wohl, zummindest für die Datenraten von USB 2.0 ausreichend
schnelle (und dabei erschwingliche!) Optokoppler zu finden ...

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenns nicht >>>>>>>bidirektional<<<<<<< wäre, dann wäre es auch
einfacher.....

Autor: Gironymo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achja, da war ja noch was ... sorry, an das hab ich nicht gedacht.

Was USB 2.0 angeht, das ist sowieso ein Problem, oder? Wenn das per
Software gelöst werden soll, muss der uC erst mal die Daten so schnell
herbringen. USB 2.0 hat eine Theoretische Geschwindigkeit von
480Mbit/s, was ich weiß. Kommt da ein uC mit?

Für USB 1.1 sollte es kein Problem sein, denke ich. Das sind nur
12Mbit/s.

(Bin mir nicht ganz sicher ob das stimmt ;o)

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

Bewertung
0 lesenswert
nicht lesenswert
Hier sind es sogar "nur" 1.5 MBit/sec, da diese reine Software-Lösung
nur "low speed" USB implementiert. 12 MBit/sec lassen sich mit einem
AVR nicht per Software verarbeiten.

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Was USB 2.0 angeht, das ist sowieso ein Problem, oder? Wenn das per
Software gelöst werden soll, muss der uC erst mal die Daten so schnell
herbringen. USB 2.0 hat eine Theoretische Geschwindigkeit von
480Mbit/s, was ich weiß. Kommt da ein uC mit?

Klar, aber nur einer, der darauf ausgelegt ist...Ein AVR wird da schon
ganz schön ins Schwitzen kommen...

Wenn man Angst hat, irgendwas auf dem Mainboard zu zerschiessen, sollte
man überlegen, ob man nicht einfach einen USB-HUB zwischen Zielschaltung
und PC zu hängen.
Das erfordert aber, dass die Zielschaltung sich schon am HUB anmelden
kann...
Ansonsten sollten die Bausteine auf dem Mainboard sich um Überspannung
(also Spannungen >3,3V) mit Hilfe von (Klemm-)Dioden kümmern.
Weiterhin ist der USB auch ein Bus auf Basis differentieller
Signalübertragung;  es interessiert eigentlich nur welche Leitung
positiver ist...

Autor: Gironymo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>es interessiert eigentlich nur welche Leitung positiver ist...

kannst das vielleicht ein wenig verdeutlichen? ich find das thema sehr
interessant, leider kenn ich mich nicht wirklich gut aus mit
bussystemen und dgl

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
differentielle Schnittstellen (RS422, RS485 oder auch CAN-Transceiver)
arbeiten nach dem Prinzip, dass das Signal der einen Leitung vom Signal
der andere subtrahiert wird. So kann man Störungen eleminieren, die auf
beide Leitungen gleichzeitig wirken.
Wenn jetzt bspw. die Spannung zwischen USB+ und USB- > 0 ist liegt eine
logische 1 vor. Ist sie <0 liegt eine logische 0 vor.
Im Regelfall hat man auch noch eine Hysterese zwischen beiden
Zuständen. Bei RS485 sind das etwa 0,2V.
Die USB-Specs konnte man mal kostenlos herunterladen...

Autor: Ulrich (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So nach dem (entgegen meiner Erwartungen) keinerlei Schaltungsvorschläge
kamen, habe ich mal kurz selbst meine Überlegungen zusammengekrizelt.

Würde das so gehen?

An den Stellen "Hier muss noch was rein" denke ich an einen
Widerstand mit eventuell ca. 85 Ohm.

Oder ich probiere mal eine mosfetLösung falls dies besser sein
sollte...






Noch eine kleine aber in meinen augen wichtige Ergänzung bezüglich
differenziellen Übertragungen:
Die 2 Leitungen auf denen die differenzielle Signale Übertragen werden
sind eigentlich immer miteinander verdrillt. Der Sinn ist, dass
mögliche "Störungen" welche auf die Leitungen einwirken, beide
leitungen so gleich wie möglich erwischt. So werden die Pegel auf
beiden Leitungen gleich verändert, aber die Differenz beider Pegel
bleibt noch gleich!!! Das ist der Trick.

Wenn man das nun nicht weiß kann folgendes vorkommen:(Selbst
gesehen...)
Man macht Netzwerkstecker und denkt sich, ist doch völlig wurscht die
Belegung...ist sie aber nicht weil es auch hier eine differenzielle
Übertragung gibt. Deswegen müssen immer 2 >>>miteinander<<<< verdrillte
Leitungen ein Signal übertragen....

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Ulrich
So kann das gehen. Ich habe KEINE Z-Dioden drin und "bei hier muß noch
was rein" 100 Ohm drin. Das geht ohne Mühe.

Mfg Paul

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Paul:
Hast du das mal an ein Oszi angeschlossen? Oder sonst wie gemessen?

Mich würden die Ströme und Spannungen interessieren(natürlich nur wenn
verfügbar......)

Autor: Gironymo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dass ein Netzwerkkabel, das nach der "ist-doch-wurscht-Methode" nicht
funktioniert, hab ich auch schon bemerkt ;o)

Allerdings hat das mit den verdrillten Leitungen beim LAN noch einen
anderen Sinn (aus elektrotechnischer Sicht).
Durch das Verdrillen der Leitungen (immer + und GND) wirkt die
GND-Leitung auch als Schirm, da eventuelle Störungen sofort auf Masse
abgeleitet werden. Was ich weiß, kommt es auf die Länge an, die
benötigt wird, um eine komplette Verdrillung durchzuführen. Je
"besser" das Kabel (CAT5, CAT6) desto enger ist die Verdrillung (hat
irgendwas mit der Frequenz zu tun.

Ich bin mir nicht ganz sicher ob das so richtig ist (ist doch schon ein
Weilchen her, dass ich das gelernt hab), aber ich glaube mich daran zu
erinnern. Sorry, elektronik ist auch nicht so direkt mein Fachgebiet,
aber doch sehr interessant ;o) also verbessert mich bitte, wenn ich was
falsches schreib.

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Allerdings hat das mit den verdrillten Leitungen beim LAN noch einen
>anderen Sinn (aus elektrotechnischer Sicht).
>Durch das Verdrillen der Leitungen (immer + und GND) wirkt die
>GND-Leitung auch als Schirm, da eventuelle Störungen sofort auf Masse
>abgeleitet werden. Was ich weiß, kommt es auf die Länge an, die
>benötigt wird, um eine komplette Verdrillung durchzuführen. Je
>"besser" das Kabel (CAT5, CAT6) desto enger ist die Verdrillung
(hat
>irgendwas mit der Frequenz zu tun.

Nö, danaben!
Die Leitungen von Netzwerkstrippen sind verdrillt, um möglichst wenig
Angriffsfläche für Störungen zu bieten.
Es handelt sich bei den Leitungen auch nicht (ausser bei
Power-over-LAN) um + und GND, sondern um differentielle
Signalleitungen.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

es gibt auch noch eine andere SW USB-Implementierung für den AVR:
http://www.obdev.at/products/avrusb/index.html

Auf der Homepage sind einige Beispielprojekte mit den zugehörigen
Schaltplänen enthalten (unter 'Reference Implementations'), leider
gibt es hier auch keine einheitliche Anbindung an den USB. Der
offizielle Weg ist, einen AVR bei 3,3V und 12MHz zu betreiben, was
ausserhalb der AVR-Spec liegt (abhängig vom eingesetzten AVR).

Ich glaube, die einzig saubere Lösung wäre in diesem Fall ein
Levelshifter-IC zwischen AVR und USB zu verbauen....

Autor: Gironymo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke, wieder was gelernt ;o)

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Ulrich
Ich habe nur gemessen, ob an den USB-Buchsen 5 Volt anliegen. Das war
so. Die Stromaufnahme der Schaltung mit dem RS2323 Wandler mit dran
beträgt 110 mA. Das habe ich sowohl gemessen als auch im Gerätemanager
gesehen. Dort kriege ich auch angezeigt, was ein USB-
Gerät am Anschluß für einen Strom aufnimmt. Er stimmt mit meiner
Messung überein. An den Datenleitungen stehen 3,2 Volt gegen Masse.
(Wenn ich nicht auf das Gerät zugreife´).
Bei Zugriff ist die Amplitude dort 3 Volt (Ziemlich windschiefe
Rechteckimpulse.). Aber es funftioniert.

MfG Paul

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Ulrich
Ach so, ich hábe vergessen, Dir zu sagen, daß die Schaltung als
USB/RS2323 Wandler arbeitet mit einem LT1780 als Pegelwandler
und ATMEGA8 als Professor.

Paul

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Paul
THX für deine Mühen

Ich habe mich heute mal mit dem Oszi zwischen Host und USB-Stick
gehängt. Entgegen meiner Erwartungen fand ich dort keine schöne
Rechteksignale welche brav zwischen GND und 3,3V schwanken sondern
musste das Oszi auf 10ns 50mV/Division stellen damit ich etwas welliges
überhaupt zu gesicht bekommen habe. Die sichtbare Amplitude war trotzdem
noch recht klein. Also wenn das bei allen Geräten so ist,dann kriege ich
das nicht so fein hin.
Ich teste morgen aber noch weitere USB-Hubs mit unerschiedlichen
Endgeräten um zu sehen ob das wiklrich so ein "minisignal" ist oder
ob sich dr Hersteller des USB-Stick sich nicht so an die
Spezifikationen hält. Wenn ich das Triggerlevel auf ca. 2V eingestellt
habe,hat er kein einziges mal getriggert........ grbel

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin kein Experte für USB. Aber der Clou ist dabei, daß der
Datenstrom aus dem Differenzsignal der beiden DATA -Leitungen gewonnen
wird.
Die Amplitude habe ich nicht gegen Masse sondern zwischen den beiden
DATA Leitungen gemessen. Entschuldige das Mist-verständnis.
:-)
MfG Paul

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jo soweit klar ;-)

Aber ich glaube die hersteller und die geschwindigkeiten reizen wohl
die Spzifikationen bis zum Rand aus ;-)....

Autor: Ulrich (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So nach dem ich nochmal das Oszi drangehängt habe, habe ich bemerkt das
es wohl gestern ein Problem miut der Masseverbindung gab.
Das angehängte Bild hat mir bewiesen das wenigstens "gescheite Pegel"
vorhanden sind.

Die Idee mit der 303V Z-Diode finde ich inzwischen doof, da sie dafür
sorgen würde das eventuell der Pin vom Atmega8 kaputteht.....

Interessant wäre noch wieviel Spannung an den 2 in Reihe geschaltenen
Widerständen mit oft 68 oder 100
Ohm abfallen. Ich traue der Sache noch nicht so ganz das das dem
USB-Host nichts ausmacht wenn die Leitung auf 5V gezogen wird....

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Ulrich
Es passiert nichts. Ich habe hier sowohl diesen Wandler (siehe oben)
als auch noch einen Infrarotempfänger, (nach Igorplug gebaut),dessen
Schaltung von USB-Schnittstelle genau so aussieht.

Ich rate Dir nichts, was Deine Kiste kaputt machen würde.
Wie sagte schon Pittiplatsch, der liebe: Kannstè glauben. :-))
MfG Paul

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.