Arduino Mini Pro Strom sparen durch Taktfrequenz senken.

Hallo Allerseits,

ich bin noch recht neu mit dem Arduino unterwegs und versuche einen Arduino Mini Pro mit 3,3V und 8MHz zu verwenden. Das gute Stück soll direkt in eine Messstrecke eingebunden werden die auch gleichzeitig den µController mit Energie versorgen soll.
Leider braucht der gute zuviel Strom. Bei 3 V sind es ca. 10 mA. Die Versorgung bricht leider bis auf 2,5V ein und schafft es nur im Idealfall auf 2,7V. Dann funktioniert das System.

Ich weiß jetzt daß eine Möglichkeit darin besteht, dass man den Takt senkt. Mir würde 1 MHz genügen. Aber mit den Anleitungen in Englischen Foren komme ich nicht klar, da ich zu wenig Hintergrundwissen habe. Könnt ihr mir helfen? Vielen herzlichen Dank schon jetzt!

Ach ja: Die Power-LED habe ich schon ausgelötet. Es hat mich gewundert, aber das gab annähernd keine Veränderung am Stromverbrauch.

Das sinnvollste was ich gefunden habe, aber nicht verstanden:

Re: arduino with internal oscillator on 1Mhz

I think that is the same procedure as for a arduino on 8Mhz. change the settings in the arduino settings file to the corresponding speed ie: change

Code:

build.f_cpu=16000000L

to

Code:

build.f_cpu=1000000L

and reprogram the fuses to make use of the internal clock of 1Mhz.

and of course be aware that the timing in the arduino code is totally wrong. everything will be 16x slower.

Was bedeutet denn "reprogramm the fuses"??? Welche Sicherung soll man umprogrammieren?

Grüße,
prinzolo

Das beste zum Strom sparen findes t du hier bei Nick Gammon: http://www.gammon.com.au/forum/?id=11497

Hallo prinzolo,
die Fuses sind nichtflüchtige Speicher im Microcontroller, in denen bestimmte Eigenschaften, so z.B. auch die Taktfrequenz (intern oder externer Takt) gespeichert werden.
Das Programm bzw der Compiler muss dann wiederum auch wissen, mit welchem Takt der Controller läuft. Um die Fuses zu setzen ist ein zweiter Programmer notwendig.
Man kann dafür auch einen Arduino mit einem speziellen Programm als Programmer nutzen.
Wenn du die Taktfrequenz umstellst, musst du einen neuen Eintrag in die Datei boards.txt eintragen.
Gruß
Reinhard

@michael-x & erni-berni:
Vielen Dank für die kompetente Unterstützung! Die Seite von Nick Gammon ist genau das, was ich gesucht habe.
Ich glaube, die Taktfrequenz konnte ich durch einen Befehl im Programm ändern. Muss heute Nachmittag mal sehen wie der hieß. War gestern schon spät. :slight_smile:

Die Fuses...ok...ich habe nun verstanden was die tun. Wenn der Arduino also schon bei geringerer Spannung starten soll, muss ich diese neu programmieren. Ansonsten startet er erst bei den besagten ca. 3V, lädt das Programm, und reduziert dann den Stromverbrauch und müsste auch bis zu einer niedrigeren Spannung bei Spannungsreduktion funktionsfähig bleiben?! (Ist das Korrekt?). Zum Fuses programmieren benötigt man wohl einen extra Programmer. Ich verstehe bisher leider noch nicht wieso und wie ich die Fuses im Arduino Ansteuere. Im Moment programmiere ich den Arduino mini pro indem ich einen Arduino Uno an meinen Rechner per USB anschließe. Der Chip ist rausgenommen. +, -, RX, TX und Reset verbunden. Wie klappt das denn nun mit den Fuses? Kennt ihr noch einen Link der das genau erklärt? Oder ein Buch? Ich lese mich da gerne ein.
Vielen Dank nochmal! Ihr seid Klasse!!!

Hallo prinzolo,

eine gute und kurzgehaltene Erklärung der Fuses findest du hier AVR Tutorial - Fuses.

