Forum: Mikrocontroller und Digitale Elektronik Bidirektionalen Levelshifter gesucht 3.3V <-> 5V


von Rene K. (xdraconix)


Angehängte Dateien:

Lesenswert?

Ja das leidige Thema :-D

Ich bin auf der Suche nach einem Bidirektionalem Levelshifter - 
eigentlich für I2C. Aktuell setze ich einen PCA9306DCTR ein (Schaltung 
als Bild) - jedoch habe ich da so meine "Schwierigkeiten".

Wenn das Signal nicht wirklich I2C ist, dann funktioniert dieser auch 
nicht. Ich habe hier einen SHT11 Sensor, welcher daran nicht 
funktioniert, weil dort die Startsequenz sowie die ACK Sequenz vom I2C 
Standard abweicht.

Die einfachste Möglichkeit wäre halt dort einen "allgemeinen" 
Levelshifter einzusetzen.

Hat da jemand etwas, in einem kleinen Package, anzubieten?

Liebe Grüße René

von Chris K. (kathe)


Lesenswert?

Für was brauchst du einen Levelshifter von 3.3 auf 5 V für den SHT11?
 Eingangsspannungsbereich 2.4 - 5.5 V

von Rene K. (xdraconix)


Lesenswert?

Chris K. schrieb:
> Für was brauchst du einen Levelshifter von 3.3 auf 5 V für den
> SHT11?
>  Eingangsspannungsbereich 2.4 - 5.5 V

Ja jain - also der SHT11 würde nicht alleine an dem Strang hängen. Diese 
Platine ist eigentlich für andere I2C Devices gedacht. Vorrangig für PIR 
Melder. Jedoch möchte ich diesen Port auch für andere Devices nutzbar 
machen, eben auch SHT11 - das beides nicht gleichzeitig funktionieren 
würde, da sich durch das "fehlerhafte" I2C des SHT1x wahrscheinlich der 
Bus mit den anderen Devices kollidiert ist mir bewusst - in diesem 
Szenario wäre dann der SHT der einzigste Teilnehmer am Bus.

Gedanke wäre auch gewesen den SHT einfach einen Abgriff vor dem PCA auf 
der 3V Leitung zu geben - da greift dann aber wieder der PCA ein und 
gibt bei einer fehlerhaft erkannten Startseq ein NACK auf die Leitung. 
Deswegen die Frage nach einem Levelshifter welcher nicht aktiv in die 
Leitung eingreift.

von Chris K. (kathe)


Lesenswert?

Dann mach lieber 2 ähm ein Pseudo i2C und ein richtiger i2C bus 
ansonsten wäre der SHT11 ein richtiges i2C device geworden. Mit 
zusätzlichen Pegelwandler wird das nicht besser oder nimm nen neueren 
SHT sensor die scheinen richtig i2C geworden zu sein
https://sensirion.com/media/documents/33FD6951/63E1087C/Datasheet_SHT4x_1.pdf

von Manfred (Gast)


Lesenswert?

Rene K. schrieb:
> Bidirektionalem Levelshifter

Ich nutze TXS0108E, sowohl am I2C als auch am SPI. Mal Datenblätter 
ansehen, die gibt es auch mit weniger als 8 Kanälen.

von Rene K. (xdraconix)


Lesenswert?

Oh, den SHT4 schaue ich mir natürlich auch mal an! Danke dafür und die 
Idee mit dem zweiten Pseudo I2C Bus ist natürlich auch clever. Aber da 
brauche ich ja wieder 2GPIO dafür.

@Manfred

Oh danke! Für zwei Kanäle gäbe es da den TXS0102DCTR - das wäre im 
Grunde genau das richtige dafür! Dann kann ich die Ausgänge ja auch für 
komplett andere Dinge nutzen statt nur für I2C.

von Peter K. (chips)


Lesenswert?


von Manfred (Gast)


Lesenswert?

Rene K. schrieb:
> @Manfred
> Oh danke! Für zwei Kanäle gäbe es da den TXS0102DCTR - das wäre im
> Grunde genau das richtige dafür! Dann kann ich die Ausgänge ja auch für
> komplett andere Dinge nutzen statt nur für I2C.

