Forum: Mikrocontroller und Digitale Elektronik Levelshifter


von Stefan (Gast)


Lesenswert?

Hallo zusammen,

ich möchte zwei Mikrocontroller über Serial (UART) miteinander
kommunizieren lassen. Da Diese unterschiedliche Spannungen (5V und 3.3V) 
verwenden, möchte ich einen Levelshifter wie diesen: 
http://www.adafruit.com/product/757 einsetzen.

Ich wurde durch folgende Schaltung, welche bei SparkFun in einem 
Tutorial gezeigt wird nun etwas verwirrt. Und zwar wird dort zusätzlich 
der 3,3 V Ausgang vom Arduino auf den LV Eingang des LevelShifters 
gelegt. Welchen Hintergrund hat dies?

https://dlnmh9ip6v2uc.cloudfront.net/assets/6/3/6/e/d/5266e578757b7fdf4c8b4570.png

Vielen Dank und viele Grüße

Stefan

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Stefan schrieb:
> Da Diese unterschiedliche Spannungen (5V und 3.3V) verwenden, möchte ich
> einen Levelshifter wie diesen: http://www.adafruit.com/product/757
> einsetzen.
Zitat aus der dort verlinkten Appnote:
1
AN10441
2
Level shifting techniques in I2C-bus design
Ein I2C Bus ist aber kein RS232-Bus.

> Und zwar wird dort zusätzlich der 3,3 V Ausgang vom Arduino auf den LV
> Eingang des LevelShifters gelegt. Welchen Hintergrund hat dies
Naja, LV wird wohl Low Voltage heißen und HV High Voltage. In der 
velinkten AppNote AN10441 von NXP ist sogar die Funktion erklärt...

Aber wie gesagt: für eine RS232-Verbindung brauchst du keinen 
bidirektionalen Pegelwandler. Von 5V-Ausgang nahc 3V3 Eingang reicht 
ein Spannungsteiler, und den 3V3-Ausgang kannst du direkt an den 
5V-eingang anschließen. Zwei Bauteile und fertig...

Siehe auch Pegelwandler

: Bearbeitet durch Moderator
von Bülent C. (mirki)


Lesenswert?

Lothar Miller schrieb:
> Ein I2C Bus ist aber kein RS232-Bus.

..und RS232 ist kein Bus

Es stimmt, ein Spannungsteiler reicht vollkommen aus für die UART 
Beschaltung.

von Ulrich F. (Gast)


Lesenswert?

Stefan schrieb:
> Ich wurde durch folgende Schaltung, welche bei SparkFun in einem
> Tutorial gezeigt wird nun etwas verwirrt. Und zwar wird dort zusätzlich
> der 3,3 V Ausgang vom Arduino auf den LV Eingang des LevelShifters
> gelegt. Welchen Hintergrund hat dies?
>
>

Sowohl LevelShifter, als auch die 3,3V Schaltung brauchen 
Strom/Suppe/Futter, und der Arduino kann es liefern.

Lothar Miller schrieb:
> Von 5V-Ausgang nahc 3V3 Eingang reicht
> ein Spannungsteiler, und den 3V3-Ausgang kannst du direkt an den
> 5V-eingang anschließen. Zwei Bauteile und fertig...

Wenn die Baudrate nicht zu hoch ist und die Kabel nicht zu lang, dann 
geht das.

von Stefan (Gast)


Lesenswert?

Danke für die Eure schnellen Antworten. An Spannungsteiler hat ich auch 
gedacht aber durch Recherchen wurde öfters erwähnt, dass wie von Ulrich 
erwähnt dann die Geschwindigkeit vielleicht leidet... Da ich keine 
Erfahrung habe wollte ich halt sicher gehen. Aber wenn Ihr sagt, dass 
passt. Es ist mir halt wichtig, dass das Ganze dann zuverlässig und 
nicht zu träge läuft.

Gruß

Stefan

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ulrich F. schrieb:
> Wenn die Baudrate nicht zu hoch ist und die Kabel nicht zu lang, dann
> geht das.
Ja, aber wenn die Kabel länger werden, dann wäre es auch sinnvoll, 
"übliche" Pegel und Pegelwandler zu verwenden...

Bülent C. schrieb:
> ..und RS232 ist kein Bus
Man kann auch Löcher in Pfennige bohren... ;-)
BTW: PCIe wird auch erstaunlich oft als Bus bezeichnet...

Stefan schrieb:
> An Spannungsteiler hat ich auch gedacht aber durch Recherchen wurde
> öfters erwähnt, dass wie von Ulrich erwähnt dann die Geschwindigkeit
> vielleicht leidet...
Welche Geschwindigkeit brauchst oder willst du denn überhaupt?

> Es ist mir halt wichtig, dass das Ganze dann zuverlässig und nicht zu
> träge läuft.
Bitte Zahlen! Definiere "träge". Und welches "Ganze" denn?

: Bearbeitet durch Moderator
von Hans-Georg L. (h-g-l)


Lesenswert?

Lothar Miller schrieb:
> Bülent C. schrieb:
>> ..und RS232 ist kein Bus
> Man kann auch Löcher in Pfennige bohren... ;-)
> BTW: PCIe wird auch erstaunlich oft als Bus bezeichnet...
>

Und USB auch ;)

von Stefan (Gast)


Lesenswert?

Ulrich F. schrieb:
> Sowohl LevelShifter, als auch die 3,3V Schaltung brauchen
> Strom/Suppe/Futter, und der Arduino kann es liefern.

Aber die 3,3 V Schaltung rechts hat dort einen Ausgang....

von Cyblord -. (cyblord)


Lesenswert?

Hans-Georg Lehnard schrieb:
> Lothar Miller schrieb:
>> Bülent C. schrieb:
>>> ..und RS232 ist kein Bus
>> Man kann auch Löcher in Pfennige bohren... ;-)
>> BTW: PCIe wird auch erstaunlich oft als Bus bezeichnet...
>>
>
> Und USB auch ;)

USB ist ein Bus. PCI ist ein Bus. PCIe ist KEIN Bus. Ist doch ganz 
einfach gelle?

von Bülent C. (mirki)


Lesenswert?

TX 3V an RX 5V kannst du problemlos direkt anschließen.
TX 5V an RX 3V würde ich einen kleinen Pegelwandler bauen, wenn Du hohe 
Geschwindigkeiten fahren willst. Im Grunde genommen reicht eigentlich 
nur ein BSS138 und zwei 10k Widerstände (wobei Du auf der Eingangsseite 
den einen widerstand weglassen könntest für Deine UART Anwendung) 
vollkommen aus.

von Stefan (Gast)


Lesenswert?

Bülent C. schrieb:
> TX 3V an RX 5V kannst du problemlos direkt anschließen.
> TX 5V an RX 3V würde ich einen kleinen Pegelwandler bauen, wenn Du hohe
> Geschwindigkeiten fahren willst. Im Grunde genommen reicht eigentlich
> nur ein BSS138 und zwei 10k Widerstände (wobei Du auf der Eingangsseite
> den einen widerstand weglassen könntest für Deine UART Anwendung)
> vollkommen aus.

Alles klar. Dann werde ich es mal mit dem BSS138 versuchen.
Vielen Dank an Alle!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Cyblord ---- schrieb:
> USB ist ein Bus.
Ist er das? Mit welcher Topologie? Punkt-zu-Punkt, wie der PCIe?

Und PCIe: https://www.google.de/search?q="pci+express+bus";
Sogar die pcisig verstolpert sich da ab&an. Z.B. gleich da:
https://www.pcisig.com/specifications/pciexpress/technical_library/pciexpress_whitepaper.pdf

Stefan schrieb:
> Alles klar. Dann werde ich es mal mit dem BSS138 versuchen.
Du solltest wenigstens versuchen, dir selbst die gestellten Frage zur 
Baudrate und Leitungslänge beantworten. Wir sind es schon gewohnt, 
ohne oder mit unzureichenden Informationen zu arbeiten...

