Forum: Mikrocontroller und Digitale Elektronik Was ist ein Level Interrupt?


von justav (Gast)


Lesenswert?

Hallo,

beschäftige mich gerade mit dem Anwenden der Stromsparmodi, die die AVRs 
so hergeben. Der Powerdown klingt sehr gut, insbesondere gefällt mir der 
Stromverbrauch.

Aber:
In der Doku heißt es, dass ich den AVR dann zum Beispiel mit einem 
Level-Interrupt an INT0 aufwecken kann.

Was ist denn der Unterschied zwischen einem "normalen" Interrupt, wie er 
durch einen Taster o.ä. mit Flankenerkennung ausgelöst würde und einem 
Level Interrupt? Bzw. was ist das überhaupt?

Danke für kurze Hilfe.

von (prx) A. K. (prx)


Lesenswert?

Level/Pegel: Interrupt-Anforderung ist aktiv, so lange der Pegel 
anliegt.

von Einer K. (Gast)


Lesenswert?

Der Levelinterrupt löst aus, wenn ein vorbestimmter Level anliegt.
Gerne auch mehrfach.....
Darum heißt er Levelinterrupt.

von justav (Gast)


Lesenswert?

Als Interrupt, der auf eine Änderung reagiert, kann ich den also nicht 
setzen?

von Carl D. (jcw2)


Lesenswert?

Arduino F. schrieb:
> Der Levelinterrupt löst aus, wenn ein vorbestimmter Level anliegt.
> Gerne auch mehrfach.....
> Darum heißt er Levelinterrupt.

Und zur Erkennung eines Levels braucht man keinen Takt 
(->tiefererSchlaf),
für eine Flanke manchmal schon.

von justav (Gast)


Lesenswert?

Würde gerne vermeiden, dass nach einem kurzen Ping der Interrupt gleich 
5-fach anschlägt.

von (prx) A. K. (prx)


Lesenswert?

Eine Sache kann verwirren: INT0/1 wecken nur im Level-Modus auf, nicht 
aber im Flankenmodus. Pin-Change hingegen weckt auf, obwohl das 
natürlich ein Flanken-Modus ist.

Das dürfte historische Gründe haben. Der Flanken-Interrupt von INT0/1 
ist synchron implementiert und benötigt einen Takt. Diese Eigenschaft 
wurde wohl aus Familienkompatbilität über die Jahre und Modelle 
gerettet. Die spätere Pin-Change Erkennung hingegen wurde von Anfang an 
so asynchron implementiert, damit ein Wakeup darüber möglich ist.

von Keks (Gast)


Lesenswert?

Bevor du den nicht abgearbeitet hast, kann der Interrupt nicht erneut 
auslösen. Um nach Abarbeitung weiteres Auslösen zu vermeiden, den 
Interrupt in der Service-Routine deaktivieren.

von justav (Gast)


Lesenswert?

Keks schrieb:
> Bevor du den nicht abgearbeitet hast, kann der Interrupt nicht
> erneut auslösen. Um nach Abarbeitung weiteres Auslösen zu vermeiden, den
> Interrupt in der Service-Routine deaktivieren.

Genial! Danke.

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.