Forum: Mikrocontroller und Digitale Elektronik Pin Change Interrupts - ATmega168 - Pin fesstellen?


von Bastian H. (bastianh)


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

von peter dannegger (Gast)


Lesenswert?

Der PCI eignet sich bestenfalls zum Aufwachen, falls man Strom sparen
muß (Batteriebetrieb).

Zum Unterdrücken von Störimpulsen (Elektrostatik) und zum Entprellen
eignet er sich aber überhaupt nicht, das geht am besten mit einem
Timerinterrupt:

http://www.mikrocontroller.net/forum/read-4-310276.html#new


Peter

von Rahul (Gast)


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.

von Bastian H. (bastianh)


Lesenswert?

Danke für die schnellen Antworten.

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

von Rahul (Gast)


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.

von Bastian H. (bastianh)


Lesenswert?

Danke für die Ergänzung. Hab mir schon den Quellcode von Peter
(Dannegger) zur Entprellung geholt und werd mal versuchen den zu
verstehen.

Danke euch nochmal für die Antworten!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.