Eine Methode, die ich verwendet habe, nutzt die kapazitive Natur von CMOS-Eingängen.
simulieren Sie diese Schaltung - Schaltplan erstellt mit CircuitLab
In dem Stromkreis über dem Schalter kann der Pulldown-Widerstand im geschlossenen Zustand die Eingangskapazitäten des GPIO auf Masse laden / entladen.
Der Trick bei dieser Schaltung besteht darin, die bidirektionale Natur eines GPIO zu verwenden, um den Eingang auf einem logisch hohen Pegel zu halten, wenn der Schalter offen ist.
Die Steuerroutine schaltet den Stift periodisch auf einen hohen Pegel oder aktiviert kurz das Hochziehen, lange genug, um eine Ladung der Kappen aufrechtzuerhalten. Der Eingangsstift wirkt dann wie ein dynamisches Speicherbit und hält bei den meisten Geräten diese Ladung für eine beträchtliche und verwendbare Zeitdauer.
Bei korrekter Konfiguration entlädt sich die Ladung auf dem Pin schneller als die Aktualisierungsrate, wenn die Taste gedrückt wird. Dieser Zustand kann dann als Teil des Auffrischungsalgorithmus als ein Lesevorgang vor der Auffrischungsoperation erkannt oder zum Auslösen eines Interrupts verwendet werden.
Während des Auffrischimpulses wird kurz Strom verbraucht, um sowohl die Kondensatoren als auch den Widerstand aufzuladen und zu schalten, wenn dieser geschlossen ist. Die Länge des Auffrischimpulses ist jedoch kurz und die Abfragefrequenz führt dazu, dass der Auffrischstrom relativ unbedeutend ist.
Offensichtlich ist diese Methode aktiv. Wenn das Mikro in den Ruhezustand versetzt wird, ist der Zustand des Schalters beim Aufwachen unbestimmt. Der erste Auffrischungszyklus nach dem Aufwecken muss den gelesenen Pin ignorieren. Diese Methode sollte auch nicht zum Aufwecken des Mikros verwendet werden. Vor dem Zubettgehen ist es auch ratsam, den Stift als niedrigen Ausgang zu aktivieren, um ihn im stromlosen Zustand zu parken.
Zum Lesen von statischeren Schaltern, wie z. B. Einrichtungs-DIP-Schaltern, kann eine dedizierte Routine anstelle eines kontinuierlichen Auffrischungszyklus verwendet werden. Nach dem Lesen sollten die GPIO-Pins in einem aktiven niedrigen Ausgangszustand (Nullstrom) "geparkt" werden, um das Problem der schwebenden Eingänge zu vermeiden.
HINWEIS: Diese Technik leidet ein wenig unter Rauschempfindlichkeit, wenn die Spurenlängen lang sind und sich durch einen verrauschten Bereich bewegen. Daher sollte R1 in der Nähe des Eingangsstifts liegen. Ich würde es jedoch nicht empfehlen, wenn Sie einen Schalter in einiger Entfernung an einer Frontplatte anbringen möchten, es sei denn, Sie fügen dem Pin eine zusätzliche Kapazität hinzu.