Forum: Mikrocontroller und Digitale Elektronik Interrupt Atmega168


von Peter K. (amp65)


Lesenswert?

Hallo,
ich möchte am Atmega168 einen ext. Interrupt am PCint18 (PD2) auslösen, 
fallende Flanke.
Er löst aber bei beiden Flanken aus.
Wo liegt mein Fehler?

Config Int2 = Falling
Enable Interrupts
Enable Pcint2
On Pcint2 Interrupt2
Pcmsk2.2 = 1

Danke Peter

von Falk (Gast)


Lesenswert?

> ich möchte am Atmega168 einen ext. Interrupt am PCint18 (PD2) auslösen,
> fallende Flanke.
> Er löst aber bei beiden Flanken aus.
> Wo liegt mein Fehler?

Wenn die Konfiguration wirklich stimmt dann prellt wahrscheinlich dein 
Signal. Woher kommt es? Von nem Taster? Lange Leitung?

MfG
Falk

von Peter K. (amp65)


Lesenswert?

Hallo Falk,
mein Signal kommt von einem Microtaster, der auf der selben Platine 
sitzt.
Habe ihn schon mit einem C 100n entprellt.
Der Int reagiert aber immer noch auf beide Flanken.
Kann man die Flanken direkt über ein Register auswählen?
Und über welches?
Wie müssen die Bit`s für Pcint2 fallende Flanke sitzen?
Gruß Peter

von A.K. (Gast)


Lesenswert?

Ist dieses Verhalten beim "pin change" Interrupt nicht normal? Ich 
vermute, dass "Int2" und "Pcint2" zwei verschiedene Paar Stiefel sind - 
der erste ist wohl der althergebrachte flanken/pegeltriggerbare 
Interrupt-Eingang, der zweite der nur bei neuen Devices zu findende "pin 
change" Interrupt.

von johnny.m (Gast)


Lesenswert?

Die Pin-Change-Interrupts reagieren afaik generell auf beide Flanken. 
Wenn Du was Flanken-sensitives machen willst, musst Du entweder in der 
ISR den Pinzustand abfragen oder einen externen Interrupt benutzen. Bei 
letzteren kann man einstellen, ob sie auf pos., neg. Flanke oder 
Low-Pegel reagieren sollen. Generell aber wieder mal anzumerken: Externe 
Interrupts sind zur Abfrage von mechanischen Kontakten eigentlich eher 
ungeeignet. Besser mit nem Timer ne Zeitbasis erzeugen und alle paar zig 
Millisekunden die Taster einlesen. Dann kann man sich den ganzen 
Entprell-Kram sparen.

von johnny.m (Gast)


Lesenswert?

A.K. hat natürlich auch recht: Du schmeißt da in Deinem Programm was 
durcheinander! Der Pin-Change-Interrupt 2 und der externe Interrupt 2 
haben nichts miteinander zu tun! Und außerdem hat der Mega168 afaik gar 
keinen externen Interrupt 2...

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.