mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega128 geht nicht in sleep


Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
ICh hab folgendes Problem:

Mein uC braucht im "normalen" Betrieb rund 100mA. Nun möchte ich
Strom sparen und verwende daher den Power-down-Modus.
Dabei sollte der uC per LowLevel schlafen gehen. Ich habe allerdings
dann mal mit einem Multimeter nachgemessen und der uC braucht immer
noch 100mA.
Interrupt 2 ist mit LowLevel eingestellt!
M103C Fuse deaktiviert!


In Init: MCUCR=0x10;  //power-down modus auswählen
#asm("sei");

interrupt [EXT_INT2] void ext_int2_isr(void)
{
MCUCR=0x30;      //power down modus UND SE-Bit (sleep enable) gesetzt
#asm("sei");     //globales INT Enable, damit AufweckInterrupt
möglich ist
#asm("sleep"); //Asm-Befehl damit sleep ausgeführt wird
}

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also wenn dein ATmega128 wirklich 100mA verbraucht, dann ist er defekt.

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja hab ich vielleicht falsch ausgedrückt. Mein Atmega128 mit gesamter
Schaltung rundherum!

Aber der Wert müsste trotzdem sinken, wenn ich in sleep gehe.

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendwie verstehe ich deine Software nicht:
Wenn due Int2 auf low legst, geht der uC schlafen und wacht sofort
wieder auf, da Int2 ja auf low liegt. Das ist doch sinnlos.

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@benedikt:
da ist was wahres dran, muss ich gestehen.

Aber im Moment hab ich leider keinen Plan wie ich es sonst machen
sollte.
Denn sobald der INT2 ausgelöst wird, werden das
GlobalInterruptEnableFlag deaktiviert. D.h. er kann nicht mehr via
Interrupt aufwachen, da dieser ja deaktiviert ist. Deshalb auch das
#asm("sei"); in der ISR des INT2

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sobald er wach ist, ist er wach.

Irgendwo anderst muss der Interrupt aktiviert werden, und er dann
schlafen geschickt werden.

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube wir reden irgendwie aneinander vorbei ;)

>>sobald er wach ist, ist er wach
???

Jedenfalls will ich das der uC bei LowLevel schlafen geht und erst bei
einem High-Signal wieder aufwacht. Das High-Signal wird mit Hilfe eines
Inverters auf Low-Level umgewandelt und löst dann den entsprechenden INT
3 (LevelInterrupt) aus. Das Aufwachen ist im Moment gar nicht das
Problem, sondern er sollte überhaupt erst einmal schlafen gehen und das
eben über INT2 LowLevel.

Wenn jetzt Low-Level anliegt dann wird der INT2 ausgelöst => sleep wird
aktiviert. Okay und dann tritt eben das Problem auf auf das Benedikt
hingewiesen hat. INT2 wird dauernd ausgelöst.

Ich versteh immer noch nicht ganz, wie ich sonst den sleep starten
sollte, wenn nicht in der ISR des INT2.

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann man INT2 auf flankengetriggert schalten ?
Falls ja, dann tu das, und zwar auf die Steigende.
In er INT2 Routine fragst du ab, ob INT2 auf Flanke oder Level
Triggerung steht.
Steht der Int auf Flanke, setzt du ihn auf Low Level, dann sei und
sleep.
Steht der Int auf Low Level, setzt du den Interrupt auf steigende
Flanke.
Fertig.

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.