mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt bei Power Down Mode


Autor: Ted (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der ATtiny2313 weckt nach einem Power Down Mode zuverlässig auf. Dazu 
verwende einen 'low level' an INT1. Nur dumm das der AVR den Interrupt 
solang macht wie der der INT1 auf '0' liegt. Wie kann ich das Teil dazu 
bringen nur ein einziges Mal in die 'EXT_INT1' zu springen und dann nie 
wieder? Hardware mässig (Zeitglied mit Kondensator) geht nicht, da ich 
den Eingang im weiteren Verlauf auch länger auf '0' halten muss.

Ted

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du es dir leisten kannst, den Controller solange wach zu halten bis 
INT wieder inaktiv ist: INT1 im Interrupt erst auf positive Flanke 
einstellen, und wenn der kommt wieder zurück auf Pegel. Danach darf er 
dann wieder zur Ruhe gebettet werden.

Autor: Torsten Landschoff (bluehorn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Kaiser wrote:
> Wenn du es dir leisten kannst, den Controller solange wach zu halten bis
> INT wieder inaktiv ist: INT1 im Interrupt erst auf positive Flanke
> einstellen, und wenn der kommt wieder zurück auf Pegel. Danach darf er
> dann wieder zur Ruhe gebettet werden.

Hmm, wenn der Request evtl. mal wieder sehr schnell auf High geht, sehe 
ich die Gefahr, dass der AVR die positive Flanke verpasst (weil zu spät 
umkonfiguriert). Damit reagiert er dann auf den nächsten IRQ nicht. 
Könnte ungünstig sein...

Was spricht eigentlich dagegen, den pin change interrupt dafür zu 
verwenden? Wobei mir aus der Dokumentation nicht klar ist, ob der 
funktionieren kann. Denn eigentlich wird der ja erst auf die Clock 
synchronisiert.

Mal wieder ein faszinierendes Problem... :)

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

was hindert Dich, nach dem Aufwecken in der ISR diesen Interrupt 
auszuschalten und ihn vor dem Schlafen schicken, wenn geordnete 
Verhältnisse herrschen, wieder einzuschalten?

Gruß aus Berlin
Michael

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wie kann ich das Teil dazu
>bringen nur ein einziges Mal in die 'EXT_INT1' zu springen und dann nie
>wieder?

Deaktivier den Interrupt doch einfach im Interrupthandler über die 
entsprechenden I/O-Register.

Autor: Fred S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ted,

>...... Nur dumm das der AVR den Interrupt solang macht wie der der INT1
> auf '0' liegt. Wie kann ich das Teil dazu bringen nur ein einziges...

Vielleicht habe ich Dein Problem nicht richtig kapiert. Ich würde INT1 
einfach auf die fallende Flanke triggern lassen und hätte das Problem 
dann nicht.

Gruß

Fred

Autor: Ted (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Fred,
Aus einem 'Idel' mit SM1=0 und SM0=0 kann man den AVR auch mit Flanken 
aus seinen Schlaf holen. Aber ich will mehr Strom sparen und den 'Power 
Down' mit SM1=1 und SM0=0 verwenden (4mA Strom statt 9mA). Also geht 
ersteinmal nur der Low-Level zu verwenden. Irgend wie bekommt der µC 
nach so einem Schlafzustand aber nicht mit, das noch in der 
Interruptroutine noch direkt nach der Routine ein CLI (global Interrupt 
AUS) im eigentlich den Interrupt abgewöhnen soll.

Gruß Ted

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde in der Ext-Int-ISR den Sleep-Mode auf Idle setzen und den 
Ext-Int deaktivieren. Nun kann der AVR ganz gemütlich seine Arbeit 
machen, also Timer (und andere, wie UART, SPI, ADC, ...) -Inerrupts 
auslösen, bei Bedarf Jobs (wie Tastenentprellung) abarbeiten, zwischen 
den Jobs und Interrupt im Idle pennen gehen. Dabei einen Timeout 
herunterzählen, wenn nix passiert, also der Benutzer nix tut. Ist 
Timeout abgelaufen, dann Ext-Int aktivieren und Sleep-Mode auf 
Tiefschlaf umschalten. Nun bleiben Takt und Timer stehen und der AVR 
spart Strom, bis zum nächsten Ext-Int...

...

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Vielleicht habe ich Dein Problem nicht richtig kapiert. Ich würde INT1
>einfach auf die fallende Flanke triggern lassen und hätte das Problem
>dann nicht.

AVR erkennen keine Flanken, wenn sie schlafen. Das geht nur mit längeren 
L-Pegeln.

>Mal wieder ein faszinierendes Problem... :)

Wenn man wüsste, was das Problem ist, könnte man auch besser helfen.
Den EXT-INT1 würde ich sofort in der eigenen ISR sperren oder auf 
steigende Flanke konfigurieren.
Dann arbeitet man das Programm ab, und schaltet den EXT-Int1 wieder auf 
Pegel und legt ihn schlafen.

Was soll der Controller überhaupt machen?

Autor: Fred S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ted,

tut mir leid, ich hatte "idle" gedacht, obwohl Du eindeutig "power down" 
geschrieben hattest!

Gruß

Fred

Autor: Ted (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Was soll der Controller überhaupt machen?

Das Ganze ist eine 1-Tasten-Bedienung. Bei kurzen Tastendruck wird 
zwischen einem Timer von 20/40/60 Sekunden umgeschaltet. Wenn man die 
Taste länger betätigt (>1 Sekunde) läuft der Timer ab und ein 
Portausgang wird für diesen Zeitraum geschaltet. Wenn die Taste >5 
Minuten nicht betätigt wird geht die Schaltung in 'Power Down' um die 
Akkus zu schonen. Damit sollen Akkustandzeiten von bis zu 200h (800mAh 
Akkus) erreicht werden.

Gruß Ted

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ted wrote:
>>Was soll der Controller überhaupt machen?
>
> Das Ganze ist eine 1-Tasten-Bedienung. Bei kurzen Tastendruck wird
> zwischen einem Timer von 20/40/60 Sekunden umgeschaltet. Wenn man die
> Taste länger betätigt (>1 Sekunde) läuft der Timer ab und ein
> Portausgang wird für diesen Zeitraum geschaltet. Wenn die Taste >5
> Minuten nicht betätigt wird geht die Schaltung in 'Power Down' um die
> Akkus zu schonen. Damit sollen Akkustandzeiten von bis zu 200h (800mAh
> Akkus) erreicht werden.
>
> Gruß Ted

Schau Dir das mal an:
http://www.hanneslux.de/avr/divers/melody/melody04.html
Nach "getaner Arbeit" wird im Power-Down gepennt, in den Pausen während 
der Arbeit (also während Timer, ADC usw. gebraucht werden) im Idle-Mode. 
Ich denke, das ist genau das, was Du brauchst...

...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.