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)
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...
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
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
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?
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?
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.
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
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
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
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 ...
Wenns nicht >>>>>>>bidirektional<<<<<<< wäre, dann wäre es auch einfacher.....
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)
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.
>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...
>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
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...
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....
@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
@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......)
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.
>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.
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....
@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
@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
@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
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
jo soweit klar ;-) Aber ich glaube die hersteller und die geschwindigkeiten reizen wohl die Spzifikationen bis zum Rand aus ;-)....
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....
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.