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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren