PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bidirektionaler Pegelwandler Funktionsweise



Waldschrat
11.09.2011, 23:45
Hallo,
ich möchte grade ein 3,3 V Sensor an einen ATMEGA anschließen der mit 5 V betrieben wird (beides ist auch leider nicht änderbar). Da beide dummerweise per I2C kommunizieren muss ich die Pegel bidirektional an einander anpassen. Dazu habe ich folgende Schaltung gefunden:
http://www.rocketnumbernine.com/2009/04/10/5v-33v-bidirectional-level-converter/
Sieht soweit so gut aus, ich würde nur gerne Verstehen ob und wie das funktioniert.
Gruß
Waldschrat

Klebwax
12.09.2011, 07:11
Hallo,
ich möchte grade ein 3,3 V Sensor an einen ATMEGA anschließen der mit 5 V betrieben wird (beides ist auch leider nicht änderbar). Da beide dummerweise per I2C kommunizieren muss ich die Pegel bidirektional an einander anpassen.

Hallo,

das Problem hatten wir schon ein paar mal. Es könnte auch ohne Pegelwandler gehen. Einfach die Pullups von SDA und SCL an 3,3V anschließen.Ich kenne zwar den ATMEGA nicht, er sollte aber ein High ab 2,4V erkennen und das erreicht man mit 3,3V immer.

MfG Klebwax

Richard
12.09.2011, 13:02
Schaue Dir einmal http://ics.nxp.com/support/documents/interface/pdf/an97055.pdf an, auf Seite 10 ist ein simpler Pegelwandler zu finden.

Gruß Richard

Valen
12.09.2011, 14:17
Die beider Links (von Waldschrat und Richard) sind nach meiner Meinung die selbe Lösung. Erster Link:

The circuit below shows a bidirectional voltage shifter that first appeared in an Application Note(Valen: =link to AN97055) by Herman Schutte at Philips. Nur ist diese Link Tot. Die von Richard funktioniert.

PICture
12.09.2011, 16:17
Hallo!

Der Schaltplan aus dem Link vom Richard sieht sehr gut aus und sollte funktionieren. Falls kein dafür nötiger Open Drain Ausgang vorhanden wäre, habe ich im Code von mir ausprobierten "virtuellen" mit Schottky Diode (D) skizziert. ;)



VCC=5V
+
|
.-------------.
| | |
| ||-+ |
| ||-> |
| -||-+ | D
| | | Output
| µC +----------S<---> I²C
| | |
| ||-+ |
| ||<- |
| -||-+ |
| | |
'-------------'
|
===
GND


(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)

Richard
12.09.2011, 16:42
Hallo!

Der Schaltplan aus dem Link vom Richard sieht sehr gut aus und sollte funktionieren. Falls kein dafür nötiger Open Drain Ausgang vorhanden wäre, habe ich im Code von mir ausprobierten "virtuellen" mit Schottky Diode (D) skizziert. ;)



VCC=5V
+
|
.-------------.
| | |
| ||-+ |
| ||-> |
| -||-+ | D
| | | Output
| µC +----------S<---> I²C
| | |
| ||-+ |
| ||<- |
| -||-+ |
| | |
'-------------'
|
===
GND


(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de (http://www.tech-chat.de))

Das sieht nicht nach Bidirektional aus?

Gruß Richard

PICture
12.09.2011, 16:53
Du hast Recht, es ist nur "wirtueller" Open Drain Output. :)

Besserwessi
12.09.2011, 19:29
Mit dem bidirektionalen Pegelwandler sollte die Schaltung mit dem N-MOSFET BSS138 und den 2 Widerständen (als Pullup) gemeint sein. Die gibts in dem Link oben, und im der Appl. Note von Phillips (nur ein anderer FET).

Die Funktion ist wie folgt: Der FET Leitet, wenn der Sourceanschluss (= 3,3 V Seite) auf GND, bzw. unter etwa 1 V gezogen wird. Wenn der BUS auf High ist, sperrt der FET und die beiden Seiten haben 3,3 V bzw. 5 V. Wenn die 3,3 V Seite auf Low zieht leitet der FET und zieht damit auch die 5 V seite runter. Wenn die 5 V Seite runter zieht, leitet erstmal die Diode im FET und zieht die 3,3 V Seite bis etwa 0,7 V, so dass dann auch der FET anfängt zu leiten und so auch die 3,3 V Seite bis auf fast GND runter kommt.


Bei den AVRs wird es kaum ohne einen Pegelwandler gehen. Der garantierte wert für ein sicheres High liegt bei 60-70% (je nach Typ) von VCC, das wären also 3 V bzw. 3,5 V. Da müsste man dann schon mit 1-2 Dioden etwas nachhelfen, und hätte trotzdem ein sehr knappes System. Da ist die Lösung mit dem 1 FET schon nicht schlecht.

Klebwax
12.09.2011, 20:58
Bei den AVRs wird es kaum ohne einen Pegelwandler gehen. Der garantierte wert für ein sicheres High liegt bei 60-70% (je nach Typ) von VCC, das wären also 3 V bzw. 3,5 V. Da müsste man dann schon mit 1-2 Dioden etwas nachhelfen, und hätte trotzdem ein sehr knappes System. Da ist die Lösung mit dem 1 FET schon nicht schlecht.

Ich wäre eher beim Pegelwandler skeptisch. Es gab gerade in einem, anderen Forum einen Fall, wo es sogar mit einem zugekauften Pegelwandlermodul nicht ging, ohne aber. Das mag auch was mit Clockstretching zu tun haben. Der Fall ohne Wandler läßt aber leichter ausprobieren als der mit, kaputt gehen kann dabei nichts.

Wenn man den genauen Prozessortyp wüßte, könnte man ja mal nachlesen, wo bei den I2C Anschlüssen die Schaltschwelle liegt.

MfG Klebwax

Waldschrat
14.09.2011, 15:11
Hallo,
danke erst mal für die Antworten :-)
Ich denke ich habe das Prinzip verstanden. Der Prozessor ist ein ATMEGA 2560.
Warum sollte ohne Wandler nichts kaputt gehen können wenn ich an eine 3,3 V IC, die laut Datenblatt maximal 3,9 V verträgt, 5V Signalpegel anlege?
Danke und Gruß
Waldschrat

