Im aktuellen Datenblatt steht zwar unter 6.1.5 "Both internal RC oscillator and PLL are switched off in power down and stand-by sleep modes." Aber ich stelle fest, dass die PLL nur im Power-Down ausgeschaltet wird, nicht in idle. Sie wird nicht automatisch wieder angeschaltet. Leider steht das nirgendwo. Grmbl!
concept wrote: > Im aktuellen Datenblatt steht zwar unter 6.1.5 > > "Both internal RC oscillator and PLL are switched off in power down and > stand-by sleep modes." Das ist korrekt... > > Aber ich stelle fest, dass die PLL nur im Power-Down ausgeschaltet wird, > nicht in idle. Warum sollte er im IDLE deaktiviert werden? Wo steht das? IDLE ist doch was Anderes als Power-Down oder Standby. > Sie wird nicht automatisch wieder angeschaltet. Vermutlich doch, wenn man es richtig macht. Ich vermute mal, dass Du Dich mit Deinem Konzept festgefahren hast und in einer Sackgasse steckst. Ich habe mit dem Sleep und dessen Modi keinerlei Probleme, gehe aber nach folgendem Konzept vor: - Jedes Programm hat mindestens einen Timer-Interrupt, in dem Dinge wie Tastenabfrage erledigt bzw. synchronisiert werden. - Die Mainloop fällt nach getaner Arbeit grundsätzlich in den Sleep und wird durch Timer, ADC, UART oder andere Ereignisse geweckt. - Im Normalfall ist Sleep-Mode Idle vorgewählt, Timer-, ADC- und I/O-Takt laufen also weiter, nur der MCU-Takt wird eingefroren - Im Fall der Nichtbedienung läuft ein Count-down ab (es kann auch per Menüpunkt "aus" ausgelöst werden), der dafür sorgt, dass der externe Interrupt (zum Wecken aus dem Tiefschlaf) aktiviert wird und der Sleepmode auf Power-down umgeschaltet wird. Nach Rückkehr des Programms in die Mainloop wird Sleep aufgerufen, worauf der Power- down-Mode greift und alle Taktquellen abschaltet. Nun kann nur noch der ext. Interrupt (Low-Level) bzw. PCI (bei manchen AVRs auch TWI) den AVR aus dem Tiefschlaf wecken. - In der ISR des Weck-Interrupts wird sofort der zuständige Interrupt deaktiviert und der Sleep-Mode auf Idle umgeschaltet. Die ISR wird beendet, das Programm fällt in die Mainloop, da ist noch nix zu tun, weil noch keine Semaphores (Jobflags) gesetzt wurden und fällt in den Sleep. Nun ist aber Sleep-Mode Idle aktiv, worauf alle Takte außer MCU-Takt aktiv sind und deren Interrupts in der Lage sind, Ereignisse der Peripherie zu erkennen und der Mainloop (evtl. nach Sichern flüchtiger Werte) per Semaphores mitzuteilen. Dieses Verfahren geht natürlich nur, wenn man im AVR keine Uhrzeit mitführen muss, denn wenn die Timer stehen, können sie keine Zeit zählen. Es gibt aber auch AVRs mit einem asynchronen Timer, der während des Tiefschlafs mit einem externen Uhrenquarz klappert und dessen Interrupt den AVR aus dem Tiefschlaf weckt. Der Tiny45 hat den aber wohl nicht. Wenn Du schon beim ultimativen Stromsparen bist, hast Du auch an das Deaktivieren des AC gedacht (ACD in ACSR setzen)? Zum richtigen Stromsparen sind die AVRs aber sowiso nicht optimal, da solltest Du auf MSP430 ausweichen. Den AVRs laufen mit aktiviertem BOD stabiler (verhindert die Absturz-Probleme in Deinen anderen Threads), BOD kostet aber Strom. Ich baue z.B. kein AVR-Gerät mehr ohne Batterieschalter. > > Leider steht das nirgendwo. Grmbl! Es kann nicht für jeden Fall eine "Dienstanweisung" geben, man sollte schon selbst etwas mitdenken und versuchen, die Architektur des verwendeten MCs zu verstehen. ...
Hallo Hannes, danke für die vielen guten Tipps! Man lernt den Rechner wohl erst mit asm wirklich gut kennen. > Warum sollte er im IDLE deaktiviert werden? Wo steht das? IDLE ist doch > was Anderes als Power-Down oder Standby. Ich hab gedacht, dass idle zu den stand-by sleep modes gezählt wird? Es gibt nämlich gar keinen speziellen Standby-Modus (beim tiny45). Vielleicht könntest Du zu meiner Frage hier noch was schreiben? Beitrag "Re: Tiny45 stürzt ab trotz Minimalprogramm" Würde mich freuen.
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.