www.mikrocontroller.net

Forum: Compiler & IDEs Atmega644p + WDT + Sleepmode


Autor: Ralle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
wir wollen den 644p in den Sleepmode "Power-Down" schicken und mit dem 
WDT (geht laut Datenblatt) wieder aufwecken. Unsere Idee ist es keinen 
Reset machen zu lassen sondern in der ISR(WDT_vect) die sleepinstr. zu 
deaktivieren. Unsere Problems sind zum einen, das mit wdt_enable() es 
zwar kein Problem ist den WDT einzuschalten, er jedoch immer bei Ablauf 
einen Reset macht und nicht in die ISR springt. Was muessen wir tun um 
den Reset zu deaktivieren und die ISR zu aktivieren? Zum anderen wissen 
wir nicht, ob wir aus dem Power-Down direkt in die ISR von WDT springen 
koenen.
Hat da jemand schon Erfahrung??

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ralle wrote:
> Unsere Problems sind zum einen, das mit wdt_enable() es
> zwar kein Problem ist den WDT einzuschalten, er jedoch immer bei Ablauf
> einen Reset macht und nicht in die ISR springt.

Das ist korrekt, dazu ist die Blackbox wdt_enable() gemacht.


> Was muessen wir tun um
> den Reset zu deaktivieren und die ISR zu aktivieren?

Das Datenblatt lesen und dann die nötigen Bits selber setzen.


> Hat da jemand schon Erfahrung??

Ich nicht (ich benutze keinen Batteriebetrieb, meine Geräte laufen alle 
am Stromnetz).


Peter

Autor: Oliver B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Unsere Problems sind zum einen, das mit wdt_enable() es
> zwar kein Problem ist den WDT einzuschalten, er jedoch immer bei Ablauf
> einen Reset macht und nicht in die ISR springt.

wdt_enable() setzt nicht nur die Prescaler-Bits, sondern auch WDE, 
wodurch ein Reset ausgelöst wird.

> Was muessen wir tun um den Reset zu deaktivieren und die ISR zu aktivieren?

Manuell die Prescaler-Bits sowie WDIE setzen, um den Watchdoginterrupt 
zu aktivieren.

> Zum anderen wissen wir nicht, ob wir aus dem Power-Down direkt in die ISR
> von WDT springen koenen.

Ja.

Autor: Ralle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also wir machen es so:

  cli();
  MCUSR &= ~(1<<WDRF);
  WDTCSR |= (1<<WDCE);
  WDTCSR |= ((1<<WDIE) | (1<<WDP2)|(1<<WDP1)| (1<<WDP0));

  MCUSR &= ~(1<<WDRF);
  WDTCSR &= ~(1<<WDE);
  sei();

Also WDIE fuer Interrupt und WDE=0 fuer "kein Reset". Prescaler wird 
eingestellt. Funzt aber nicht. Macht ISR + Reset und ist sau schnell. 
Nicht wie in Prescaler eingestellt.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schmeiß mal die ganzen &=, |= raus.

Du mußt direkt zuweisen (=), damit die Timings (<4Takte) eingehalten 
werden.


Peter

Autor: Ralle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, schon besser.

  cli();
  MCUSR = ~(1<<WDRF);
  WDTCSR = (1<<WDCE) | (1<<WDE);
  WDTCSR = ((1<<WDIE) | (1<<WDP2)|(1<<WDP1)| (1<<WDP0));

  MCUSR = ~(1<<WDRF);
  WDTCSR = ~(1<<WDE);
  sei();

So gehts! Alle 2 Sec. wird ISR(WDT_vect) ausgefuehrt ohne 
anschliessenden Reset. Nur Interrupt.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst auch einen avr-libc-Bugreport schreiben, damit diese
Funktionalität mal in <avr/wdt.h> mit aufgenommen wird.

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.