PICture
14.09.2011, 16:36
Hallo!

Falls noch nicht zu spät ist, möchte noch zum Ausprobieren einen Pegelwandler vorstellen, der mir eingefallen ist (siehe Code).

VCC=5V VCC=3,3V
+ +
| |
.-. .-.
| | | |
| | | |
'-' '-'
| |
+------+__ |
| |OE |
| |\o |
5V Logic <-----+ +-|1>-----+-----> 3,3V Logic
| | |/ |
| === |
| GND |
| /| |
+-----<2|-+ |
__o\| | |
OE| === |
| GND |
| |
+------+

1/2 74HC125

(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)

Kurzbeschreibung:

Für beide 3,3 V und 5V Logik ist der Pegel "L" = 0 V gleich. Durch anlegen am entsprechenden Output Enable Eingang (/OE) des "L" Pegels wird der bisher hochomiger Ausgang auf "L" gehen, weil entsprechender Eingang auf "L" (GND = 0 V) liegt. Bei H Pegel wird er per Pull-up (R1 bzw. R2) an entsprechendem Pegel gehalten, da die Ausgänge bei /OE = "H" hochohmig sind. ;)

Klebwax
14.09.2011, 16:44
Warum sollte ohne Wandler nichts kaputt gehen können wenn ich an eine 3,3 V IC, die laut Datenblatt maximal 3,9 V verträgt, 5V Signalpegel anlege?

Wo sollen die 5V herkommen, wenn die Pullups, wie ich geschrieben habe, auf 3,3V liegen?

MfG Klebwax

Waldschrat
15.09.2011, 15:04
Nur dass die Pullups intern sind und meines Wissens nach auf 5 V liegen. Ich kann die daher nicht per Hand an eine andere Spannung legen und leider weil es sich um eine Arduino-Board handelt auch nicht deaktivieren
Gruß
Waldschrat

PS.: @Picture: Danke, war nicht zu spät, werde es mal ausprobieren :-)

Klebwax
15.09.2011, 16:31
Sorry, hab nicht richtig aufgepasst. Ich hab ATMEGA gelesen, da stand aber Arduino. Muß mal meinen Monitor putzen.

MfG Klebwax

Waldschrat
15.09.2011, 16:48
Nein war mein Fehler, sry. Auf dem Arduino ist ein ATMEGA verbaut. Dachte nur nicht dass das einen Unterschied macht bei der Schaltung wegen der ich ursprünglich gefragt habe. Von daher habe ich auch ATMEGA geschrieben weil das dann universeller ist ;-)
Danke trotzdem für deine Hilfe
Gruß
Waldschrat

Besserwessi
15.09.2011, 18:40
Die ATMega haben interne Pullups, die man allerdings auch abschalten kann. Die internen Pullups sind mit rund 50 kOhm aber auch recht groß für I2C, so dass man oft zusätzliche externe Pullups braucht. Von der Spannung her kann es mit dem Pullup nach 3,3 V gehen, es wird aber recht knall. Etwas besser wird es ggf. mit 2 Diode in der Leitung, und dann einem Pullup an etwa 3,8 V auf der 5 V Seite. Der Spannungsabfall an den Dioden reduziert die Spannung für die 3 V Seite, und 0,7 V werden immer noch sicher als Low erkannt. Wenn man mag könnte man was ähnliches auch rein mit 3 Widerständen erreichen - also doch wieder so eine Art Spannungsteiler, wenn auch mit 3 Widerständen: ein Längswiderstand, ein Pullup auf der 5 V Seite und ein Pulldown auf der 3,3 V Seite.