: Bearbeitet durch Moderator
von Hans-Georg L. (h-g-l)


Lesenswert?

Cyblord ---- schrieb:
> Hans-Georg Lehnard schrieb:
>> Lothar Miller schrieb:
>>> Bülent C. schrieb:
>>>> ..und RS232 ist kein Bus
>>> Man kann auch Löcher in Pfennige bohren... ;-)
>>> BTW: PCIe wird auch erstaunlich oft als Bus bezeichnet...
>>>
>>
>> Und USB auch ;)
>
> USB ist ein Bus.
> einfach gelle?

Für den Host Controller mag das ja irgendwie zutreffen aber für ein 
Device nicht ...

von Guido L. (guidol1970)


Lesenswert?

Stefan schrieb:
>  Da Diese unterschiedliche Spannungen (5V und 3.3V)
> verwenden, möchte ich einen Levelshifter wie diesen:
> http://www.adafruit.com/product/757 einsetzen.

sowas gibts auch hier:
http://www.watterott.com/de/Level-Shifter
Pegelwandler Baustein mit 4 Ein- / Ausgängen.

Mit diesem Wandler kann man die Pegel von zwei unterschiedlichen 
Signalebenen mit einander verbinden. z.B. 5V System mit 3,3V.

Der Wandler arbeitet aber auch mit 1,8V und/oder 2,8V Pegeln
und kann für I2C verwendet werden.

von Thomas DG5MPQ (Gast)


Lesenswert?

Es ist die Frage wie kritisch ist die Verbindung ????
Wie weit sind die beiden Controller auseinander bzw. wie lang ist die 
Leitung. Wie groß ist das Störfeld in der Nähe der Prozessoren ??


Alles unter 10cm..    von 5V auf 3V3   --> einfach Spannungsteiler 1K zu 
1K8

----
Und umgekehrt   die 3V3 übersteigen die 2V2 Schwellspannung des 5V 
Controller . Das sollte für den 5 V Controller als High reichen.

Quick and dirty ...   2 Widerstände.......

Gruß Thomas

von Stefan (Gast)


Lesenswert?

Thomas DG5MPQ schrieb:
> Es ist die Frage wie kritisch ist die Verbindung ????
> Wie weit sind die beiden Controller auseinander bzw. wie lang ist die
> Leitung. Wie groß ist das Störfeld in der Nähe der Prozessoren ??
>
> Alles unter 10cm..    von 5V auf 3V3   --> einfach Spannungsteiler 1K zu
> 1K8
>
> ----
> Und umgekehrt   die 3V3 übersteigen die 2V2 Schwellspannung des 5V
> Controller . Das sollte für den 5 V Controller als High reichen.
>
> Quick and dirty ...   2 Widerstände.......
>
> Gruß Thomas

Hi Thomas,

also die Verbindung sollte so stabil wie möglich laufen. Die beiden
Controller werden direkt nebeneinander liegen.

Gruß
Stefan

von Cyblord -. (cyblord)


Lesenswert?

Stefan schrieb:
> also die Verbindung sollte so stabil wie möglich laufen.

Tolle Aussage. Meinst du irgendjemand will dass seine Verbindung 
instabil läuft?

Warum nimmst du dann nicht einfach einen PASSENDEN Levelshifter (mit 2x 
unidirektional, gegenläufig), gibts zuhauf und schon bist fertig? Die 
Spannungsteilerlösung ist immer irgendwie Pfusch.

: Bearbeitet durch User
von Stefan (Gast)


Lesenswert?

Guido Lehwalder schrieb:
> Stefan schrieb:
>>  Da Diese unterschiedliche Spannungen (5V und 3.3V)
>> verwenden, möchte ich einen Levelshifter wie diesen:
>> http://www.adafruit.com/product/757 einsetzen.
>
> sowas gibts auch hier:
> http://www.watterott.com/de/Level-Shifter
> Pegelwandler Baustein mit 4 Ein- / Ausgängen.
>
> Mit diesem Wandler kann man die Pegel von zwei unterschiedlichen
> Signalebenen mit einander verbinden. z.B. 5V System mit 3,3V.
>
> Der Wandler arbeitet aber auch mit 1,8V und/oder 2,8V Pegeln
> und kann für I2C verwendet werden.