Ich glaube, die Taktfrequenz konnte ich durch einen Befehl im Programm ändern.

Das hab ich noch nie gehört, würde mich wundern, wenn das geht.

Zum Fuses programmieren benötigt man wohl einen extra Programmer

Ja, das ist korrekt, aber du kannst den Arduino Uno als Programmer programmieren und dann mit dem Pro über die ISP Schnittstelle verbinden.
Wie das prinzipiell geht findest du hier: http://arduino.cc/en/Tutorial/ArduinoISP
Die notwendigen Eingänge MISO, MOSI, SCK sind auf dem Pro Mini herausgeführt. Wahrscheinlich solltest du dann aber den Pro mit 5V betreiben, damit das zum UNO passt.
Die Programmierung geht dann aus der Konsole mit dem Programm avrdude.
Aber Vorsicht !! Beim ändern der Fuses kann man auch Fehler machen und den Chip quasi unbrauchbar machen, geh da also nur ran, wenn du wirklich weißt, was du tust.

Ich glaube, dass du mehr erreichen kannst, wenn du den Pro möglichst lange und oft in den Sleep-Modus schickst und ihn nur für die Messung aufweckst. Vielleicht kannst du einen dicken Kondensator vor den Pro hängen, damit die Spannung über die Messzeit gepuffert wird. Suche mal nach "Goldcap". Das gleiche Pronzip wird für das Nachleuchten von Fahrradrücklichtern angewendet.
Gruß
Reinhard

Die Programmierung mit dem Arduino soll ja vor allem einsteigerfreundlich sein, daher wurde der Zugriff auf die Fuses "ausgeblendet", Fortgeschrittene haben aber durchaus die Möglichkeit, diese selbst anzupassen. Und von denen haben wir ja genug hier im Forum, daher solltest du bei Unsicherheiten ruhig hier nachfragen. Über die Risiken hat dich ja schon erni-berni aufgeklärt.
Zum "Berechnen" der Fuses ist dieser Link hilfreich: AVR® Fuse Calculator – The Engbedded Blog, gibt es sogar für Android: https://play.google.com/store/apps/details?id=com.misc.avrfuse.

Darf man fragen, was das für eine Spannungsversorgung bei dir ist, die bei 10 mA schon einbricht? Das halte ich nicht für normal.

Hi Erni-Berni und STH

der Code den ich verwenden möchte habe ich von einer anderen Seite im Netz. Ob der funktioniert kann ich noch nicht sagen.
Ich bin noch nicht so weit gekommen die Schaltung zu testen.

Er lautet wie folgt:
CLKPR = (1<<CLKPCE);//diese und die nächste Zeile setzen die Frequenz auf 1 MHz zum Stromsparen
CLKPR = B00000011;

Nun, die Spannungsversorgung soll direkt über eine Steuerleitung einer Maschinensteuerung erfolgen, weil außer dem Sensor keine Stromversorgung in der Fräsmaschine verlegt werden soll. Im Endeffekkt geht es darum in einer Spindel eine maximale Impulszahl anzeigen zu lassen die nicht überschritten werden darf, weil sonst die Steuerung einen Fehler bringt. Das ganze teil ist Handgestrickt und Steinalt. Naja...fragt man sich manchmal warum man sich sowas antut. :slight_smile: Basteln eben.

ich habe dazu schon einen Goldcap eingebaut und davor eine Diode. Die schluckt mir leider schon 0,7V.
Ich möchte dazu wenn die Maschine keine Versorgungsspannung mehr für x-Sek. liefert, den Arduino resetten lassen, da sonst der Arduino durch den Goldcap recht lange weiterläuft. Das meiste davon funktioniert auch, aber eben leider nur an der Grenze dessen was die Steuerleitung hergibt.
Grüße!

Hallo prinzolo,

es gibt immer wieder Features, wo man dachte, die gibt's gar nicht.... Hatte ich vorher noch nie gehört. Man lernt eben nie aus.
Wenn du den Teiler im Programm änderst musst du daran denken, dass alle zeit-relevanten Funktionen nicht mehr stimmen.

Gruß