Für mich ist das ein Baustein, der transparent Pegel umsetzt und den der 
Signalinhalt nichts angeht. Mir ist etwas unklar, warum das der PCA9306 
nicht auch tun soll.

Wenn es nur um Signale in eine Richtung geht, schaue mal 74HCT125 und 
74LVC125 an, deren Eingangspegel von der Betriebsspannung abweichend 
sein dürfen.

von Chris K. (kathe)


Lesenswert?

Vielleicht brauchst dur nur andere Pullups Werte
"11.2 How to size pull-up resistor value" im Datenblatt mal anschauen.

von Rene K. (xdraconix)


Lesenswert?

Chris K. schrieb:
> Vielleicht brauchst dur nur andere Pullups Werte
> "11.2 How to size pull-up resistor value" im Datenblatt mal anschauen.

o.O Was mich daran gerde arg wundert... nach dieser Tabelle, bräuchte 
ich auf der 3V Leitung überhaupt keine Pull-Ups?!

von MOSFET (Gast)


Lesenswert?


von Wolfgang (Gast)


Lesenswert?

Rene K. schrieb:
> Die einfachste Möglichkeit wäre halt dort einen "allgemeinen"
> Levelshifter einzusetzen.
>
> Hat da jemand etwas, in einem kleinen Package, anzubieten?

Der "allgemeine" bidirektionale Levelshifter für I2C besteht aus einem 
N-Kanal MOSFET. Du brauchst einen davon für SCL und einen für SDA.
Schon SOT23 wäre nicht sooh riesig, aber wer weiß, was du als "kleines" 
Package bezeichnest. Mit ein bisschen Suchen finden sich sicher auch 
zwei passende FETs in einem gemeinsamen Gehäuse.

von Clemens L. (c_l)


Lesenswert?

Rene K. schrieb:
> nach dieser Tabelle, bräuchte ich auf der 3V Leitung überhaupt keine
> Pull-Ups?

Um ein Signal von 5 V nach 3.3 V zu wandeln, brauchst du in der Tat 
keine Pullups. Aber wenn du auf der 3.3-V-Seite mehr als ein I²C-Gerät 
hast, dann brauchen dieser Teil des Bus doch welche.

von Peter K. (chips)


Lesenswert?

den SN74CB3T3306 gibts in VSSOP - klein genug ?

von someone (Gast)


Lesenswert?

Die AN10441 kennst Du? Da wird ein I2C-Pegelwandler beschrieben. Für 
einfache Aufgaben ausreichend: 
https://cdn-shop.adafruit.com/datasheets/AN10441.pdf

von Rene K. (xdraconix)


Angehängte Dateien:

Lesenswert?

Manfred schrieb:
> Für mich ist das ein Baustein, der transparent Pegel umsetzt und den der
> Signalinhalt nichts angeht. Mir ist etwas unklar, warum das der PCA9306
> nicht auch tun soll.

So, ich habe dann mal einen "richtiges" I2C Device genommen (LM75) - das 
funktioniert an der Schaltung tadellos. Ich werde aber dennoch die 
Pull-Ups bei der nächsten Version etwas kleiner machen, weil die 
Steigung der Flanken ja doch miserabel ist.

EDIT: da war das doch glatt der falsche IC fotografiert. U6 ist der 
richtige, U2 ist das EEPROM.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Rene K. schrieb:
> Ich werde aber dennoch die
> Pull-Ups bei der nächsten Version etwas kleiner machen, weil die
> Steigung der Flanken ja doch miserabel ist.

Die Flankensteilheit ist bei I2C nicht das Kriterium. Entscheidend ist, 
dass SDA rechtzeitig stabil ist, bevor SCL den L-Pegel verlässt (t_SU) 
und noch ausreichend lange stabil bleibt, nachdem SCL wieder den L-Pegel 
erreicht hat (t_HD).
Fig.31 http://i2c2p.twibright.com/spec/i2c.pdf

von I2C (Gast)


Lesenswert?

Wolfgang schrieb:
> Rene K. schrieb:
>> Ich werde aber dennoch die
>> Pull-Ups bei der nächsten Version etwas kleiner machen, weil die
>> Steigung der Flanken ja doch miserabel ist.
>
> Die Flankensteilheit ist bei I2C nicht das Kriterium. Entscheidend ist,
> dass SDA rechtzeitig stabil ist, bevor SCL den L-Pegel verlässt (t_SU)
> und noch ausreichend lange stabil bleibt, nachdem SCL wieder den L-Pegel
> erreicht hat (t_HD).
> Fig.31 http://i2c2p.twibright.com/spec/i2c.pdf

