MCP23017 verursacht keine Interrupts mit einem normalerweise offenen Schalter beim Einschalten

Ich arbeite an einem Projekt, bei dem ich zwei 4x4-Tastenfelder verwende. Ich müsste zwei MCP23017 für Eingangsunterbrechungen verwenden, um die 32 Tasten zu unterstützen. Ich verwende ein Netduino und stoße auf ein Problem, bei dem ich mir nicht sicher bin, ob es mit der Software oder der Hardware zusammenhängt.

Ich verwende diese Website als Leitfaden, um den MCP23017 zu verstehen und zu konfigurieren, und befolge alle Schritte, einschließlich des folgenden Diagramms:

Diagramm

Das Diagramm zeigt die eingestellte Adresse, SDA und SCL haben einen Widerstand, Reset ist vorgespannt, ein Pin auf dem Netduino ist so eingestellt, dass er den Interrupt handhabt, und ein Mikroknopf wird verwendet, um die Interrupt-Funktionalität zu testen.

Ich habe den MCP23017-Pin für den Schalter als Eingang eingestellt, ihn so eingestellt, dass er einen Pull-up-Widerstand verwendet, und dann den Pin als Interrupt eingestellt. Der Pin auf dem Netduino ist so eingestellt, dass er auch einen Pull-Up-Widerstand verwendet und Interrupts verursacht, wenn er niedrig ist. Dies funktioniert einwandfrei, solange der Netduino mit geschlossenem Schalter hochfährt . Wenn der Schalter offen ist (wie er normalerweise offen ist), werden niemals Interrupts ausgelöst. Ich muss das Netduino starten, während ich die Mikrotaste drücke, um das gewünschte Verhalten zu erhalten. Ich bin mir nicht sicher, woran das liegt. Ich zeige das gleiche Verhalten wie die Person, die unten auf dieser Seite kommentiert .

Gibt es dafür eine Soft- oder Hardwarelösung?

Antworten (1)

1.7.5 UNTERBRECHUNGSBEDINGUNGEN Es gibt zwei mögliche Konfigurationen, die Unterbrechungen verursachen (konfiguriert über INTCON):

1. Pins, die für einen Interrupt-on-Pin-Wechsel konfiguriert sind, verursachen einen Interrupt, wenn ein Pin in den entgegengesetzten Zustand wechselt. Der Standardzustand wird zurückgesetzt, nachdem ein Interrupt auftritt und nachdem die Interrupt-Bedingung gelöscht wurde (dh nach dem Lesen von GPIO oder INTCAP). Beispielsweise tritt ein Interrupt auf, wenn ein Eingang von '1' auf '0' wechselt. Der neue Anfangszustand für den Pin ist eine logische 0, nachdem der Interrupt gelöscht wurde.

2. Pins, die für Interrupt-on-Change vom Registerwert konfiguriert sind, bewirken, dass ein Interrupt auftritt, wenn der entsprechende Eingangspin vom Registerbit abweicht. Die Unterbrechungsbedingung bleibt bestehen, solange die Bedingung besteht, unabhängig davon, ob INTCAP oder GPIO gelesen wird.