From subsecret
Jump to: navigation, search

Benchmark of internal time precision

Model range of 60 sec delay() call avg. duration of 60 sec delay() call
Arduino 101 59998-59999 59998.5625
Arduino Due (clone) 60000-60001 60000.5143
Arduino Mega 2560 (clone) 59989-59994 59991.75
Arduino Mega 2560 (clone 2) 60470-60471 60470.25


Benchmark of pi calculation (internal time used for measurement)

Model Size of double Duration (sec) Pi value
Arduino 101 8 3.879 3.1415936536
Arduino Due (clone) 8 16.512 3.1415936536
Arduino Mega 2560 (clone) 4 58.338 3.1415972709



Test programs: Python program for measuring response time

import time
import serial
def millis():
    return int(round(time.time() * 1000))
ser = serial.Serial('/dev/ttyACM0', 9600)
while True:
	start = millis()
	data= "recv: "+ser.readline()	
	end = millis()
	print (end-start)
	print data


Time precision benchmark

void setup() {
  Serial.begin(9600);
}

void loop() { 

  while (true) {
    unsigned long start = millis();
    delay(60000);
    unsigned elap = millis() - start;
    Serial.println(elap);
  }
}

Pi benchmark (adapted from http://forum.arduino.cc/index.php?topic=138802.0)

#define ITERATIONS 1000000L    // number of iterations

void setup() {
  Serial.begin(9600);
}

void loop() {

  unsigned long start, time;
  unsigned long niter = ITERATIONS;

  double x = 1.0;
  double pi = 1.0;
  unsigned long i = 0;
  start = millis();
  Serial.print("Sizeof(double)=");
  Serial.print(sizeof(double));
  Serial.println();

  for ( i = 2; i < niter; i++) {
    x *= -1.0;
    pi += x / (2.0 * (double)i - 1);
  }

  time = millis() - start;

  pi = pi * 4.0;

  Serial.print("# of trials = ");
  Serial.println(niter);
  Serial.print("Estimate of pi = ");
  Serial.println(pi, 10);

  Serial.print("Time: ");
  Serial.print(time);
  Serial.println(" ms");
  Serial.println();
  delay(5000);
}

Analog Read program

void setup() {
  pinMode(2, INPUT);
  Serial.begin(9600);
}

void loop() {

  int readZero = 0;
  int reads = 0;
  unsigned long start = millis();
  while (true) {

    if (analogRead(2)==0) {
      readZero++;
    }
    if (reads == 10000) {
      break;
    }
    reads++;
  }
  unsigned elap = millis() - start;
  Serial.println(elap);
  Serial.print("Zeros: ");
  Serial.println(readZero);

}


Digital read benchmark program

void setup() {
  pinMode(2, INPUT);
  Serial.begin(9600);
}

void loop() {

  int readZero = 0;
  int reads = 0;
  unsigned long start = millis();
  while (true) {

    if (!digitalRead(2)) {
      readZero++;
    }
    if (reads == 10000) {
      break;
    }
    reads++;
  }
  unsigned elap = millis() - start;
  Serial.println(elap);
  Serial.print("Zeros: ");
  Serial.println(readZero);

}