Hi, ich versuche gerade die APPNOTE134 von Atmel, die einen ATMega103 als RTC im Stromsparmodus verwendet, mit einem Mega8 nachzuvollziehen. Die "Uhr" läuft, kein Problem. Bloß ich bekomme es nicht hin, daß der Mega8 wieder vom PowerSave-Modus aufwacht. In der Simulation klappt es. Nun verwende ich ja den Timer2 und blockiere mir somit die Pins für einen externen Quarz. Also nehme ich den internen. Und der AVR wacht einfach nicht mehr auf. Brauche ich wirklich einen externen Quarz - so wie in der AppNote? Aber wäre das nicht paradox? Schließlich wird der CPU-Quarz doch beim PowerSave angehalten, oder?!? Ich probiere nun schon seit Stunden (siehe Uhrzeit!). Was meint Ihr dazu? Mein Assembler-Progrämmchen hängt an. Danke schonmal! :-) Sebastian
Nun habe ich durch Zufall eine neue Erkenntnis gewonnen. In einer anderen Anwendung habe ich aus anderen Gründen einen Interrupt aktiviert (Int0). Ab dem Zeitpunkt, ab dem ich einmal (!!!) den Interrupt auslöse, fängt der Timer an zu arbeiten und löst seine Interrupts dann auch wie gewünscht aus. Der Timer muß also einmal einen Interrupt vor dem ersten sleep-Befehl ausgeführt haben. Lösung: TCNT mit 0xFF initializieren. So wird der Timer - zumindest in meiner Anwendung - vor dem ersten sleep-Befehl einmal ausgelöst. Ein manuelles "rcall Timer0_Overflow" dagegen bringt nichts. Verrückt, oder?!? Sebastian
Nö, garnicht verrückt. Ist zwar schon lange her, daß ich mich damit beschäftigte, aber ich glaube, mich zu erinnern, daß es verschiedene Sleep-Modes gab. Unter anderem einen, der auch den Oszillator abschaltet (sowohl intern als auch extern). Aus diesem Sleep läßt sich der Controller nur noch durch Reset oder einen programmierten externen Interrupt aufwecken (evtl. auch noch weitere Quellen). Schau mal im Datenblatt nach -> "AHA"-Effekt.
Hi thkaiser, Du hast recht, es gibt verschiedene Sleep-Modi. Ich verwende den PowerSave-Mode der den Oszillator abschaltet. Allerdings läuft ein Uhrenquarz an TOSC1/TOSC2 assychron dazu im Schlafmodus weiter. Im Datenblatt: Im Register ASSR: AS0=1. Außerdem muß ich ja nur ein einziges Mal einen externen Interrupt auslösen, danach läuft's ja wie geschmiert. "AHA"-Effekt deinerseits? ;-) Danke trotzdem! :-) Sebastian
Jep, ich sags ja: Lang ists her, und ich habs damals nur mit nem 2313 gemacht. War ja nur ne Idee.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.