www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kein funktionisfähiger Power-Down-Mode beim ATMEGA2561...


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute!

Ich verwende gerade den neuen ATMEGA2561.
Der funktioniert echt super.
Das neue Programm läuft einwandfrei.

Nun geht es ans Optimieren.
Aus diesem Grund möchte ich den Power-Down-Modus aktivieren.

Bei dem alten AT90S2313 war der Power-Down-Modus kein Problem.
Beim ATMEGA2561 heißt das Register SMCR.
Bit 3 SM2
Bit 2 SM1
Bit 1 SM0
Bit 0 SE

SM2=0, SM1=1, SM0=0 : Power-Down

Ich versuchte den Power-Down-Modus folgendermaßen zu aktivieren:
SMCRW=0x01; // SE-Bit setzen.
SMCRW=0x05; // Power-MODE einschalten.

Obwohl ich diese beiden Befehle im Main ganz oben stehen habe, um zu
sehen, ob der Power-Down wirklich aktiv ist, läuft mir der Prozessor
immer wieder drüber und springt nicht in den Power-Down-Modus. Dies
erkenne ich dadurch, dass das Programm startet, als ob nichts wäre.
Ginge der Prozessor in den Power-Down-Modus, so könnten auch die
nachfolgenden Programmzeilen nicht ausgeführt werden.

Könnt ihr mir bitte helfen.

Ich bin schon am verzweifeln. Vielleicht habe ich bei der
Power-Down-Initialisierung etwas Wichtiges übersehen oder etwas falsch
verstanden.

Ich danke euch jetzt schon für eure Hilfe.

Tschüss
Martin

Schönen Abend.

Autor: Michael Wolf (mictronics) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie im Datenblatt schon steht:

Das SE Bit muss gesetz sein, zusätzlich der gewünschte Modus, und
danach muss eine "sleep" Instruction ausgeführt werden.

Wenn dann so:
SMCRW=0x01; // SE-Bit setzen.
SMCRW=0x05; // Power-MODE einschalten.
asm volatile ("sleep");

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael!

Danke für die Antwort.
Ich interpretierte die "sleep" Instruction als das Schreiben der
SM0-2 Bits.

Jetzt funktionierts.

Tschüss
Martin

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo alle zuammen!

Da ich das letzte Problem gelöst habe, bin ich nun dabei, auf
verschiedene Reset-Sources zu reagieren.

Eigentlich eine einfache Sache:
// Reset Source checking
rflag=MCUSR;  // Einlesen des Registers
MCUSR=0x00;   // Löschen der Reset-Sources

if (rflag&0x01!=0)
   {
   // Power-on Reset
   // Place your code here
   pfe++;
   }
 if ((rflag&0x02)!=0)
   {
   // External Reset
   // Place your code here
   efe++;
   }
 if ((rflag&0x04)!=0)
   {
   // Brown-Out Reset
   // Place your code here
   bfe++;;
   }
 if ((rflag&0x08)!=0)
   {
   // Watchdog Reset
   // Place your code here
   wfe++;
   }
 if ((rflag&0x10)!=0)
   {
   // JTAG Reset
   // Place your code here
   jfe++;
   }

Danach lasse ich rflag auf Leds ausgeben, damit ich erkennen
kann welcher Reset-Source am Werk war.

Schaltet man ein, dann ist das Power-On-Flag aktiv.
Drückt man die Reset-Taste, dann ist der External-Reset aktiv.
Auch der Brown-Out funktioniert.

Zusätzlich habe ich den Watchdog eingeschaltet, der mir alle 0,5S
den Prozessor neu startet, wenn ich den WD-Timer nicht resete.
In meinem Versuch resete ich ihn nicht, damit ich erkennen kann, ob der
Reset-Source des Watchdogs korrekt funktioniert.

Leider sind nach einem WD-Reset alle Reset Sources-Flags auf 0.
Keine Ahnung warum. Es wird jedenfalls in keine If-Verzweigung
verzweigt, die ich oben dargestellt habe.
Zusätzlich habe ich schon versucht den Watchdog erst nach dem Auslesen
des "MCUSR" zu initialisieren. Leider bringt auch das keinen Erfolg.
Der Watchdog startet aber neu, weil zu Beginn die Leds kurz flackern.

Kann es sein, dass es mit dem Startup.asm-File, welches bei Codevision
dabei ist etwas zu tun hat?

Hat jemand schon Erfahrungen in diesem Bereich gesammelt oder kann mir
helfen?

Danke schonmal für eure interessanten Antworten.

Tschüss
Martin

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.