Daraus folgt, dass bei hohen Bus-Frequenzen die Pullups niedriger sein 
sollen und bei niedrigen Bus-Frequenzen die Höhe der Pullups keine so 
grosse Rolle spielt. Und daraus folgt, dass man mit niedrigeren Pullups 
immer gut fährt. Ich nehme für die Pullups bei 5 Volt 1k8 und bei 3.3 
Volt 1k2.

von Stefan F. (Gast)


Lesenswert?

Mit den 10kΩ die die Chinesen verbauen, bin ich nie richtig glücklich 
gewesen. Die haben dabei wohl berücksichtigt, dass man vielleicht 
solcher Maker-Platinen parallel schaltet (ist ja ein Bus).

Ich verwende 2,2 kΩ bei 3,3V. 5 Volt habe ich in Kombination mit I²C 
schon lange nicht mehr benutzt.

von Manfred (Gast)


Lesenswert?

Rene K. schrieb:
> funktioniert an der Schaltung tadellos.

Mit 200k (R11) vor VREF2 bezweifele ich das.

von Rene K. (xdraconix)


Lesenswert?

Manfred schrieb:
> Rene K. schrieb:
>> funktioniert an der Schaltung tadellos.
>
> Mit 200k (R11) vor VREF2 bezweifele ich das.

Doch funktioniert, der R11 ist sogar ein Muss wenn vref1 und vref2 
unterschiedlich sind - nur wenn der PCA als Speed-Translator eingesetzt 
wird bei gleicher Spannung von Sda1/scl1 und sda2/scl2 wird dieser 
natürlich weggelassen.  Siehe Datenblatt unter Punkt 11.1 sowie ebenso 
den Schaltungsvorschlag darüber:
1
..For the bidirectional clamping configuration (higher voltage to lower voltage or lower
2
voltage to higher voltage), the EN input must be connected to VREF2 and both pins
3
pulled to HIGH side Vpu(D) through a pull-up resistor (typically 200 kΩ). This allows
4
VREF2 to regulate the EN input..

Wie hast du ihn denn verbaut? Und wieso kommst du darauf das es so nicht 
funktionieren sollte?!?

von Clemens L. (c_l)


Lesenswert?

Rene K. schrieb:
> Manfred schrieb:
>> Rene K. schrieb:
>>> funktioniert an der Schaltung tadellos.
>>
>> Mit 200k (R11) vor VREF2 bezweifele ich das.
>
> Doch funktioniert, der R11 ist sogar ein Muss wenn vref1 und vref2
> unterschiedlich sind

Wie die Schaltung mit R11 funktioniert, wird hier erklärt:
https://www.ti.com/lit/pdf/slva675
https://training.ti.com/tlm-lsf-bias (Video)

: Bearbeitet durch User
Beitrag #7355764 wurde vom Autor gelöscht.
von Ingo S. (luziefer)


Angehängte Dateien:

Lesenswert?

der ist klein und brauch nicht viel Aussenbeschaltung

Beitrag #7355779 wurde von einem Moderator gelöscht.
von Steve van de Grens (roehrmond)


Lesenswert?

BilliBanni schrieb im Beitrag #7355779:
> Sowas funktioniert auch.

Ich habe ja eine Farbsehschwäche, aber ich bin 100% sicher, dass das 
Foto einen 1kΩ Widerstand zeigt, nicht wie darunter steht: 10kΩ

von Zeno (Gast)


Angehängte Dateien:

Lesenswert?

Rene K. schrieb:
> Ich bin auf der Suche nach einem Bidirektionalem Levelshifter -
Mit einem FET und 3 Widerständen pro Signal geht das (s. Bildle). Diese 
Schaltung ist bei mir mehrfach im Zusammenhang mit Raspi und ext. 
5V-Logik im einsatz. Was über die Logikleitungen für Signale gehen ist 
da völlig egal. Bei mir funktioniert das auch i2c oder SPI bestens.

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.