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 #4016895
Lesenswert?
• ▲
▼
muss ich da jetzt dann jedes mal nach dem letzten zustand abfragen?
1
ISR(INT0_vect){
2
   thisState = INT0pinAbfrage;
3
   if(lastState == thisState)
4
   {
5
      lastState = thisState;
6
      return;
7
   } 
8
....
9
anderer code
10
....
11

12
}
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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.