Level Interrupt in falling edge interrupt umwandeln

Gast #4016626
Lesenswert?

Hallo,
ich habe einen Attiny13A und möchte in in Power Down Modus versetzen und 
über den INT0 wieder raus holen. Leider habe ich übersehen, dass das nur 
mit einem Level Interrupt geht. Ich benötige aber einen Falling Edge 
interrupt. Parralel soll noch ein WDT Interrupt ohne System Reset als 
Timer laufen. Im Idle Modus funktioniert auch alles gut(mit dem Falling 
Edge Interrupt). Ich will, dass der MCU beim kurzen Drücken einschaltet 
und nach einer Zeit X oder 4sec gedrückt halten wieder ausgeht.
Meine Frage ist also: Wie kann ich softwareseitig aus einem Low Level 
Interrupt ein nicht blockierendes Falling Edge Interrupt machen, ohne 
das andere Interrupts ausgeschaltet werden?

Grüße,
Florian
#4016639
Lesenswert?

Flo schrieb:
> Hallo,
> ich habe einen Attiny13A und möchte in in Power Down Modus versetzen und
> über den INT0 wieder raus holen. Leider habe ich übersehen, dass das nur
> mit einem Level Interrupt geht. Ich benötige aber einen Falling Edge
> interrupt.

Das versteh ich jetzt nicht.
Warum brauchst du einen Falling Edge Interrupt?

Wenn du auf einen Taster drauf drückst, dann hast du doch eine gewisse 
Zeit lang einen konstanten Level. Der Level Interrupt reagiert, den 
deaktivierst du dann kurzerhand kurzfristig, machst dein Ding und legst 
den µC wieder schlafen.

So kurz kannst du händisch gar nicht auf einen Taster drücken, dass sich 
das für einen µC nicht als 'ist der Benutzer schon wieder auf der Taste 
eingeschlafen?' 'anfühlt'.
Moderator (Firma: Titel) Persönliche Seite #4016641
Lesenswert?

Flo schrieb:
> Wie kann ich softwareseitig aus einem Low Level Interrupt ein nicht
> blockierendes Falling Edge Interrupt machen
Du kannst doch einfach den Interrutp beim Verlassen des Sleep-Modes auf 
Flanke umschalten und vor Eintreten in den Sleep-Mode wieder auf Pegel 
umstellen...

BTW: es ist üblicherweise eine schlechte Idee, Taster im "normalen" 
Programmablauf mit Interrupts abzufragen. Polling in der Main-Loop ist 
hier das langfristige Mittel zum Erfolg.
Gast #4016887
Lesenswert?

ja das ist mir klar.
ich versuch es mal so:
T= Taster, W = WDT, X = Zähler A= Ausgang
Szenario 1: Taster wird kurz gedrückt und WDT und Ausgang wird 
eingechaltet. Der MCU befindet sich fast die ganze Zeit im Tiefschlaf. 
Der WDT macht einen Interrupt jede Sekunde und zählt einene Variable 
hoch. Nach einer Zeit X (~15min) wird wird der WDT und der Ausgang 
ausgeschaltet.

1 Sekunden Takt:
T - W X A
1 - 0 0 0
0 - 1 1 1 Startet bei Falling edge.
1 - 1 2 1
1 - 1 3 1
1 - 1 4 1
...
1 - 1 9 0
1 - 0 0 0 ist der WDT aus gibt es nurnoch den INT0 Interrupt


Szenario 2: Taster wird lang gedrückt. Falls WDT und/oder Ausgang 
ausgeschaltet sind, werden diese eingeschaltet. Der MCU befindet sich 
fast die ganze Zeit im Tiefschlaf. Der WDT macht einen Interrupt jede 
Sekunde und zählt einene Variable hoch, falls der Taster wärend des WDT 
interrupts gedrückt ist, zählt er einen "Totzähler" hoch. Nach einer 
Zeit Xtot (~5sec) wird wird der WDT und der Ausgang ausgeschaltet. Das 
ist die vorzeitige Abbruchfunktion. Der ander Zähler läuft parralel 
dazu, Verhalten wie in #1.


~ = egal, t= Totzähler

T - W t A
1 - ~ 0 ~
1 - ~ 0 ~
0 - 1 1 1 Zähler startet bei Falling Edge und wird auf Null gesetzt.
0 - 1 2 1
0 - 1 3 1
0 - 1 4 1
0 - 0 5 0 ist der WDT aus gibt es nurnoch den INT0 Interrupt

Ich hoffe das hat es verständlicher gemacht.

Lg,
Florian
Gast #4017379
Lesenswert?

Flo schrieb:

> ich habe einen Attiny13A und möchte in in Power Down Modus versetzen und
> über den INT0 wieder raus holen. Leider habe ich übersehen, dass das nur
> mit einem Level Interrupt geht. Ich benötige aber einen Falling Edge
> interrupt.

Dann benutzt du eben nicht den INT0, sondern PCINT1. Der liegt auf genau 
demselben physischen Pin und kann per Flanke das Teil aus dem Tiefschlaf 
holen.

Wie wär's mal mit vorbeugender Lektüre des Datenblatts?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren