RTC mit ATmega8 Sleep Mode Power Save

Gast #3906647
Lesenswert?
• ▲
▼
Hallo Zusammen,

ich versuche zur zeit eine RTC auf einem mega8 im Batteriebetrieb zu 
Programmieren. Die Software läuft bis auf eine kleinigkeit Anstandslos.

Mit einem Taster schicke ich den mcu in sleep mode power save.
Der Asynchron Timer weckt diesen auch wieder auf, und schickt ihn danach 
wieder schlafen. Mit einem anderen Taster wird der Schlafmodus 
unterbrochen.

In 50% der Fälle liegt der Stromverbrauch bei um die 30 µA.
Bei den anderen 50% brauch der mcu aber ca 1,6mA lässt sich aber wie 
gewohnt wieder per taster aufwecken.

Wodurch könnte dieser Fehler hervorgerufen werden?

Vielen Dank im Vorraus

Grüße Martin
Angehängte Dateien:
Gast #3906864
Lesenswert?
• ▲
▼
Hallo,

Danke für die Antwort

habs probiert bringt leider keine Veränderung.

Ich habe noch festgestellt das der mcu nach tasterdruck für 1 Sekunden 
wenig Strom braucht und danach wieder 1,6mA.

Das bedeutet für mich das er 1 zyklus im sleep modus ist und danach 
etwas unvorhergesehees passiert.
(Firma: Vescomp) #3906970
Lesenswert?
• ▲
▼
Martin schrieb:
> habs probiert bringt leider keine Veränderung.

 Dein Programm ist auch ein bisschen schwer zu lessen.
 Normalerweise nimmt man Konstanten für so etwas.

 menu1´= 3, sleepon = 3, sagt mir absolut nichts.

Martin schrieb:
> Das bedeutet für mich das er 1 zyklus im sleep modus ist und danach
> etwas unvorhergesehees passiert.

 So soll es auch sein (nach deinem Programm). uC geht nur dann schlafen
 wenn Enter gedruckt ist:
1
    if(!(PINB & (1<<0)))  //Enter
2
    {
3
      switch(menu1)
4
      {
 switch(menu1) nach oben verlegen, Abfrage in Timer2 ISR und gut ist es.
 Eventuell Timer2 etwas beschleunigen (wegen Tasterabfrage) und bei
 jedem zweiten oder vierten Durchlauf Sekunden erhohen.
Gast #3907038
Lesenswert?
• ▲
▼
menu1 ist für die Menü Auswahl, nur in menü "3" kann der mcu in sleep 
versetzt werden.

sleepon ist dafür verantwortlich den mcu nach dem Aufwachen durch den 
timer interrupt und abarbeiten des selbigen wieder schlafen zu legen.

1
while(sleepon) asm volatile("sleep");


Die Abfrage in den Interrupt zu verlagern hat auch nicht den gwünschten 
erfolg gebracht.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.