From subsecret
Jump to: navigation, search
No edit summary
No edit summary
 
(6 intermediate revisions by the same user not shown)
Line 8: Line 8:
|Arduino 101
|Arduino 101
|59998-59999
|59998-59999
|59998,5625
|59998.5625
|-
|Arduino Due (clone)
|60000-60001
|60000.5143
|-
|-
|Arduino Mega 2560 (clone)
|Arduino Mega 2560 (clone)
|59989-59994
|59989-59994
|59991,75
|59991.75
|-
|-
|Arduino Mega 2560 (clone 2)
|Arduino Mega 2560 (clone 2)
|60470-60471
|60470-60471
|60470,25
|60470.25
|}
|}


Benchmark of digital sensor read (100000 digitalRead()) (internal time used for measurement)
{| class="wikitable"
!Model
!Duration
|-
|Arduino 101
| 156 ms.
|-
|Arduino Mega 2560 (clone)
| 534 ms.
|}
Benchmark of analog sensor read (100000 analogRead()) (internal time used for measurement)
{| class="wikitable"
!Model
!Duration
|-
|Arduino 101
| 280 ms.
|-
|Arduino Mega 2560 (clone)
| 1175 ms.
|}


Benchmark of pi calculation (internal time used for measurement)
Benchmark of pi calculation (internal time used for measurement)
{| class="wikitable"
{| class="wikitable sortable"
!Model
!Model
!Size of double
!Size of double
!Duration
!Duration (sec)
!Pi value
!Pi value
|-
|-
|Arduino 101
|Arduino 101
|8
|8
|3879 ms.
|3.879
|3.1415936536
|3.1415936536
|-
|-
|Arduino Due
|Arduino Due (clone)
|8
|8
|16512 ms.
|16.512
|3.1415936536
|3.1415936536
|-
|-
|Arduino Mega 2560 (clone)
|Arduino Mega 2560 (clone)
|4
|4
|58338 ms.
|58.338
|3.1415972709
|3.1415972709
|}
|}
Line 143: Line 122:
  }
  }


DigitalRead program
Analog Read program  


  void setup() {
  void setup() {
   pinMode(3, INPUT);
   pinMode(2, INPUT);
   Serial.begin(9600);
   Serial.begin(9600);
  }
  }
Line 152: Line 131:
  void loop() {
  void loop() {
   
   
   long reads = 0;
   int readZero = 0;
  int reads = 0;
   unsigned long start = millis();
   unsigned long start = millis();
   while (true) {
   while (true) {
    if (analogRead(3) < 1000.0) {
      if (reads == 10000) {
        break;
      }
      reads++;
   
   
    if (analogRead(2)==0) {
      readZero++;
    }
    if (reads == 10000) {
      break;
     }
     }
    reads++;
   }
   }
   unsigned elap = millis() - start;
   unsigned elap = millis() - start;
   Serial.println(elap);
   Serial.println(elap);
  Serial.print("Zeros: ");
  Serial.println(readZero);
   
   
  }
  }


Analog read benchmark program
 
Digital read benchmark program


  void setup() {
  void setup() {
Line 180: Line 162:
   
   
   int readZero = 0;
   int readZero = 0;
  int reads = 0;
   unsigned long start = millis();
   unsigned long start = millis();
   while (true) {
   while (true) {
   
   
     if (!digitalRead(2)) {
     if (!digitalRead(2)) {
       if (readZero == 10000) {
       readZero++;
        break;
    }
      }
    if (reads == 10000) {
      readZero++;
      break;
     }
     }
    reads++;
   }
   }
   unsigned elap = millis() - start;
   unsigned elap = millis() - start;
   Serial.println(elap);
   Serial.println(elap);
  Serial.print("Zeros: ");
  Serial.println(readZero);
   
   
  }
  }

Latest revision as of 07:49, 15 December 2017

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);

}