PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ARDUINO: Zeitmessung, wo liegt hier der Fehler?



PlasmaTubeI²C
13.07.2013, 17:54
So,

wollte grade eben nur mal kurz die Zeit messen, die ein Arduino braucht um einen analogen Pin auszulesen und den Wert in ner Variable zu speichern.
Soweit so gut. Dachte ich zumindest. Aber erstmal der Code:


#define SensorRead 0 // Define the Analog Pin to read
int array[1000];
long time; //start time

void setup()
{
Serial.begin(9600); //Open the Serial Port with baudrate set to 9600
}

void loop()
{
time = millis();
for(int i = 0; i <= 1000; i++){
array[i] = analogRead(A0);
}
time = millis() - time;
Serial.println(time);
delay(100);
}


Der Code ist so einfach, da kann man eigentlich keinen Fehler übersehen, aber trotzdem läuft es nicht wie gewünscht! :(
Wenn ich den Seriellen Port auslese, bekomme ich nur steigende Werte und zwar pro Sekunde um 1000 (macht ja Sinn, da millis() in Millisekunden misst).

Aber direkt nach der for-Schleife wird doch die Aktuelle Programmlaufzeit von dem Zeitpunkt des Startens der for-Schleife abgezogen, was ja eigentlich
die Laufzeit der Schleife selbst ergeben müsste!

Tausche ich hingegen die beiden "millis()" gegen "micros()" aus, wodurch jetzt die Laufzeit in Mikrosekunden statt Millisekunden gemessen wird,
wird exakt die Zeit ausgegeben, die die for-Schleife braucht. Irgendwas mit 116.000ns, was mit der Zeit, die ein analoger Pin zum auslesen braucht (116ns * 1000, wegen der Schleife), übereinstimmt.
Warum geht das mit millis() nicht? Ich meine so schlimm ist das jetzt auch nicht, würde aber schon gerne
wissen was da genau falsch läuft, bzw. wo der Fehler liegt, oder habe ich was ganz banales übersehen? :)

Klebwax
13.07.2013, 21:46
.... 116ns * 1000, wegen der Schleife...

Dein ARDUINO ist ja ganz schön schnell: in 116ns eine Funktion aufrufen, den ADC starten, wandeln lassen, auslesen, aus der Funtion zurück, Wert ins Array und der restliche Loop-Overhead. Wie schnell taktet er?

MfG Klebwax

PlasmaTubeI²C
13.07.2013, 22:56
Hm das dürften so um die 1,6Ghz sein. Selbstverständlich wassergekühlt. Ne Spaß beiseite, ich mein natürlich schon µs...