Richard
15.09.2011, 20:53
Die ATMega haben interne Pullups, die man allerdings auch abschalten kann. Die internen Pullups sind mit rund 50 kOhm aber auch recht groß für I2C, so dass man oft zusätzliche externe Pullups braucht. Von der Spannung her kann es mit dem Pullup nach 3,3 V gehen, es wird aber recht knall. Etwas besser wird es ggf. mit 2 Diode in der Leitung, und dann einem Pullup an etwa 3,8 V auf der 5 V Seite. Der Spannungsabfall an den Dioden reduziert die Spannung für die 3 V Seite, und 0,7 V werden immer noch sicher als Low erkannt. Wenn man mag könnte man was ähnliches auch rein mit 3 Widerständen erreichen - also doch wieder so eine Art Spannungsteiler, wenn auch mit 3 Widerständen: ein Längswiderstand, ein Pullup auf der 5 V Seite und ein Pulldown auf der 3,3 V Seite.

Warum sich bei diesem Board die internen Pull-Up nicht abschalten lassen sollen??? Aber die Gefahr das zu vergessen bleibt natürlich. Externe "zusätzliche" (kleinere) Pull-Up Widerstände beheben das aber nachhaltig da es sich um eine Parallel Schaltung der Widerständen handelt und der gesamt Widerstand etwas kleiner als der größte sein wird. Kein Problem also. :-) Spannungsteiler (können) auch gehen aber man muss den Gesamt Widerstand beachten, bei zu kleinen Strömen (zu großem Gesamtwiderstand) kommt es zu Signal-Flanken Verformungen und das Signal wird nicht mehr sauber erkannt. Das bedeutet letztendlich extrem herunter mit der Datenrate damit es noch Fehlerfrei klappt....

Gruß Richard

PICture
09.10.2012, 23:16
Inzwischen wurde von mir skizzierte Schaltung schon ausprobiert: https://www.roboternetz.de/community/threads/59466-Levelshifter-von-Reichelt-3-3V5V-f%C3%BCr-SD-Card-an-AVR-gesucht-Dringend-%29?p=561051&viewfull=1#post561051 , also vielen Dank an den Bumbum ! :)

Aktuelle Skizze:
VCC=5V VCC=3,3V
+ +
| |
.-. .-.
| | | |
| | | |
'-' '-'
| |
+------+__ |
| |OE |
| |\o |
5V Logic <-----+ +-|1>-----+-----> 3,3V Logic
| | |/ |
| === |
| GND |
| /| |
+-----<2|-+ |
__o\| | |
OE| === |
| GND |
| |
+------+

1/2 74HCT125

VCC=5V VCC vom IC
+ +
| | | | | | | |
.-------------. |
|14 | |
|>IC=74HCT125 | --- C
| 7| --- µ1
'-------------' |
| | | | | | | |
=== ===
GND GND

(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)

Bumbum
31.10.2012, 07:53
Guten Morgen,

ich habe das ganze wie gesagt mit einem LCD-Display verwechselt, dachte also es muss nur in eine Richtung umgepegelt werden. Wenn es so in beide Richtungen funktioniert werde ich mir das auf jeden Fall merken. Aber die gezeigte Schaltung verstehe ich nicht ganz. Das sollen doch zwei Pegelwandler, einmal 3,3V --> 5V und einmal umgekehrt sein. Wo sind da die Eingänge? Und so wie skizziert wird es nicht funktionieren, da der OE des 5V --> 3,3V Wandlers mit dem Ausgang des 3,3V --> 5V Wandlers geschaltet wird.

Bei solchen Widerstands-Sachen hatte ich bisher immer Probleme bei höheren Datenraten. Mich würde also interessieren, bei welcher Frequenz die Schaltung noch saubere Signale erzeugt in allem die Richtung 3,3V --> 5V

Viele Grüße
Andreas

Besserwessi
31.10.2012, 11:08
Die Wandlung nur in eine Richtung geht recht schnell: Die 74HCT... ICs gehen so bis rund 50 MHz. Beim Runter Teilen von 5 v -> 3,3 V ist es nur eine Frage wie kleine die Widerstände sein dürfen, d.h. wie viel Strom fließen darf. Ohne große Kapazitive Last (oder mir passendem Kondensator am Teiler) geht das aber auch recht schnell (z.B. 100 MHz).

Der anfangs gezeigte bidirectionale Spannungswandler an sich ist schnell - es sind halt die Widerstände am I2C Bus, die die maximale Geschwindigkeit bestimmen, eigentlich so wie sonst auch. Das sollte dann auch für die schnellere I2C Raten (1 MHz) reichen, wenn Kapazitäten nicht zu groß werden.

PICture
31.10.2012, 13:45
Hallo!


Wo sind da die Eingänge?

Die Eigänge sind den Ausgängen gleich, bloss abwechselnd, da es bidirektional ist. ;)

Besserwessi
31.10.2012, 14:07
Die Schaltung mit den 2 Gattern hat aber ein Problem: sie kann Hängen, wenn beide Seiten auf Low sind. Dann braucht es schon ein recht kräftiges Signal um gegen eines der Gates den "Eingang" auf High zu zwingen.

PICture
31.10.2012, 15:16
Ich habe es selber nicht ausprobiert und basiere lediglich nur auf dem o.g. Bericht vom Bumbum, angenommen, dass er diese Schaltung ausprobiert hat. Die Schaltung unbrauchbar machender "latch up" ist eben möglich. ;)