Forum: Mikrocontroller und Digitale Elektronik Pin Change Interrupt


von Wilfried H. (Gast)


Lesenswert?

Hallo,

ich habe eine Frage bezüglich eines Atmel Atmega48 Controllers.

Was bedeutet eigentlich genau die Sache mit PIN Chance Interrupt?

Vielen Dank schon mal im Voraus!

von Frank L. (hermastersvoice)


Lesenswert?

Das ist die Chance einen Interrupt zu bekommen wenn sich am Pin was 
ändert.

von Uwe B. (boerge) Benutzerseite


Lesenswert?

MoinMoin,

PCINT bietet die Möglichkeit an JEDEM Pin deines Atmels mit einem 
Pegelwechsel einen entsprechenden Interrupt auszulösen. Hier ein kurzes 
Beispiel (für einen Mega644 PCINT für Pin7 an Port A:
1
/* Interruptroutine PCINT */
2
ISR(PCINT0_vect)
3
{
4
...
5
}
6
7
...
8
/* PCINT initialisieren */
9
DDRA &= ~(1 << PA7);  
10
PCMSK0 |= (1 << PCINT7);
11
PCICR  |= (1 << PCIE0);
12
...

Siehe auch die Doku für deinen Atmel und avr-libc...

Grüße Uwe

von Wilfried H. (Gast)


Lesenswert?

Hallo,

erstmal danke für Eure schnelle Antwort.
Nur nochmal dumm gefragt, hoffe ich habs jetzt verstanden!

1. Falls ich nur PORT A Pin 7 als INT initialisiere, ist dieser
Interrupt vergleichbar mit dem am z.B. INT0 Eingang?

2. Ich kann am PORT A Pin 4 + Pin 5 + Pin 6 auf einen Pin Change INT
initialisieren und die entsprechende ISR wird abgearbeitet, sobald sich 
einer dieser 3 PIN´s irgendwie ändert?

Danke wiedermal im Voraus!

Wilfried H.

von Uwe B. (boerge) Benutzerseite


Lesenswert?

MoinMoin,

> Nur nochmal dumm gefragt, hoffe ich habs jetzt verstanden!
>
ich habe auch eine Weile gebraucht, ehe ich es verstanden habe und die 
richtigen Register gefunden habe, die man initialisieren muß...

> 1. Falls ich nur PORT A Pin 7 als INT initialisiere, ist dieser
> Interrupt vergleichbar mit dem am z.B. INT0 Eingang?
>
ja.

> 2. Ich kann am PORT A Pin 4 + Pin 5 + Pin 6 auf einen Pin Change INT
> initialisieren und die entsprechende ISR wird abgearbeitet, sobald sich
> einer dieser 3 PIN´s irgendwie ändert?
>
richtig, der Interrupt wird ausgelöst sobald sich an irgendeinem Pin des 
Port A sich etwas ändert (vorausgesetzt die sind als Eingänge 
initialisiert). Du mußt dann in der ISR herausfinden, welcher Pin es 
war.

Was ich noch nicht herausgefunden habe, ist, wie man festlegen kann, bei 
welcher Pegelflanke (L->H oder H->L) der Interrupt ausgelöst wird 
(analog INT0). Vielleicht weis das jemand hier...

Grüße Uwe

von Johannes M. (johnny-m)


Lesenswert?

Uwe Berger wrote:
> Was ich noch nicht herausgefunden habe, ist, wie man festlegen kann, bei
> welcher Pegelflanke (L->H oder H->L) der Interrupt ausgelöst wird
> (analog INT0). Vielleicht weis das jemand hier...
Geht nicht. Pin Change Interrupts reagieren grundsätzlich auf jede 
Änderung. Eine Abfrage, welche Flanke es war, muss man in Software 
machen.

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.