Eingänge von MCP23017 schwanken

  • Hallo zusammen,
    ich bin begeistert vom raspberry pi und bin gerade dabei mein erstes eigenes Projekt umzusetzen. Allerdings habe ich ein Problem welches ich bisher nicht selber lösen konnte :s

    Ich benutze den MCP23017 als Port-Expander und ein Modul, welches 3 Relais bereit stellt, dass Informationen über den aktuellen Zustand liefert (ist also nicht vorher einsehbar).

    Versorgt werden die Relais mit den 3,3V vom Raspberry Pi. Die Relais schalten richtig (immer nur eins aktiv) und wenn ich diese einzeln mit einem Multimeter messe bekomme ich für das gerade aktive Relais eine Spannung von 3V (alle anderen sind 0v).

    Die Kabel vom Relais sind an GPB0 bis GPB2 angeklemmt. GPB3 bis GPB7 sind nicht belegt.

    Lese ich nun GPB* aus erhalte ich keine konstanten Werte. Das Relais was gerade aktiv ist liefert mir immer die logische 1 und schwankt nie. Aber die anderen 2 Pins, sowie die nicht belegten Pins, wechseln immer zwischen 1 und 0 (zufällig).

    Ich habe also nicht wirklich einen eindeutigen Input und kann damit nicht weiter arbeiten.
    Besonders verwirrend finde ich das Verhalten von den nicht benutzen Pins. Warum sind diese nicht immer 0?

    Ich habe mal das PullUp für alle Inputs aktiviert und bekomme dann für alle Pins konstant die 1. Das hilft mir ja aber nicht wirklich weiter und ich bin überfragt wie ich das Problem lösen kann. Wäre über jeden Tipp dankbar :helpnew:

    Ich glaube ja, dass ich einen PullDown basteln muss um diese Schwankungen zu vermeiden, allerdings weiß ich nicht genau wie ich diese anschließen muss :shy:

    Wäre über jeden Tipp dankbar :helpnew:

    Einmal editiert, zuletzt von AncientCredit39620 (23. Mai 2016 um 23:26)

  • Moin,
    erstmal: Hezlich Willkommen im Forum!!

    wenn du nicht willst das die Relais in irgendeinen beliebigen Zustand gehen und damit was schalten was sie nicht sollen, sollte man die Aus- und Eingänge, die man nutzt, durch pullup bzw. pulldown auf ein eindeutiges Level legen.

    Gruss 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.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Hallo Bernd,

    da mir die Relais beim Schalten eine Logische 1 liefern (durch die 3V), sollten alle anderen Inputs folglich auf 0 gezogen werden.
    Kann man das nicht aber irgendwie so beeinflussen, dass ich die internen Pull-up's verwenden kann und die Logische 1 die durch ein Relais erfolgt invertieren kann? Weil sonst kann ich sie ja nicht unterscheiden :s

    Wenn dies nicht geht: Muss ich dann noch von jedem Input einen Widerstand zu GND legen damit ein Pull-down wirkt? Sry für diese blöde Frage, aber ich abe sowas noch nie gemacht :rolleyes:

    Edit: Das Problem ist, dass das Relais welches aktiv ist bei aktiviertem PullUp nicht auf 0V zieht. Ich habe das Relais ja auch nirgends mit GND verbunden, da kein Anschluss vorhanden dafür.....

    Edit2: https://www.elektronik-kompendium.de/sites/raspberry-pi/2006051.htm
    Hier ist es super erklärt. Hat sich somit denke ich erledigt. Werde es morgen ausprobieren und berichten!

    Einmal editiert, zuletzt von AncientCredit39620 (24. Mai 2016 um 00:06)

  • Moin,
    ich muss sagen das ich noch nie mit dem Baustein gearbeitet habe. Beim groben Überlesen des Datenblatts habe ich gesehen das er interne pullup hat.

    Ich würde die internen Widerstände alles auschalten und externe nehmen. Wie ich oben schon geschrieben habe, hast du damit eindeutige Zustände an den Ausgängen des Bausteins geschaffen.
    Testweise nimm einen 10K Widerstand und lege den zwischen Ground(Minus) und Ausgang des Bausteins. Das muss du natürlich bei allen benutzten Ausgängen machen.

    Gruss 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.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Der MCP23017 hat interne Pullups aber keine internen Pulldowns. Wenn Du unbedingt möchtest, dass die Pegel garantiert auf 0 liegen, musst Du externe Pulldowns anbringen, die vom Eingang (GPIO des MCP) gegen GND gehen. 10k sind da ein guter Wert. Aber nicht umsonst, sind in den Schaltkreisen "nur" Pullups vorgesehen. ohne eine Grundsatzdiskussion loszutreten, gehen die Hersteller davon aus (ich auch), dass die Verwendung von Pullups immer störungssicherer ist. Störimpulse auf high (z.B. Spannungsspitzen) generieren sich einfacher, als massebezogene Störungen (da muss der high Pegel auf low gezogen werden). Insofern sollte man einfach mit Pullups arbeiten und das in der Software berücksichtigen.


    Ich würde die internen Widerstände alles auschalten und externe nehmen. Wie ich oben schon geschrieben habe, hast du damit eindeutige Zustände an den Ausgängen des Bausteins geschaffen.
    Testweise nimm einen 10K Widerstand und lege den zwischen Ground(Minus) und Ausgang des Bausteins. Das muss du natürlich bei allen benutzten Ausgängen machen.

    Gruss Bernd

    Pullups und Pulldowns sind nur bei Eingängen sinnvoll. Als Ausgang haben GPIOs immer einen definierten Zustand.


  • ohne eine Grundsatzdiskussion loszutreten, gehen die Hersteller davon aus (ich auch), dass die Verwendung von Pullups immer störungssicherer ist. Störimpulse auf high (z.B. Spannungsspitzen) generieren sich einfacher, als massebezogene Störungen (da muss der high Pegel auf low gezogen werden). Insofern sollte man einfach mit Pullups arbeiten und das in der Software berücksichtigen.

    Gibt es denn eine Möglichkeit das aktive Relais auf 0 zu kriegen? Ich habe auf dem Relais nur die 3,3V angelegt (es gibt keinen Anschluss für GND). Sobald das Relais aktiv ist liegt keine 0 sondern eine 1 an was für mich die pullups nicht verwendbar macht.

  • Du hast also den Relaiskontakte zwischen 3,3V und GPIO? Besser wäre es, das ganze zwischen GPIO und GND zu setzen. Dann wäre, wenn der Relaiskontakt offen ist der Zustand am GPIO high und wenn er geschlossen ist low. Natürlich nur, wenn der Pullup an ist. Sonst bleibt Dir wirklich nichts anderes übrig, als Dir GND ranzuholen und vom GPIO jeweils einen 10k dahin zu basteln.

  • Wow danke. Das war dann wohl doch zu einfach um einfach selbst darauf zu kommen. Klar kriegt man 0v indem man nicht 3,3v anschliesst sondern Ground.

    Danke für den Hinweis!


  • Gibt es denn eine Möglichkeit das aktive Relais auf 0 zu kriegen? Ich habe auf dem Relais nur die 3,3V angelegt

    ist es kein 1xUM Relais?

    zeig doch mal was du wie verschaltet hast mit Bauteile benennen, ergo mache einen Schaltplan

    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)

    Einmal editiert, zuletzt von jar (24. Mai 2016 um 12:48)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!