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?
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.
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.
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.
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.
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.
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.
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:
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 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.