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!
Das ist die Chance einen Interrupt zu bekommen wenn sich am Pin was ändert.
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.