Hallo Guido,

danke für den Hinweis. Die scheinen ja auch einen BSS138 zu nutzen.
Der Vorteil wäre, dass ich alles auf einer Platine habe und fertig.
2 EUR kann ich verschmerzen. Muss mal schauen ob ich sowas bei Conrad 
finde. Denn den habe ich in der Nähe und kann vorbeifahren.

Gruß

Stefan

von Stefan (Gast)


Lesenswert?

Cyblord ---- schrieb:
> Stefan schrieb:
>> also die Verbindung sollte so stabil wie möglich laufen.
>
> Tolle Aussage. Meinst du irgendjemand will dass seine Verbindung
> instabil läuft?
>
> Warum nimmst du dann nicht einfach einen PASSENDEN Levelshifter (mit 2x
> unidirektional, gegenläufig), gibts zuhauf und schon bist fertig? Die
> Spannungsteilerlösung ist immer irgendwie Pfusch.

Das habe ich erwähnt weil Thomas fragte, wie kritisch die Verbindung 
ist.
Und es wäre halt schade wenn das ganze nicht richtig rund läuft.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Stefan schrieb:
> Das habe ich erwähnt weil Thomas fragte, wie kritisch die Verbindung
> ist.
Und du hast ihm keine Antwort gegeben...
Wir hören immer nur wie Stefan schrieb:
> also die Verbindung sollte so stabil wie möglich laufen.
Aber es wird nicht der Hauch eines Wortes über die Anwendung verloren:
nötige Baudrate?
maximale Leitungslänge?

> also die Verbindung sollte so stabil wie möglich laufen.
Dann musst du eben maximalen Aufwand treiben. Und am besten noch 
glavanisch trennen. Damit läuft es dann sicher "so stabil wie möglich", 
wenn das die einzige Forderung ist...

Cyblord ---- schrieb:
> Die Spannungsteilerlösung ist immer irgendwie Pfusch.
Nun, sie wandelt die Pegel definiert von 5V auf 3,3V. Tadellos. Und 
jetzt muss einfach noch die Frage nach der nötigen Geschwindigkeit 
geklärt werden...

von Cyblord -. (cyblord)


Lesenswert?

Lothar Miller schrieb:

>
> Cyblord ---- schrieb:
>> Die Spannungsteilerlösung ist immer irgendwie Pfusch.
> Nun, sie wandelt die Pegel definiert von 5V auf 3,3V. Tadellos.

WENN der Eingang hochohmig ist. Wenn da bisserl Last drauf kommt (z.B. 
PullDown irgendwo) dann nicht mehr.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Cyblord ---- schrieb:
> WENN der Eingang hochohmig ist. Wenn da bisserl Last drauf kommt (z.B.
> PullDown irgendwo) dann nicht mehr.
Ja, aber auch das wird mangels Auskunft nicht geklärt werden. Und wo 
sollte denn die "Last" herkommen, wenn zwei uC Ausgang->Eingang 
miteinander verbunden werden?

von Bülent C. (mirki)


Lesenswert?

Warum eientlich immer diese Doktorarbeit's ähnlichen Auswuchungen der 
Lösungsfindungen.
Spannungsteiler ja, machbar..aber unter bestimmten Umständen instabil
Ein MOSFET und ein Widerstand auf 3V Seite hat nur einen Lötpunkt mehr 
auf der Platine, und eliminiert die Nachteile des Spannungsteilers.

von Stefan (Gast)


Lesenswert?

> Cyblord ---- schrieb:
>> Die Spannungsteilerlösung ist immer irgendwie Pfusch.
> Nun, sie wandelt die Pegel definiert von 5V auf 3,3V. Tadellos. Und
> jetzt muss einfach noch die Frage nach der nötigen Geschwindigkeit
> geklärt werden...

