Einige Fragen zur richtigen Verwendung von GPIOs

  • Hallo zusammen,

    ich bräuchte mal wieder eure Hilfe. Mir ist gestern ein Pi abgeraucht und ich vermute, dass es an den GPIOs lag. Die Woche vorher gingen mir nämlich nach und nach die GPIOs kaputt. Ein neuer Pi ist schon bestellt, aber ich möchte nicht noch einmal den gleichen Fehler machen. Ich habe folgende Dinge angeschlossen:

    Relaismodul:

    https://www.berrybase.de/senso…n/5v-8-kanal-relais-modul


    Hier musste ich schon einen GPIO tauschen, da dieser bei ca. 2,1V "hängen geblieben" ist. Hier bin ich mir beim Anschließen nicht so ganz sicher. Ich hatte es lange Zeit so:


    Später dann so:


    Hat beides funktioniert, aber bei Variante 1 stören mich die 5V etwas. Welche Variante wäre die bessere?


    Dann habe ich noch zwei Stromzähler mit S0 Schnittstelle angeschlossen. Ich denke, dass hier ein Fehler sein könnte, da ich nur ca. jeden 5. Impuls mitbekommen habe. Hier musste ich ebenfalls ein Mal den GPIO wechseln. Dieser ist bei ca. 0,2V "festgehangen".

    Laut diesem Beitrag: RE: GPIO defekt? sollte ich auch lieber einen Pullup Widerstand verwenden und nach GND schalten, richtig?


    Bei meinen 5 wasserfesten Onewire Sensoren musste ich schon zweimal den GPIO wechseln. Zuerst hatte ich Pin 7, dieser funktionierte weiterhin wie ein GPIO, für onewire war er aber nicht mehr zu gebrauchen. Danach Pin 16, der ist dann wie die anderen komplett kaputt gegangen und zum Schluss noch Pin 18. Folgendermaßen sind sie angschlossen:

    Bei den Sensoren hatte ich noch ein Problem. Ich habe ein geschirmtes Kabel vom RPi zum Heizraum (ca. 4-5m). Am anderen Ende sind dann 3 Sensoren mit 1m Kabellänge und 2 Sensoren mit 5m Kabellänge. Sobald ich einen 6. Sensor mit 5m Kabellänge anschließe, sind alle Sensoren mit 5m Länge nicht mehr erreichbar. Ich denke, dass hier der Spannungsabfall zu hoch ist. Kann ich die Sensoren auch wie hier: http://bollwerk-essen.bplaced.net/?ds18x20 unter "Anschluss" die 2. Variante, anschließen? Ich habe auch hier DS18B20 Sensoren fallen aus, wenn mit Verlängerung angeschlossen gelesen, dass man dann auch kleinere oder sogar gar keine Widerstände verwenden kann.

  • Moin jjk,


    ich schreibe mal nur was zu der Relaiskarte.


    Auszug aus dem Katalog von BerryBase:

    Quote
    • Jedes Relais benötigt 15-20mA zum Schalten

    bevor man sich ein Modul für den RPi kauft, sollte man immer einen Blick in das Datenblatt werfen.



    Und nun was von dieser Seite:https://www.elektronik-kompend…/raspberry-pi/2006031.htm


    Quote

    Eines vorneweg, der Gesamtstrom aller GPIOs sollte 50 mA nicht übersteigen. Denn das ist die größte Stromstärke (mit Reserve natürlich) die ein Bond (das dünne Drähtchen vom "Beinchen" des Schaltkreises zur eigentlichen internen Schaltung) aushalten kann.

    Die gesamte Elektronik eines (einzelnen) Anschlusses ist für maximal 16 mA ausgelegt. Das heißt, es treten bis 16 mA keine Schäden auf. Alles darüber ist unsicher. Auch wenn der eine oder andere Bastler deutlich mehr aus einem GPIO bekommt.

    Lese es mal genau durch.


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Die 15-20mA würden sich dann aber auf das Relais beziehen? Also nicht auf den Optokoppler, der dann mit den GPIOs geschalten wird. Siehe Schaltplan: https://www.berrybase.de/media…s-RELM-82hFeRkCCbfqjN.pdf . Ich habe am selben GPIO und GND die 5V Versorgung vom Meanwell Netzteil (5,2V 6,5A). Die 5V würden also direkt vom Netzteil kommen und nicht durch den USB-C Stecker einmal durch den halben Pi und dann wieder am GPIO raus.

    (Wenn mans genau nimmt ist der andere 5V Pin und noch ein GND Pin auch mit dem Netzteil verbunden)

  • Zitat

    • Jedes Relais benötigt 15-20mA zum Schalten

    Und wenn man sich die Mühe macht, den Scheiß, den Berrybase da schreibt, zu überprüfen, dann stellt man fest, dass es 70 mA sind.

    Das wiederum hat aber in beiden Schaltungen keinerlei Auswirkung, weil die Relais an 5V hängen und der Pi dort locker die 560 mA bringt, die nötig sind, um alle Relais gleichzeitig zu schalten (was höchstwahrscheinlich gerade in der Testphase nicht der Fall ist). In der Tat ist der Strom über die Optokoppler so gerning, dass das von Bernd Gesagte hier nicht greift.


    Ich sehe bei keiner der Schaltungen ein grundsätzliches Problem (obwohl mir die üblichen Verdächtigen jetzt wahrscheinlich gleich widersprechen - von wegen 5 V am GPIO und so...).

    Ein bisschen Bedenken hätte ich mit 5,2 Volt am 5-V-Pin. Der Pi braucht die 5,1 eigentlich nur, weil der eine oder andere Verlust auf dem Weg bis zur Platine auftritt (Kabelwiderstand, Polyfuse, Verpolungsschutz oder sowas, vermute ich). An den 5-V-Pin würd ich auch nur 5 Volt anlegen - zumal das Mean Well Netzteil geregelt ist und mit 6,5 A die Spannung ganz sicher halten kann. Andererseits dürften 4% Überstpannung den Pi nicht gleich sterben lassen.


    Die So-Zähler könnten dir Probleme machen, wenn die GPIOs auf output low stehen. Dann hast du nämlich einen Kurzschluss. Das könnte zum Beispiel passieren, bevor dein Programm gestartet wird. Oder wenn du mal einen Fehler im Programm hast. Du solltest vor die beiden GPIOs einen 1000-Ohm-Widerstand schalten.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Moin jjk,


    Sri, den Schaltplan hatte ich nicht gesehen. Danke für den Hinweis.


    Was hast du an dem 3poligen Stecker an der Seite(GND/VCC/JD-VCC) angeschlossen bzw gebrückt?


    Ich würde es so probieren:

    Auf der Optokopplerseite sollten, meiner Meinung, nur 3,3V sein. Also 3,3V an den VCC. Der Widerstand auf der Relaiskarte sollte als Strombegrenzer ausreichen.

    Und die 5V aus dem Meanwell an den JD-VCC. Die beiden GND(RPi und Meanwell) zusammen verbinden. Dann, natürlich KEINEN Jumper auf der 3poligen Leiste.


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Ein bisschen Bedenken hätte ich mit 5,2 Volt am 5-V-Pin. Der Pi braucht die 5,1 eigentlich nur, weil der eine oder andere Verlust auf dem Weg bis zur Platine auftritt (Kabelwiderstand, Polyfuse, Verpolungsschutz oder sowas, vermute ich). An den 5-V-Pin würd ich auch nur 5 Volt anlegen - zumal das Mean Well Netzteil geregelt ist und mit 6,5 A die Spannung ganz sicher halten kann. Andererseits dürften 4% Überstpannung den Pi nicht gleich sterben lassen.

    Ich habe das damals so stark aufgedreht, da ich undervoltage hatte. Das lag dann aber, wie ich erst später erfahren habe, daran, dass die Versorgung über die GPIOs begrenzt ist. (1A pro Pin?). Da mir beim alten Pi der USB-C Stecker abgebrochen ist, hatte ich da keine andere Möglichkeit. Den neuen werde ich dann wieder über USB-C Versorgen.



    Was hast du an dem 3poligen Stecker an der Seite(GND/VCC/JD-VCC) angeschlossen bzw gebrückt?

    Der Jumper ist ebenfalls im Schaltbild im 1. Beitrag zu sehen.

    1. Version: Jumper zwischen VCC und JD-VCC

    2. Version: Kein Jumper, JD-VCC auf 5V

  • Moin!


    Ich habe meine Vorgehensweise beschrieben. Mehr werde ich nicht dazu schreiben.


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

    Edited once, last by Bernd666 ().

  • Und hier auch nur so als Möglichkeit: Adapter zur Ansteuerung einer Relaiskarte

    Das würde dann nur aus einem Active Low ein Active High machen, richtig? Ich habe mich jetzt eigentlich schon an das "umdrehen" gewöhnt ;)

    Du solltest vor die beiden GPIOs einen 1000-Ohm-Widerstand schalten.

    Als Pullup, Pulldown oder zwischen Pin und S0?

  • Dazwischen natürlich, um den Strom zu reduzieren. Du hast doch dort schon Puöödowns. (Wozu eigentlich? Warum nutzt du nicht die internen des Pis?) Deine Frage offenbart, dass du noch reichlich wenig Erfahrung hast. Du solltest dir echt noch mal ein paar Grundlagen aneignen.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Wozu eigentlich? Warum nutzt du nicht die internen des Pis?

    In der Regel ist es sinnvoll, echte Widerstände in der Schaltung zu verbauen. Weil man die nicht vergisst softwareseitig zuzuschalten. Das Problem dabei ist, dass man nicht sicher sein kann, dass das immer und in jedem Fall funktioniert. Wenn eine Eingangsschaltung darauf angewiesen ist, dann kann es zu einer Fehlfunktion führen, wenn der Widerstand fehlt. Insofern ist es besser, externe Widerstände zu verwenden. Da sieht man auch das sie vorhanden sind.

    Deine Frage offenbart, dass du noch reichlich wenig Erfahrung hast. Du solltest dir echt noch mal ein paar Grundlagen aneignen.

    Ich möchte eben auf Nummer sicher gehen und nicht nochmal einen Pi zerschießen

  • Dieser Unsinn aus dem Elektronik-Kompendium wird immer wieder zitiert. Wenn du vergisst, die Pullups softwareseitig zuzuschalten, kannst du in deinem Programm auch alle möglichen anderen Dinge vergessen. Was für ein Quatsch. Wir verwenden auch keine Wurfanker im Auto, weil wir mal vergessen könnten, wo die Bremse ist.


    Ja eben... wenn du deine Pis nicht killen willst, solltest du dir ein paar Grundlagen so sicher draufschaffen, dass Fragen auf diesem Niveau möglichst gar nicht mehr auftreten.


    Deine Schaltungen sind (bis auf die beiden genannten Schutzwiderstände) in Ordnung. Wenn die GPIOs wirklich kaputt sind, musst du an anderer Stelle was falsch gemacht haben. Vielleicht beim Umstecken versehentlich mal einen Falschen Pin erwischt...

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Spalte "Pull" macht ganz offensichtlich eine Aussage über die Schaltung des Pullup oder Pulldown-Widerstandes aber nicht darüber, ob der GPIO auf High oder low steht.

    Hier scheinen mir eher die Register GPLEV0 und GPLEV1 relevant - und die besagen für alle GPIOs einen Resetzustand von 0 = low.


    Aber man kann ja mal wilde Behauptungen in die Welt setzen. Wenn keiner widerspricht, ist man der allwissende Held.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Im Datenblatt steht dies:


    The Alternate function table (Table 94) also has the pull state (pull-up/pull-down) which is applied after a power down


    Wenn also keiner etwas im ausgeschaltetem Zustand des RPi's an diesem Zustand ändert, dann sollte dieser Zustand auch noch beim Einschalten aktuell sein. Die Frage ist nur für wie lange.

  • Was hat denn der Pull-State mit dem Level zu tun???

    Der Pull State ist nur bei Input relevant. Bei Output geht es um den Level der Treiber. Und die sind gemäß Registertabelle GPLEV0 und GPLEV1 alle auf 0, was low entspricht.

    Allerdings stimme ich zu, dass dies nur für das SOC nach dem Reset oder Kaltstart gilt. Was danach durch weitere Hardware oder Software geschieht, ist nicht gesagt.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Was nichts daran ändert, dass der Pullup State keine Aussage über den Spannungslevel des GPIO im Output-Mode macht, sondern über die Pullup- oder Pulldown-Beschaltung im Input-Mode.

    Für die Relaisansteuerung ist aber der Output-Mode entscheidend. Insofern ist der Link und die Aussage hier irrelevant und im Zweifel verwirrend falsch.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!