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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Stefan H. (stefan_h16)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Evtl. mit einem Philips Levelschifter.

von Klaus (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von Lattice User (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.