Taktfrequenz des Prozessors...

Hallo Leute,

mich würde interessieren, ob man die Taktfrequenz des Arduinos (In meinem Fall der Nano mit 328er Prozessor mit gewöhnlichen 16 MHz) ohne weitere Änderungen durch den Austausch des Quarzes ändern kann. Laut Datasheet ist das wohl von 0 bis 20 MHz möglich. Muss da tatsächlich nur der Quartz ausgetauscht werden? Oder geht das evtl. noch eleganter per Software oder gar mit verschiedenen (wählbaren) Frequenzen?

Hintergrund zu dieser Frage ist folgende Situation: Ich benötige für einen Versuch mit einem Stratosphärenballon eine möglichst lange Operationszeit und bin mir ziemlich sicher, dass man einen GPS-Chip auch mit einem langsameren Rechner auslesen kann. Da die Leistungsaufnahme ja annäherend proportional zur Taktfrequenz ist, hoffe ich, einiges an Energie sparen zu können, wenn der Arduino langsamer läuft.
Was meint Ihr dazu?

mfg,
die SklMaus

Ein 3.3V Arduino mit 8MHz und geeignete Schlafmodi erscheinen mir das sinnvoller als ein allgemeines Heruntertakten.
Entfernern der Power-Led (und vielleicht anderer unbenötigter Komponenten) spart auch Strom.

Aha. Du meinst so einen ProMini, was? Nicht schlecht...
Aber könntest Du "geeignete Schlafmodi" mal genauer definieren?

Alles klar, habe gerade selbst schon was gefunden:
Hibernation mode & awake on external event

Oder geht das evtl. noch eleganter per Software oder gar mit verschiedenen (wählbaren) Frequenzen?

Ja, das geht!

Echt? Erzäl mal!
Oder haste mal einen link?

Den Link kennst du schon? Gammon Forum : Electronics : Microprocessors : Power saving techniques for microprocessors

Ausführlich erklärt: Gammon Forum : Electronics : Microprocessors : Power saving techniques for microprocessors

Edit: OK, da warst du schneller :slight_smile:

Vielen Dank Euch allen!
Ich werd mich mal reinlesen... :slight_smile:

SuesseKleineMaus:
Echt? Erzäl mal!
Oder haste mal einen link?

Ein Suchwort für das Datenblatt, kann ich dir geben: "System Clock Prescaler"
Oder kürzer: "CLKPR"

Man kann die Taktfrequenz durch Austausch des Quarzes ändern. Dies muß aber beim Kompilieren des Sketches berücksichtigt werden da bestimmte Dinge von der Taktfrequenz abhängig sind.
Solche Dinge sind delay(), millis(), micros(), pulseIn(), Serial, micros(), delayMicroseconds(), befürchte auch tone(), alles was Zeiten oder Frequenzen mit coutern und timern zu tun hat,

Auch der Bootloader ist auf eine bestimmte Taktfrequenz kompiliert.

Grüße Uwe

Ah verstehe. (Auch, wenn ich außer delay() noch keinen der Befehle benutzt habe... LOL)
Dankeschön!

Ich habe keine Ahnung wieviel Pins und wieviel Flashspeicher du benötigst, aber eine Alternative wäre auch ein ATtiny84 oder 85. Die benötigten noch weniger Strom, haben alerdings auch nur 8k Flash.

HotSystems:
... ein ATtiny84 oder 85.

... oder ATtiny4313 mit 17 I/Os. ATtiny85 und 4313 können auch mittels I2C miteinander quatschen.

Demnach welchen GPS-Chip du verwendest braucht der mehr Strom als der Arduino. Bei meinem Neo-6M ist das auf jeden Fall so. Ich weiß aber auch nicht ob es Sinn machen würde das GPS zwischendurch immerwieder abzuschalten, da evtl bei der Satelittensuche wieder mehr Energie verbraten wird. Dahilft nur testen und messen.

Gruß

Hallo,

das was combie in #9 vorschlägt habe ich auch schon gemacht. Funktioniert. Man muß wie weiter erwähnt wurde aber aufpassen mit den restlichen Timings die auf dem Takt beruhen.
Ich weis nicht ob man im Sketch das so einfach kombinieren kann.
also das definieren
define F_CPU 8000000UL // 8MHz
und dann den Prescaler passend dazu ändern.
Ich weis nicht ob mit “define F_CPU …” alle Timings richtig geändert werden.
Vielleicht kann da jemand was dazu sagen? Wäre so eine Idee.

Maßgeblich zum Energie sparen ist aber die Spannung. Du mußt nur mit dem Takt runter, weil du die Spannung senkst. Und dann mußte ich möglichst immer schlafen legen.

Aus eigener Erfahrung macht ein Rückbau eines fertigen Arduinos nur selten Sinn. Macht nur richtig Sinn wenn man fertige Shields verwenden möchte. Ich war zu faul ein neues Layout zu erstellen, als ich meinen kastriert habe. Ab dann kann man ihn nur noch mit Programmer flashen und muß aufpassen wo man die 5V anklemmt. Weil der Spannungsregler ist auch runter. Man hat quasi nur noch den nackten µC auf der Arduino Platine mit Buchsenleisten. Der Rest ist runter bzs. tot gelegt.

define F_CPU 8000000UL // 8MHz
und dann den Prescaler passend dazu ändern.
Ich weis nicht ob mit "define F_CPU ..." alle Timings richtig geändert werden.
Vielleicht kann da jemand was dazu sagen? Wäre so eine Idee.

Wir sind ja hier im Arduino Forum....
Also:
Wenn man die Anpassung in der boards.txt macht, bzw. eine eigene anlegt, dann kann man das dort einstellen. Alle Zeitabhängigkeiten werden dann automatisch richtig berechnet.

Bei Änderungen des Registers/Vorteilers zur Laufzeit, muss man das selber tun.
Oder mit dem dann entstehenden Fehler leben.

Hallo,

also "define F_CPU ..." in der boards.txt ändern und den Prescaler gleich am Anfang im Sketch, dann paßt alles automatisch? Das wäre ja fast zu einfach.

Doc_Arduino:
Hallo,

also "define F_CPU ..." in der boards.txt ändern und den Prescaler gleich am Anfang im Sketch, dann paßt alles automatisch? Das wäre ja fast zu einfach.

Ja, so sollte es gehen!!

Doc_Arduino:
Maßgeblich zum Energie sparen ist aber die Spannung. Du mußt nur mit dem Takt runter, weil du die Spannung senkst. Und dann mußte ich möglichst immer schlafen legen.

Das zeigt recht deutlich diese Webseite: how-to-run-atmega328p-for-a-year-on-coin-cell-battery

Das Lilypad ist sogar ein fertiger 8Mhz Arduino ohne Led und ohne Spannungsregler, der ab 2,7V läuft. Bei 3,6mA bzw. 4,5µA Verbrauch des 328, dürfte das GPS-Modul merklich spromhungriger sein.