Wenn ich mich mit Baudraten auskennen würde, hätte ich schon eine 
genannt. Ich kann euch meinen Anwendungsfall beschreiben. Ich habe einen 
electric imp und einen Arduino pro mini. Aus diesen Beiden möchte ich 
mir quasi einen "Smart Home Controller bauen". Also hänge ich an den 
Arduino mini noch ein RF Modul, über welches ich dann andere Controller 
ansteuere.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Stefan schrieb:
> ein RF Modul
Welches denn? Sag doch einfach Alles, oder wenigstens möglichst 
Viel...

: Bearbeitet durch Moderator
von Stefan (Gast)


Lesenswert?

Stefan schrieb:
>> Cyblord ---- schrieb:
>>> Die Spannungsteilerlösung ist immer irgendwie Pfusch.
>> Nun, sie wandelt die Pegel definiert von 5V auf 3,3V. Tadellos. Und
>> jetzt muss einfach noch die Frage nach der nötigen Geschwindigkeit
>> geklärt werden...
>
> Wenn ich mich mit Baudraten auskennen würde, hätte ich schon eine
> genannt. Ich kann euch meinen Anwendungsfall beschreiben. Ich habe einen
> electric imp und einen Arduino pro mini. Aus diesen Beiden möchte ich
> mir quasi einen "Smart Home Controller bauen". Also hänge ich an den
> Arduino mini noch ein RF Modul, über welches ich dann andere Controller
> ansteuere.

Und es geht mir aktuell über die Verbindung von electric imp 3,3V mit 
Arduino Pro Mini 5,5V

von Stefan (Gast)


Lesenswert?

>
> Und es geht mir aktuell über die Verbindung von electric imp 3,3V mit
> Arduino Pro Mini 5,5V

Ich meinte 5V

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Stefan schrieb:
> electric imp
https://electricimp.com/docs/api/hardware/uart/configure/
Also gut: für die dort möglichen Baudraten (2400 
Baud...234kBaud...7,5MBaud) würde ich aber gleich einen richtigen 
Pegelwandler einsetzen, nicht dieses quasi-passive Mosfet-Ding...

: Bearbeitet durch Moderator
von Bülent C. (mirki)


Lesenswert?

Lothar Miller schrieb:
> Also gut: für die dort möglichen Baudraten (2400
> Baud...234kBaud...7,5MBaud) würde ich aber gleich einen richtigen
> Pegelwandler einsetzen, nicht dieses quasi-passive Mosfet-Ding...

Also mit dem Mosfet-Ding :-) kann man ohne weiteres bis 500kbit/s fahren 
(Baud nicht mit Übertragungsgeschwindkeit verwechseln!!) und das dürfte 
dem TO vollkommen ausreichen denke ich.

von Stefan (Gast)


Lesenswert?

Bülent C. schrieb:
> Lothar Miller schrieb:
>> Also gut: für die dort möglichen Baudraten (2400
>> Baud...234kBaud...7,5MBaud) würde ich aber gleich einen richtigen
>> Pegelwandler einsetzen, nicht dieses quasi-passive Mosfet-Ding...
>
> Also mit dem Mosfet-Ding :-) kann man ohne weiteres bis 500kbit/s fahren
> (Baud nicht mit Übertragungsgeschwindkeit verwechseln!!) und das dürfte
> dem TO vollkommen ausreichen denke ich.

davon abgesehen benutzt dieser Wandler:
http://www.watterott.com/de/Level-Shifter

ja auch den BSS138. Also wie gesagt mir ist es lieber
ne fertige Platine zu haben. Deswegen hole ich mir so ein
Teil wie oben und dann sollte es gut sein oder?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Bülent C. schrieb:
> Also mit dem Mosfet-Ding :-) kann man ohne weiteres bis 500kbit/s fahren
In der Richtung 5V->3V3 glaube ich das sogar. In der Richtung 3V3->5V 
wird es dann spannend, weil da alles ab ca. 3V nur vom Pullup geregelt 
wird...

