www.mikrocontroller.net

Forum: Compiler & IDEs sleep_mode will nicht so wie ich das will


Autor: M.B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich schon wieder:
Ich benutze einen ATmega 88 und AVR-GCC
Mein Programm läuft soweit.

Ich habe BrownOut Detection auf 1,8V gesetzt und mein Watchdog läuft mit 
500ms

Ich werte Spannungen aus, und wenn eine Spannung unterschritten ist, 
wird ein Fehlerbit ins EEPROM geschrieben und danach springt das 
Programm in die Funktion Fehlerroutine(). Wenn das Fehlerbit nach dem 
Einschalten im EEPROM ausgelesen wird und ein Fehler vorhanden ist 
springt das Programm ebenfalls sofort (ohne über los zu gehen) in die 
Fehlerroutine:
heißt: Wenn Fehler vorkommt oder noch im EEPROM steht gehe sofort in 
Fehlerroutine().

Hier ist die Fehleroutine:
void Fehlerroutine(void)
{
  [...]//Spannung messen in ADC-Routine
  wdt_reset();  // watchdogtimer zurücksetzen
  if (Spannung >= 3,5V)
  {
    eeprom_write_byte(&ee_Fehler, FALSE); // Fehler in EEPROM aufheben
    Unterspg = FALSE;
  }
  else
  {
    //PORTPIN ausschalten;
    for (uint8_t i=0;i<=20;i++) // Zeitverzögerung bis Sleep-Mode aktiv >5sek<
    {
      _delay_ms(250);
      wdt_reset();
    }
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);

    sleep_mode();

    _delay_ms(150);
  }
}

Wenn Spannung größer als 3,5V ist, setze den Fehler zurück (Für den 
Einschaltmoment des µC)
Wenn Spannung alles andere - also kleiner - dann warte 5 Sekunden und 
gehe in Power Down - Sleep Mode

Ja, es ist richtig: Der µC bleibt für immer im Sleep-Mode, außer er wird 
aus und wieder eingeschaltet (daher BrownOut auf 1,8V)

Es sind keine Interrupts aktiv.

Problem:
Mein Programm läuft. Wenn die Spannung kleiner wird und das Prog in die 
Fehlerroutine springt, wird der gew. PortPin ausgeschaltet und 5 sek. 
später schaltet er sich wieder ein! Das soll er nicht, denn eigentlich 
sollte nun der Sleep-Mode eingeschaltet werden. Klingt mir erst einmal 
nach: Der Watchdog hat ausgelöst. Aber trotz meiner eingesetzten Resets 
werde ich das Gefühl nicht los, das etwas nicht stimmt.

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.