Gast
#52280
Hallo, Im Tutorial steht das eine Signaländerung an einem Pin von high auf low oder umgekehrt einen Interrupt auslösen kann. Kann jeder I/O-Pin einen Interrupt auslösen? (Beim Mega16) mfg Klaus Mehrle
|
Anzeige
|
Kann jeder I/O einen Interrupt auslösen?
Gast
#52280
Hallo, Im Tutorial steht das eine Signaländerung an einem Pin von high auf low oder umgekehrt einen Interrupt auslösen kann. Kann jeder I/O-Pin einen Interrupt auslösen? (Beim Mega16) mfg Klaus Mehrle
Gast
#52281
Einfache Antwort beim Mega16 nein. Die einzelnen Bedingungen unter der einzelne I/O Port's Interupts auslösen können sind im Datenblatt ausführlich beschrieben. Mit den Eingängen INT0 und INT1 geht's in jedem Fall.
Gast
#52282
Im Prinzip geht es schon, denn man kann ja den betreffenden Pin regelmäßig abfragen (z. B. per Timer-Interrupt) und ggf. ein Interrupt-Flag setzen und so einen Interrupt auslösen. Das wäre dann aber indirekt und schlechter als das Flag direkt von einem interruptfähigen Eingang setzen zu lassen.
Gast
#52283
Also nen Int-Flag setzen intern per Software geht beim AVR definitiv nicht, sondern nur löschen.
Gast
#52284
Achso; so genau kenn ich AVR nicht. Dann bleibt noch ein Software-Interrupt (über Timer-ISR), aber auch den sollte man vermeiden. Einen Quasi-Interrupt kann man ja auch so hinbekommen, dass man per Timer-Interrupt häufig überprüft und die Aktionen bei einer Eingangsänderung dann in der Timer-ISR abgearbeitet.
Gast
#52285
Wenn ich nun mehr als 2 Taster anschließe, bei denen der Controller bei einem Tastendruck sofort auf eine Unterroutine umschalten soll wie kann ich das dann lösen? mfg Klaus Mehrle Ein Mensch braucht minimal etwa 300ms, um auf etwas zu reagieren und z.B. eine Taste zu drücken. Wenn dann durch einen Timerinterrupt nochmal 10ms dazukommen ist das ja immer noch "sofort". Um Fehlschaltungen zu vermeiden, sollte man die Tasten eh noch entprellen (debouncen). Dazu findest Du z.B. von mir in der Codesammlung ein Beispiel für bis zu 8 Tasten gleichzeitig. Peter
Gast
#52287
Hallo Beim MEGA162 gibt 'nen sog. PIN-CHANGE-Interrupt f?r alle pins am port A und am Port C (vergl. Datenblatt S. 82) also f?r insgesamt 16 pins (PCINT15..0) Hab's im Rahmen eines BASCOM-Programms im Einsatz ! Gru? Guenter
Gast
#52288
einfach alle Eingänge, die überwacht werden sollen, über ein OR - Glied an INT0 legen. In der Interrupt-Routine dann als erstes den Port lesen und feststellen, welcher Eingang sich geändert hat. Die einfachste Variante ein OR-Gliedaufzubauen klappt schon mit einer Diode/Eingang.
Gast
#52289
Hi, eine etwas andere Variante waere mit einem I2C Bus I/O Expander. Mfg Dirk Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|