Forum: Mikrocontroller und Digitale Elektronik RTC mit ATmega8 Sleep Mode Power Save


von Martin (Gast)


Angehängte Dateien:

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

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Martin schrieb:
> Wodurch könnte dieser Fehler hervorgerufen werden?

 Durch die doppelte Tastenabfrage in Timer2 ISR und in main() ?

von Martin (Gast)


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.

von Klaus R. (klaus2)


Lesenswert?

Schaltest du vll die pullups ab? Löscht du alle events, bevor du 
schläfst?

Wieso eigentl 30uA? Gemittelt?

Klaus.

von Martin (Gast)


Lesenswert?

An den Pullups wird nichts geändert.
Wie meinst du das mit Events löschen?

ja genau das ist das was meine messgerät mir so ungefähr anzeigt.

Martin

von Marc V. (Firma: Vescomp) (logarithmus)


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.

: Bearbeitet durch User
von Martin (Gast)


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.

von Martin (Gast)


Lesenswert?

Danke für die Hilfe.

Hab das Problem nun gelöst.

Es lag am eingeschalteten TWI, durch deaktivieren des TWI vor dem Sleep 
läuft nun alles wie Gewünscht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.