Forum: Mikrocontroller und Digitale Elektronik Software USB mit AVR


von Ulrich (Gast)


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)

von Philipp Burch (not logged in) (Gast)


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

von Ulrich (Gast)


Lesenswert?

Ich will aus kostengründen und bauteiegründen auf 5V bleiben....

von rkhb (Gast)


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

von Paul Baumann (Gast)


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

von Christian Rötzer (Gast)


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?

von Lupin (Gast)


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?

von Christian Rötzer (Gast)


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.

von Ulrich (Gast)


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

von Werner B. (Gast)


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

von Gironymo (Gast)


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

von Marcus Lok (Gast)


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

von Ulrich (Gast)


Lesenswert?

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

von Gironymo (Gast)


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)

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Rahul (Gast)


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

von Gironymo (Gast)


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

von Rahul (Gast)


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

von Ulrich (Gast)


Angehängte Dateien:

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

von Paul Baumann (Gast)


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

von Ulrich (Gast)


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......)

von Gironymo (Gast)


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.

von Rahul (Gast)


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.

von Gast (Gast)


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

von Gironymo (Gast)


Lesenswert?

danke, wieder was gelernt ;o)

von Paul Baumann (Gast)


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

von Paul Baumann (Gast)


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

von Ulrich (Gast)


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

von Paul Baumann (Gast)


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

von Ulrich (Gast)


Lesenswert?

jo soweit klar ;-)

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

von Ulrich (Gast)


Angehängte Dateien:

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

von Paul Baumann (Gast)


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

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.