www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Umschaltung ext./int. Takt


Autor: Axel Rühl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

kann man -einfach so- vom externen Takt auf den internen umschalten?
Ich möchte in den Progammpausen in den Idle-Mode schalten und den Takt
herunternehmen, um Strom zu sparen. Die anderen Powerdown-Modi kann ich
leider im laufenden Betrieb nicht einsetzen, da ich verschiedene
Interrupts weiterhin benötige, diese aber nur im Idle-Mode erreichbar
sind. Beim Hitachi H8S2357(Bsp.) kann man die CPU-Clock 'runterteilen.
Geht hier wohl nur über einen Reset in den Bootloadersektor und von dort
über die Verstellung der fusebits? Liege ich da richtig, oder gibt es
eine andere Möglichkeit? Einen Bootloader verwende ich sowieso, dem
müsste ich dann (über ein Byte im EEProm) sagen, dass er die fusebits
auf int.1Mhz stellen soll.
Hat jemand so was krummes schon mal gemacht?

Danke und Gruß
AxelR.

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich vermute, Du sprichst von einem AVR.
Da gehts in der Tat nur über die Fusebits.
Bei den msp430 gehts "online" - zu jeder Zeit!

Autor: Axel Rühl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso- ja ich meinte einen AVR, sorry. Mega8 oder Mega16

Autor: Ingo Henze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann mal nur als Bsp. für den ATmega 162 sprechen.
Bei dem kann man im laufenden Betrieb den Taktvorteiler setzen.
Das nennt sich da "System Clock Prescaler", Teiler von 1 bis 256 sind
möglich (in 2^n Schritten) und wird über das Register CLKPR gemacht.
Zur Sicherheit ist auch hier, wie beim Watchdog-Timer, ein bestimmte
Befehlsfolge einzuhalten.

Ich habe das für Testzwecke auch schon probiert, mit 8 MHz internem
RC-Oszillator durch 256 runtergeteilt, das gibt dann in etwa einen Takt
wie mit einem 32 kHz Uhrenquarz (weil den hab ich im Monent nicht da)

In wieweit das die anderen AVRs können, kann ich nicht sagen.

Gruß
Ingo

Autor: Ingo Henze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab mal schnell die Datenblätter der Megas durchgeklickt, Mega8 und 16
können das nicht, aber der 169 und die neuen 48/68/168.
Bei den großen Mega64 und 128 gibt es sowas wohl auch, heißt dort aber
"XTAL Devide Control Register" XDIV und geht von 2 bis 129.

Autor: Axel Rühl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, erstmal.-
ich verwende den MegaLoad von MICROSYL. Da werd' ich mal den Quelltext
entsprechend, wie oben gepostet, ändern.
Gruß
AxelR.

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem ist aber, das Du vom Bootloader aus die Fuses gar nicht
setzen kannst, das geht nur mit den Boot Lock Bits!

Gruß,
Maddin

Autor: Axel Rühl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SCH.. echt? wäre ja blöd. Bin leider gerade mit Arbeit zu bis obenhin,
sehe aber nachher oder heut abend mal im Datenblatt nach.
Danke, trotz der "schlechten" nachricht...
AxelR.

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich will dich ja nicht demotivieren, aber es bringt gar nix den Takt
runterzusetzen wenn du immer brav in den sleep gehst.

Grund:

Wenn du z.B. mit 8 statt 1 MHz taktest, verbraucht der Prozessor das
8-fache an Strom. Aber er ist auch 8 mal so schnell mit seinen
Rechnungen fertig und daher schneller wieder im Sleep mode, die
Stromaufnahme bleibt im Mittel also gleich.
Sobald die CPU im Idle ist, wird der Prozessortakt ja abgeschaltet,
also hat der CPU-Takt da auch keine Auswirkungen.

Die beste Methode in deinem Fall ist den Controller so schnell wie
möglich wieder in den sleep zu schicken, also wenn du periodisch was
machst, diese Teile zu optimieren.

Autor: Axel Rühl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Solche Überlegungen machen natürlich Sinn.
habe ich aber auch schon hinter mir. Der Controller ist die mesite Zeit
im Sleep (Idle). lt. Datenblatt Seie 32 ist aber genau in diesem Mode
die Mainclock aktiv,nur die IO-clock und die CPU_Clock ist aus, daher
mein Gedankengang.

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi...

Läuft nicht im IDLE-Mode der Takt (und damit der Stromverbrauch)
weiter?
Wie sollten denn sonst Timer-Interrupts während IDLE möglich sein?
IDLE ist doch noch kein "Tiefschaf"...

Oder irre ich mich da?

Gruß...
...HanneS...

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Holzstück-Hannes!

Ja, es ist nur die Frage wieviel der Takt ausmacht. Wenn er am
Stromverbrauch einen grossen Anteil hat, dann macht es wieder Sinn.

Ich hab meine Messungen auch mit Power_Save gemacht da läuft nur mehr
der externe Quarz an Timer2. Und da war die interne Taktfrequenz egal.

Autor: Ingo Henze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um nochmal auf meinen Mega162 zurückzukommen :-)

Denn will ich mit einem externen 32 kHz Uhrenquarz betreiben.
Wenn ich dann noch, bevor ich ihn in den Idle-Mode schicke, den
Systemtakt durch 256 teile, läuft er nur noch mit 128 Hz. Das sollte
noch einiges an Stromeinsparung bringem.
Im Gegensatz zum Power-Down/Save Modus kann ich ihn dann wieder mit
einem Timer aufwecken.

Gruß
Ingo

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Im Gegensatz zum Power-Down/Save Modus kann ich ihn dann wieder mit
einem Timer aufwecken."

Das stimmt nicht. Auch aus Powersave kommst du über Timer Interrupt
raus.
Power_save macht man so:

CPU-Takt möglichst hoch (z.B. interner 8MHz Takt).

Uhrenquartz an TOSC1 und TOSC2 anschliessen.
AS2 in ASSR setzen.

Dann wird der Timer2 Interrupt durch den Uhrenquarz ausgelöst, und man
kann das Programm bis zum nächsten Sleep mit Full-Speed abarbeiten.

Der Rest der Zeit wird praktisch kein Strom verbraucht.

Allerdings funktionieren dann halt bis auf Level Int0 und Int1 keine
anderen Interrupts.

Autor: Axel Rühl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja Ingo, soo dacht' ich auch...
wie komme ich denn anders an die Fusebits heran?? Ich muss wohl doch
nochmal nachschlagen (eigentlich keine zeit)
AxelR.

Autor: Ingo Henze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na gut, vielleicht sollte ich mich doch nochmal etwas genauer mit den
Takt- und Spromsparmöglichkeiten befassen.
Andererseits find ich das mit dem runtergeteilten Systemtakt eine
interessante Sache, und es wird im Datenblatt extra als Möglichkeit zum
Stromsparen genannt:
"The ATmega162 system clock can be divided by setting the Clock
Prescale Register – CLKPR. This feature can be used to decrease power
consumption when the requirement for processing power is low."

Dann wäre noch die Frage, wann es denn nun die Mega48/88/168 endlich zu
kaufen gibt...
Scheinen mir ganz nette Teile zu sein :-)

Gruß
Ingo

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.