Forum: Mikrocontroller und Digitale Elektronik I2C: zwischen schwachen Pullup und starkem Pullup vermitteln


von Stefan H. (stefan_h16)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
Ich habe folgendes Problem:
Einerseits habe ich einen Lego Mindstorms NXT Ultraschallsensor - ein 
I2C Sensor. Dieser hat intern einen 82k Pullup und einen 4k7 
Serienwiderstand auf beiden Datenleitungen.
Diesen Sensor würde ich gerne mit einem RPI ansteuern. Dieser hat einen 
1k8 Pullup an den Datenleitungen. Dazu habe ich noch einen zweiten 4k7 
Widerstand in Serie geschaltet als Schutz (den zu brücken löst das 
Problem nicht).

Nun habe in meinen Messungen festgestellt, dass es dem Sensor nicht 
möglich ist SDA auf Low zu ziehen so das diese Info beim Pi ankommt. Er 
versucht z.b. seine Adresse zu ACK, kommt aber nicht durch - Fehler bei 
der Übertragung.

Ich habe versucht das zu simulieren und meine Befürchtungen bestätigt 
(siehe Anhang).

Jetzt kann ich leider weder den Pullup noch den Serienwiderstand im 
Sensor entfernen. Auch am Pi will ich nicht löten.  Gibt es eine 
Möglichkeit das Problem elegant zu lösen?

von Ulrich F. (Gast)


Lesenswert?

Evtl. mit einem Philips Levelschifter.

von Klaus (Gast)


Lesenswert?

Stefan H. schrieb:
> Dieser hat intern einen 82k Pullup und einen 4k7
> Serienwiderstand auf beiden Datenleitungen.

Mit so großen Serienwiderständen kriegt man eigentlich jeden Wired-Or 
Bus kaputt. Da hilft auch kein Levelshifter. Und wenn man sich dann noch 
die bei I2C zulässigen 400pF zusammen mit 82k Pullups vorstellt, bewegt 
sich garnichts mehr.

MfG Klaus

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Stefan H. schrieb:
> Gibt es eine
> Möglichkeit das Problem elegant zu lösen?

Nimm 2 GPIO, an denen kein Pullup dran hängt und mach Bitbanging I²C.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Stefan H. schrieb:
> Dieser hat intern einen 82k Pullup und einen 4k7 Serienwiderstand auf
> beiden Datenleitungen.

Und das soll I2C sein?

von Stefan H. (stefan_h16)


Lesenswert?

Klaus schrieb:
> Stefan H. schrieb:
>> Dieser hat intern einen 82k Pullup und einen 4k7
>> Serienwiderstand auf beiden Datenleitungen.
>
> Mit so großen Serienwiderständen kriegt man eigentlich jeden Wired-Or
> Bus kaputt. Da hilft auch kein Levelshifter. Und wenn man sich dann noch
> die bei I2C zulässigen 400pF zusammen mit 82k Pullups vorstellt, bewegt
> sich garnichts mehr.
>
> MfG Klaus

Rufus Τ. Firefly schrieb:
> Stefan H. schrieb:
>> Dieser hat intern einen 82k Pullup und einen 4k7 Serienwiderstand auf
>> beiden Datenleitungen.
>
> Und das soll I2C sein?
Die Sensoren bzw der Bus wurde von den Lego-Ings so entwickelt. Jetzt 
versuche ich damit klar zukommmen. Die Baudrate ist auch nur 9.6 kHz und 
das ganze funktioniert im Original auch zuverlässig.

Matthias Sch. schrieb:
> Stefan H. schrieb:
>> Gibt es eine
>> Möglichkeit das Problem elegant zu lösen?
>
> Nimm 2 GPIO, an denen kein Pullup dran hängt und mach Bitbanging I²C.

Das ist schon Plan B, ich hoffte es gibt noch einen Plan A.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Und das soll I2C sein?

Wenigstens kann man dann die ggf. am US-Sensor vorhandenen Schutzdioden 
nicht überlasten, egal wie paddelig man den Sensor verdrahtet.

von Stefan H. (stefan_h16)


Lesenswert?

Wäre ein PCA9515 eigentlich eine Lösung für das Problem?

von Lattice User (Gast)


Lesenswert?

Stefan H. schrieb:
> Wäre ein PCA9515 eigentlich eine Lösung für das Problem?

Ja

Vorrausgesetzt du kannst den I2C RPi auf kleiner 10 kHz einstellen. Mit 
den normalen 100 kHz oder gar 400 kHz geht es nicht.

von Stefan H. (stefan_h16)


Lesenswert?

Lattice User schrieb:
> Stefan H. schrieb:
>> Wäre ein PCA9515 eigentlich eine Lösung für das Problem?
>
> Ja
>
> Vorrausgesetzt du kannst den I2C RPi auf kleiner 10 kHz einstellen. Mit
> den normalen 100 kHz oder gar 400 kHz geht es nicht.

Habs gerade getestet. Funktioniert super. Vielen dank.

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.