PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Atmega 168: Unterschied PCINT19 und INT1



schorsch_76
16.10.2012, 20:52
Hallo zusammen,

momentan bastle ich grad an einer neuen Schaltung mit einem Atmega168. Jetzt hab ich an Pin PD3 einen IR Empfänger angeschlossen. Dieser soll Interrupts auslösen um das Signal zu dekodieren. Jetzt kann bsp. PD3 sowohl PCINT19 und INT1 auslösen. Beide sind doch einfach IRQ Routinen welche beim Wechsel des Status an diesem Pin gestartet werden. Gibts da einen Unterschied???

Gruß
Georg

Kampi
16.10.2012, 21:55
Hey,

schau mal hier:

http://www.atmel.com/Images/doc2545.pdf

Auf Seite 56 siehst du die Interruptvektoren.
Bei dem Mega168 kannst du jeden Pin mit einem Pinchange Interrupt versehen, der auslöst sobald der Pegel am Pin wechselt.
Der INT1 ist von der Hierarchie her höher gestellt als der Pinchange Interrupt und das ist der Unterschied zwischen den beiden.

Besserwessi
16.10.2012, 21:56
Beim Pin Change Interrupt hat man nur die Möglichkeit auf jede Änderung zu reagieren - für Int1 gibt es auch die Möglichkeit nur auf eine Flanke zu reagieren. Es sind auch nur 3 Pin Change Interrupts für jeweils Gruppen von bis zu 8 Pins. Wenn man also "Pcint19" nutzt, bräuchte man also zusätzliche Software falls man noch zusätzlich PCINT17,18,20,...23 nutzen will. Sonst ist da kein wesentlicher Unterschied. Welchen Interrupt man nutzt ist weitgehend Geschmackssache.

ePyx
17.10.2012, 05:32
Per Software kann man auch bei einem Pin-Change-Interrupt auf eine Pseudo-Flanke reagieren. Größter Nachteil ist, dass sie wesentlich langsamer sind.

schorsch_76
17.10.2012, 10:08
Danke! Dann werd ich den INT1 IRQ anstatt dem PCINT19 verwenden :)

Gruß
Georg

Searcher
18.10.2012, 10:46
... Pin-Change-Interrupt auf eine Pseudo-Flanke reagieren...

@ePyx: Mir geht die Pseudo-Flanke nicht aus dem Kopf :confused: Was meinst Du damit?

Gruß
Searcher

021aet04
18.10.2012, 10:55
Was eine Pseudo Flanke genau ist weiß ich zwar auch nicht. Ich könnte mir aber vorstellen das er meint das du den Pegel auslesen musst.

Als Beispiel du willst auf eine steigende Flanke reagieren.
Der INT wird bei steigender und fallender Flanke ausgelöst. Du musst deswegen den Pegel auslesen.
Wenn PCINT ausgelöst ist und der Pegel ist high => entspricht einem INT mit steigender Flanke
Wenn PCINT ausgelöst ist und der Pegel ist low => ignorieren, da du die steigende Flanke brauchst (wäre ein INT mit fallender Flanke)

Der Vorteil des PCINT wäre das du auf mehrere Eingänge reagieren kannst (würde aber auch mit dem normalen INT mit externer Hardware funktionieren).

MfG Hannes

Searcher
18.10.2012, 12:41
Danke Hannes,
das leuchtet mir ein. Hab mich wohl zu sehr von dem Begriff gefangen gelassen.

Gruß
Searcher

ePyx
18.10.2012, 12:57
Genau das meinte ich. In der ISR wird dann der Zustand des Pins abgefragt und abhängig davon halt weiter gearbeitet.

Das beim Pin-Change-Interrupt Pins zu Gruppen zusammengefasst werden kann auch ein Nachteil sein.
Schließlich muss erst geprüft werden welcher Pin die Reaktion ausgelöst hat.

for_ro
18.10.2012, 19:56
Aber was meinst du mit dem Zusatz, "... dass sie wesentlich langsamer sind"?
Nur weil sie immer auf beide Flanken reagieren oder weil du erst noch prüfen musst, welcher Pin es war, wenn du mehrere zulässt?

ePyx
19.10.2012, 06:07
Guck dir die zugehörigen Abbildungen zum Timing im Datenblatt an. Kannst es auch spaßeshalber selbst Testen.

Zudem kommt noch, dass mehre Pins in einem Vektor zusammengefasst werden. Bei INT/INT1/INTX hast du nur einen Pin bei PCINTX bis zu acht die den IRQ auslösen.