Ich würde nach wie vor einen richtigen Pegelwandler vorschlagen:
http://www.ti.com/product/sn74lvc1t45

Stefan schrieb:
> hole ich mir so ein Teil wie oben und dann sollte es gut sein oder?
Ja, mach das. Für die nötigen und möglichen Baudraten reicht das 
sicher...

: Bearbeitet durch Moderator
von Statler (Gast)


Lesenswert?

Aber beim MOSFET nicht vergessen, dass Du das Signal invertierst.

Wenn es noch einfacher sein soll, nimm einen 20k-Längswiderstand zur 
Strombegrenzung und benutze die interne Clamp-Diode im 3,3V-Eingang. Die 
allermeisten ICs können das problemlos ab. Schau im Datenblatt nach 
Injection Current. Das empfiehlt sich aber nur, wenn keine benutzen 
AD-Pins in der Nachbarschaft liegen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Statler schrieb:
> Aber beim MOSFET nicht vergessen, dass Du das Signal invertierst.
Sieh dir diese Schaltung nochmal genau an. In der AppNote AN10441 von 
NXP ist sie erklärt. Sie ist genialer als du denkst...

: Bearbeitet durch Moderator
von Ulrich F. (Gast)


Lesenswert?

Stefan schrieb:
> Ulrich F. schrieb:
>> Sowohl LevelShifter, als auch die 3,3V Schaltung brauchen
>> Strom/Suppe/Futter, und der Arduino kann es liefern.
>
> Aber die 3,3 V Schaltung rechts hat dort einen Ausgang....

Ich sehe aber keine Stromversorgung der rechten Schaltung, außer eben 
über den Arduino.

von Bülent C. (mirki)


Lesenswert?

Lothar Miller schrieb:
> Bülent C. schrieb:
>> Also mit dem Mosfet-Ding :-) kann man ohne weiteres bis 500kbit/s fahren
> In der Richtung 5V->3V3 glaube ich das sogar. In der Richtung 3V3->5V
> wird es dann spannend, weil da alles ab ca. 3V nur vom Pullup geregelt
> wird...

Bei UART braucht er keinen Pull-up auf der RX Seite und kann die TX 3V3 
direkt an RX 5V direkt anschließen. Die 5V seite sollte den High Pegel 
schon erkennen können.

Stefan schrieb:
> ja auch den BSS138. Also wie gesagt mir ist es lieber
> ne fertige Platine zu haben. Deswegen hole ich mir so ein
> Teil wie oben und dann sollte es gut sein oder?

Ja, kannst Du machen. Aber wie gesagt, eigentlich brauchst Du für Deine 
Anwendung nur einen BSS138 (oder vergleichbaren MOSFET) und einen 
Widerstand. Da liegst Du unter 10 Cent ;-)

: Bearbeitet durch User
von Lattice User (Gast)


Lesenswert?

Lothar Miller schrieb:
> Bülent C. schrieb:
>> Also mit dem Mosfet-Ding :-) kann man ohne weiteres bis 500kbit/s fahren
> In der Richtung 5V->3V3 glaube ich das sogar. In der Richtung 3V3->5V
> wird es dann spannend, weil da alles ab ca. 3V nur vom Pullup geregelt
> wird...

Der SN74CBTD3861 ist auch nur so ein integriertes Mosfet-Ding und kann 
weit über 10 MHz. Anpassen von 5V PCI auf 3.3V PCI war eine der ersten 
Anwendungen für solche Levelshifter.

Mit diskreten MOS-FET muss man etwas aufpassen. Gate auf 3.3V ist in der 
Tat problematisch, da zu früh gesperrt wird. Je nach Vgs muss dann 
entweder das Gate auf 5V (z.B. mit 2N7002) oder bei schnelleren FETS und 
niedrigeren Vgs mit Diode dazwischen.

Weiter geht es in der Richtung 3.3 -> 5V nur wenn die 5V Seite mit TTL 
Schwellen arbeitet. Mit CMOS Schwellen ist es zu knapp.
Das Schwellenproblem existiert auch bei einer rein passiven Variante.

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.