Pin Change Interrupts - ATmega168 - Pin fesstellen?

#330818
Lesenswert?

Hi,

ich bin noch recht neu auf dem Gebiet der mC also bitte entschuldigt
falls diese Frag doof ist.

Also ich benutze einen ATmega168 und Programmiere mit WinAVR. Ich
möchte mehrere Taster per Interrupt "abfragen". Funktioniert soweit
auch erstmal jetzt stellt sich mir nur die Frage: wie kann ich in der
Interruptroutine herausfinden welcher Pin den Pin Chanhe Interrupt
ausgelöst hat? Wenn ich mehrere Schalter(oder Taster) habe dann muss
ich ja feststellen können welcher den Interrupt ausgelöst hat.

Schon mal vielen Dank und freundliche Grüße
Bastian Hundt
Gast #330820
Lesenswert?

Entprellen und Interrupts ist nicht wirklich sinnvoll (siehe Peters
Post).
Wenn du allerdings quasi-störungsfreie Signale an den PCI-Eingängen
hast (z.B. Interrupt-Request-Leitungen von externen Bausteinen), dann
kannst du durch einfaches Einlesen des Ports (PINx) und bitweisem
Prüfens die Interrupt-Quelle herausfinden. Zumindest habe ich das
Datenblatt bzw. die PCI-Funktion bis jetzt so verstanden.
Gast #330822
Lesenswert?

>Dan werde ich doch wieder dazu übergehen die Tasten in einer Schleife
abzufragen.

so etwa:
Port in X einlesen
einen Moment WARTEN
Port in y einlesen
mach irgendwas, wenn x=y?

das WARTEN kann man durch einen regelmässigen Timer-Interrupt viel
besser machen, indem man man in der Interrupt-Routine den Port einliest
und guckt, ob sich etwas verändert hat. Wenn sich etwas verändert hat,
kann man ein Flag setzen und in der Hauptschleife darauf reagieren.
In der Codesammlung findet man zu dem Thema schöne Programme von Peter
Dannegger.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren