GPIO Pins doppelt belegen für Sensor und RTC (Raspberry Pi 3 und 4)

  • Hallo zusammen,


    ich bins, der neue ;)


    Für ein Projekt stehe ich gerade vor einem Problem. Ich nutze bereits die Pins 3, 4, 5 und 6 für einen Sensor.

    Bei dem Sensor handelt es sich um den SPS30 Sensor von Sensirion zum Messen von Staubpartikeln.

    Jetzt habe ich relativ spät erfahren, dass das Raspberry Pi keine RTC hat, was für das Projekt problematisch ist, da die Uhrzeit eine wichtige Rolle spielt und das Gerät offline betrieben werden soll.


    Leider habe ich keine Ahnung von Elektrotechnik und den GPIO Pins, bin auch relativ neu in der Raspberry Pi und Linux Welt - ich bin nur einfacher Softwareentwickler.

    Daher hoffe ich, Ihr könnt mir hier ein paar gute Ratschläge oder Lösungswege liefern.


    Zum eigentlichen Problem: Die RTC benötigt nun Pins, die z.T. vom Sensor bereits belegt sind.

    Diese braucht nämlich 1, 3, 5, 7 und 9.

    Problem sind hierbei dann die Pins 3 (GPIO 2 (I2C1 SDA)) und 5 (GPIO 3 (I2C1 SCL)).


    Ich weiß, ich weiß, hier im Forum gab es schon eine Vielzahl solcher Themen, allerdings habe ich für mich nicht klar eine Antwort darauf gefunden, ob ich problemlos beide meiner Geräte (Sensor + RTC) mit den Pins 3 und 5 verbinden kann.


    Ich habe gelesen, dass man manche Pins doppelt belegen kann, manche jedoch nicht, und dass es da viel zu berücksichtigen gibt.

    Ich habe auch gelesen, dass man mehrere Geräte an den I2C Pins anschließen kann, vorausgesetzt sie nutzen unterschiedliche Adressen.


    Aus dem Datenblatt vom Sensirion SPS 30 Sensor geht hervor, dass dieser die Adresse 0x69 nutzt, in einem Tutorial zur Einrichtung der RTC habe ich gesehen, dass diese die Adresse 0x68 nutzt. (Klingt für mich eigentlich schon mal gut).


    Hier auch noch der Schaltplan der RTC:


    und vom SPS30 Sensor:



    Denkt ihr, dass das so funktionieren könnte, oder sollte ich irgendwas vorher beachten, um nichts kaputt zu machen?


    Ich freue mich auf Eure Antworten.


    Grüße

    Patrick

  • Du darfst keineswegs die Pullups auf VDD (5 V) verschalten, wie im letzten Bild dargestellt. Du brauchst überhaupt keine externen Pullups, weil bei Aktivierung des I2C Moduls die im Pi eingebauten Pullups (auf 3,3 V) aktiv sind.


    Servus !



    Nachtrag: Die RTC musst Du mit dem dtoverlay=i2c-rtc-gpio,<param>=<val> konfigurieren, wobei per default GPIO 23, 24 eingestellt ist. Siehe /boot/overlays/README

    RTFM = Read The Factory Manual, oder so

    Edited once, last by RTFM ().

  • Hallo, danke Euch für Eure Antworten.


    Also bis zum Zeitpunkt Eurer Antworten habe ich noch nie von Pullup Resistors etc. gehört.

    Wie gesagt ich habe mit Elektrotechnik wirklich nichts am Hut.

    Habe aber einen Artikel gefunden, der das ganze Thema I2C Bus und Pullup Resistors gut erklärt. Heißt jetzt trotzdem nicht, dass ich jetzt Elektrotechniker geworden bin :D


    Also noch mal etwas mehr Hintergrund-Info:

    Den Raspberry Pi habe ich schon fertig (provisorisch) verkabelt mit dem Staub-Sensor so übergeben bekommen, so dass ich in der Lage war das Teil anzuprogrammieren. Da sind wohl auch Pullup Resistors schon mit im Spiel, wenn ich das richtig sehe.



    Keine Sorge, ich erwarte von euch nicht, dass ihr durch das Foto versteht, wie es verkabelt ist, jedenfalls sind dort 2 Teile, die für mich wie Widerstände aussehen.


    Aber wie finde ich heraus, ob die RTC nun integrierte Widerstände hat?

    Da die RTC, die ich hier habe, vermutlich als Plug&Play Gerät vorgesehen ist, da sie nur zum Aufstecken gedacht ist, könnte das durchaus schon mit integrierten Widerständen sein, vermute ich mal.


    Viele Grüße & Danke

  • Da die RTC, die ich hier habe, vermutlich als Plug&Play Gerät vorgesehen ist,

    Deine Vermutung ist nicht richtig. Du brauchst einen Treiber, der mit dtoverlay= mitgeladen wird. Hättest Du die README aus #3 gelesen, müsstest Du nicht mehr herumrätseln.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Deine Vermutung ist nicht richtig. Du brauchst einen Treiber, der mit dtoverlay= mitgeladen wird. Hättest Du die README aus #3 gelesen, müsstest Du nicht mehr herumrätseln.


    Servus !

    Hi RTFM danke nochmal - ja ich habe mich mit Plug & Play eventuell etwas falsch ausgedrückt. Damit meinte ich in diesem Sinne eher, dass man bei einer solchen RTC, die eben zum Aufstecken gedacht ist vermutlich keine extra Widerstände benötigt. Habe deinen Eintrag jetzt nochmal gelesen und hatte das zunächst nicht richtig verstanden - sorry.


    Die zwei SMD Widerstände sind fest auf den I2C angelegt.

    Danke auch Dir.



    Ok und nochmal zusammengefasst:

    - Die RTC bringt dann schon Widerstände mit

    - mein Staubsensor und die Verkabelung, die man mir so mitgegeben habe, die aktuell 2 Widerstände beinhaltet, sollte ich nun so nicht noch zusätzlich mit anschließen, sondern nur ohne die Widerstände.


    Ich habe einen Port-Doubler von Joy-IT besorgt.

    Wenn ich diesen nun auf den Raspberry Pi stecke, dann sollte ich hier

    - zuerst die RTC anschließen, da diese dann entsprechend durch die Konfiguration schon die Widerstände mitbringt

    - und dann als nächstes meinen Sensor (OHNE) Widerstände


    verstehe ich das so richtig?


    Danke Euch!

    Edited 2 times, last by patr1q ().

  • verstehe ich das so richtig?

    Nicht ganz.

    Es darf an keinem externen Busteilnehmer (Slave) ein Pullupwiderstand verbaut sein. Die beiden Widerstände am RTC Modul sind auch keine Pullups, wie in #1 aufgezeigt. Die Pullups werden im SOC des Pi aktiviert bzw.sind an GPIO 2 + 3 schon fest verdrahtet (bei einigen SOCs).


    Wesentlich erscheint mir aber, dass die von Dir in #1 verlinkte Anleitung vom März 2015 stammt, als noch mit Sys V gebootet und über Runlevels konfiguriert (und daemonisiert) wurde.


    Inzwischen hat systemd die Boot- und Ablaufkontrolle übernommen und werden die notwendigen Treiber mit "Device Tree Overlay" (AKA dtoverlay) geladen und initialisiert. Deshalb ist es nach wie vor notwendig, dass Du die Zeilen 1 - 80 von /boot/overlays/README liest. Das i2c-rtc-gpio Overlay an der richtigen Stelle der /boot/config.txt eingefügt, könntest Dir sogar mit "dtoverlay=i2c-rtc-gpio,DS3231,i2c_gpio_sda=10,i2c_gpio_scl=9" erlauben, statt PiPin 1,3,5,7,9 auf PiPin 17,19,21,23,25 Plug & Play (in Deinem Sinne) zu verwenden. [ungetestet]


    Servus !

    RTFM = Read The Factory Manual, oder so

  • könnte das durchaus schon mit integrierten Widerständen sein, vermute ich mal.

    wieso vermuten, die sind doch sichtbar!

    Und von wo nach wo die gehen sieht man auch an den Leiterbahnen und kann sie sogar messen, VCC I2C SDA SCL Leitung zu den Pins!

    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)

  • Die zwei SMD Widerstände sind fest auf den I2C angelegt.

    Wenn ich das Bid sehe, dann rate ich dazu diese DS3231RTC gleich wieder zu Entsorgen!

    Sie hat eine fest aufgelötete Batterie auf der Unterseite.

    Die läuft zwar, nur wenn die Batterie leer ist, was meist innerhalb eines Jahres passiert, dann hast ein Problem!

    Denn diese Batterie mit Lötfahnen bekommst du in Europa so gut wie gar nicht.

    Sprich, wenn die Batterie leer ist, kannst das ganze RTC Modul entsorgen!


    Ich empfehle daher eine andere RTC zu verwenden, eine mit wechselbarer LI-Batterie!

  • Ich empfehle daher eine andere RTC zu verwenden, eine mit wechselbarer LI-Batterie!

    ich empfehle die per Pegelkonverter mit 5V und LiR2032 Akku die mit 50mAh die an 5V aufgeladen werden.

    Alternativ mit CR2032 aber dann darf die Ladeschaltung mit der Diode nicht bestückt 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)