Ich baue eine Schaltung mit einem Arduino Mega und einfachen IC-Chips (z. B. 7432), aber ich muss viele Leitungen auf Interrupt-Bedingungen und nicht genügend Pins am Atmel überwachen, also suche ich nach einer Möglichkeit, dies zu erweitern. Probleme treten auf, weil ich in der Lage sein muss, die Triggerbedingung für einige Leitungen basierend auf den Bedingungen von steigender Flanke auf fallende Flanke umzuschalten, und einige Leitungen nach der Wartung hoch bleiben, so dass ein Prioritätscodierer unter der Bedingung leiden würde, dass eine höhere Priorität vorliegt Interrupt würde eine niedrigere Priorität maskieren. Für das letztere Problem denke ich darüber nach, ein Register und einige Gates zu verwenden, um einige Interrupts zu deaktivieren, aber ich habe keine gute Lösung für das erstere. Hat jemand irgendwelche Vorschläge? Ich bekomme nach Bedarf neue Chips, daher wären Lösungen mit zusätzlichen ICs der Serie 7400 oder ähnlichem willkommen.
quelle
Antworten:
Ein Arduino Mega hat "nur" 24-Pin-Wechsel-Interrupts für seine 80 Pins. Dies kann jedoch für das Originalposter ausreichend sein, und er war sich dieser Möglichkeit möglicherweise nicht bewusst, da die „INT“ -Pins in der Arduino-Umgebung API-Unterstützung bieten, während die Pin-Wechsel-Interrupts dies nicht tun.
Hier ist ein ziemlich ausgefeilter Code zum Anhängen an Pinwechsel-Interrupts
quelle
Sie können einen programmierbaren Interrupt-Controller (PIC) wie den 82C59A verwenden . Es wird kaskadiert, wenn Sie mehr als die acht Interrupts benötigen, die es bereitstellt. Es ist ein bisschen altmodisch, aber ich denke, es wird alle Ihre Anforderungen erfüllen. Aus diesen Vorlesungsfolien :
Derzeit von Intersil produziert und bei Digikey auf Lager .
quelle
Ich würde einen E / A-Expander wie den MCP23008 oder den MCP23017 verwenden . Beide haben SPI- und I 2 C-Versionen; Für jeden Eingang können Interrupts konfiguriert werden (flankensensitiv, pegelsensitiv).
quelle
Ich weiß, dass diese Antwort etwas spät ist, aber ich beantworte sie für alle späten Leser dieser Frage.
Die Softwareversion zum Hinzufügen weiterer Interrupts besteht darin, einen "Pin Change Interrupt" durchzuführen . Es gibt Bibliotheken dafür, die es jedem Pin ermöglichen, einen Interrupt auszulösen, da der ATMega mit einer etwas cleveren Codierung fähig ist.
quelle