Verständnis Frage zu I2C Pull Up Widerstände

  • Hallo zusammen,
    ich habe eine Frage zu I2C. Genauer geht es um die "Pull Up" Widerstände.
    Ich möchte gerne mit WiringPi freie GPIO's zu auslesen von I2C Sensoren nutzen.
    Das Ganze ist nur ein Test. Daher bitte ich mich jetzt nicht auf die vorhandenen I2C Pins hinzuweisen.


    Mit WiringPi habe ich schon ein wenig herum gespielt.
    Das I2C Protokoll habe ich mir auch schon angesehen. Es scheint nicht so kompliziert zu sein.


    Es werden über zwei Leitungen Bytes gesendet und empfangen.
    Die eine Leitung ist die Zeitgeber Leitung. Sie geht immer an und aus.


    Ist zur gleichen Zeit Leitung 2 unter Strom ist es eine 1.
    Ist nur die Zeitgeber Leitung unter Strom ist es eine 0.


    Ich verstehe aber die Pull Up Widerstände nicht.
    Leitung 1 (Zeitgeber Gelb) wird mit einem Widerstand mit dem 3V Output verbunden.
    Das Gleiche geschieht mit Leitung 2. (Datenleitung Mint Grün)


    Hier ist ein Bild zum besseren Verständnis. Ist allerdings Arduinon
    [Blocked Image: http://playground.arduino.cc/uploads/Main/i2c-3v3-sensor-connect.png]


    Das bedeutet für mich jetzt das beide Leitungen immer unter Strom sind.
    Also immer an sind. Also immer 1 sind.
    Im besten Fall haben Sie mal mehr, mal weniger Spannung.


    Ist das so richtig?
    Ist es nicht sinnvoller die Widerstände in Reihe zu schalten?


    Wofür braucht man die überhaupt die Pull Up Widerstände?


    Bekommt der Pin sonst einen zu hohe Spannung ab?


    Wie hoch sollte der Pull Up Widerstand.
    1,8 kOhm?


    Grüße Berrie

  • I2C sind i.d.R. OC open collector Schaltungen.
    In Ruhe liegen durch die pullps high Signale an, jeder Master und Slave kann den also nach low, GND runter ziehen ohne das der andere beleidigt ist.


    Stell dir einfach vor ein Master würde als Quelle ein high senden wollen also wie ein Netzteil und ein Slave würde den auf low ziehen wollen, das gäbe evtl. sowas wie einen Kurzschluss.


    Deswegen gibt es definierte pullups die so eingestellt sind das keiner vom Strom überlastet wird, auch können beide low schalten ohne das sie sich "weh" tun, wired oc
    https://de.wikipedia.org/wiki/Open-Collector-Ausgang


    Die Widerstände betreffen ja 2 Leitungen, deswegen müssen es 2 sein

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Servus Berrie,


    ...
    Wie hoch sollte der Pull Up Widerstand.


    der Vollständigkeit halber: beim Raspi solltest Du keine Pullup Widerstände am I2C-Bus verwenden ... die sind bereits intern verbaut ...


    cu,
    -ds-

  • Hallo jar.
    Vielen Dank für die schnelle Antwort.
    Ich lese mir das mal durch.


    Kennst du oder jemand anderes den Widerstand der Pull Up's? 1800 Ohm?
    Wenn man sich das Raspberry ansieht, dann sieht man an den I2C Pins zwei winzige Bauteile. R23 & R24
    Sind das Pull Up's die schon auf dem Raspberry verbaut sind?


    Grüße Berrie


  • der Vollständigkeit halber: beim Raspi solltest Du keine Pullup Widerstände am I2C-Bus verwenden ... die sind bereits intern verbaut ...


    nicht wenn er andere Pins nutzen will:



    ich habe eine Frage zu I2C. Genauer geht es um die "Pull Up" Widerstände.
    Ich möchte gerne mit WiringPi freie GPIO's zu auslesen von I2C Sensoren nutzen.
    Das Ganze ist nur ein Test. Daher bitte ich mich jetzt nicht auf die vorhandenen I2C Pins hinzuweisen.


    so wie ich ihn verstehe will er die i2c Funktionalität selber mit anderen Pins programmieren und da empfiehlt sich eigene pullups 1,8k bis 1k anzuschliessen.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hallo zusammen,
    vielen Dank für die zahlreichen Antworten.
    Ich war gerade 1k8 Widerstände kaufen.


    Ja, ich möchte I2C an anderen Pins nachbauen.
    Anschließen möchte ich das an 3V GND GPIO17 und GPIO18.
    Verkabeln werde ich das wie oben im Arduino Bild.


    Vielen Dank nochmal.
    Berrie

  • Hallo berrie,


    nichts gegen Deine Ziele und Wünsche und technisch ist dies mit Sicherheit möglich. Aber an Hand Deiner Fragestellung habe ich echt Bedenken, das Du das softwaremäßig in den Griff bekommst. So wie in der Zeichnung könnte der Arduino nur empfangen. Du hast weder eine Kontrolle ob das Teil überhaupt eingeschaltet ist, und erst recht nicht, ob es etwas mitbekommen hat. Auch Antworten sind nicht möglich. Bei I2C muß der SDA - Pin ständig zwischen Eingang und Ausgang umgeschaltet werden ! Du hast die Leitung aber nur als Analogeingang beschaltet !


    Also bitte noch mal überdenken.

  • Wieso nimmst Du nicht die GPIOs 2 und 3, die dafür vorgesehen sind?
    Ich habe die genommen und bin dann auf einen Levelshifter gegangen. Dadurch kann ich dann mit 5V auf dem Bus weiterarbeiten. Ist mir aus gewohnheit lieber.
    Auf der 5v-Seite brauchst du dann die Pull-Up-Widerstände.


    Zur Erklärung:
    Jeder, der auf den Bus zugreifen möchte, der macht dass, indem er "Kurzschlüsse" gegen Masse macht. Solange keiner einen Kurzschluss macht hat der Bus high-Level (also 3,3 oder 5V).
    Damit bei dem Kurzschluss keine hohen Ströme fließen gibts die "Vorwiderstände". Somit ist der Strom begrenzt.