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?
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.
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
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.
@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.
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.
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.
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.
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
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.
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.
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?!?
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.