Aufgrund einer kleinen Diskussion in einem anderen Thread wo ich anderer Meinung war, es sich aber nicht wirklich nur aus der Theorie rausfinden lies, kam mir der Gedanke es doch einfach auszumessen.
http://forum.arduino.cc/index.php?topic=428574.msg2955938#msg2955938
Annahme
Stromverbrauch kann durch delay reduziert werden, während bei millis() mehr aktive Segmente den Stromverbrauch erhöhen. Für Hochleistungs-CPUs von Intel oder Nvidia mag das ja gelten. Auch beim ARM wird alles abgeschaltet was gerade nicht gebraucht wird.
Hier aber wohl nicht.
Testaufbau
Hochgenaue Spannungsquelle
Ein 10 Ohm +-1% Messwiderstand vor der Spannungsmessung
Ein Spannungsmessgerät nach dem Messwiderstand (um sicher die Spannung des Arduino zu messen und nicht durch 10Ohm Messwiderstand verfälscht)
Ein Digital-Oszi über dem Messwiderstand damit der Stromverlauf als Kurve sichtbar wird.
Arduino Nano Clon mit Atmel328p
LED am Pin12 mit Vorwiderstand ca 7mA Strom
Erster Durchgang
long Max = 16777216; //256*256*256=16777216
long Zahl = 0;
int LED = 12;
bool Zustand = false;
int Durchgang;
unsigned long Zeit;
void setup() {
// put your setup code here, to run once:
pinMode(LED, OUTPUT);
Serial.begin(19200);
Serial.println("Start");
Durchgang = 0;
}
void loop() {
// put your main code here, to run repeatedly:
do{
Zahl = Zahl + 10 - 9;
//Zahl = Zahl - 9;
}
while (Zahl < Max);
Durchgang ++;
Zahl = 0;
if (Zustand) {
Zustand = false;
}
else {
Zustand = true;
}
Serial.print(Durchgang);
Serial.print(" : ");
Serial.print(Zustand);
Serial.print(" : ");
Zeit = millis();
Serial.println(Zeit);
digitalWrite(LED, Zustand);
}
Berechnung einer sehr großen Zahl indem ich in einer Schleife permanent 10 addieren, 9 abziehe bis Max erreicht. Zeit ungefähr 10,5sec
LED toggle
Zweiter Durchgang
bool Zustand = false;
int LED = 12;
void setup() {
// put your setup code here, to run once:
pinMode(LED, OUTPUT);
Serial.begin(19200);
Serial.println("Start");
}
void loop() {
// put your main code here, to run repeatedly:
delay (10000);
if (Zustand) {
Zustand = false;
}
else {
Zustand = true;
}
digitalWrite(LED, Zustand);
Serial.println(Zustand);
}
Delay 10000 benutzt
LED toggle
Beide male identischer Stromverbrauch, keine Temperaturabweichung am Chip erkennbar. Hab die Temperatur gestern schon verfolgt über jeweils 2 Std ohne Abweichungen zu erkennen. Daher keine Thermofoto-Reihe, wären alles nahezu identische Bilder.
Interessanter Effekt im dritten Oszibild
Wenn ich zum Versuchsaufbau gelaufen bin oder im Raum rumgelaufen wackelt die Stromkurve. Man sieht den Rythmus mit dem ich mit meinem Fuss geklopft habe. Mal schneller mal langsamer. Einer der Klemmen oder der Kontaktierungen hat bösen Wackler und reagiert schon auf Erschütterungen im Raum. Ok, ich bin nicht der leichteste, aber solche Wirkung habe ich nicht erwartet. Mag für einige komische Dinge die in solchen Versuchsaufbauten vorkommen durchaus eine Erklärung sein.
Kalte CPU Morgens vor erstem Versuch. Das helle am USB-Stecker sind Lichtreflexionen die wohl als hohe Temperatur gewertet werden. Der USB-Stecker ist nicht eingesteckt
Warme CPU nach 20 Minuten, danach ändert sich die Temperatur nicht mehr. Auch bei 4 Std dauerlauf nicht