Forum: Mikrocontroller und Digitale Elektronik Tiny45 PLL und Power Down


von concept (Gast)


Lesenswert?

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!

von Hannes L. (hannes)


Lesenswert?

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.

...

von concept (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.