From subsecret
Created page with "Benchmark of internal time {| class="wikitable" !Model !duration of delay(1000) (ms) |- |a |b |- |a |b |}" |
No edit summary |
||
| (34 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
Benchmark of internal time | Benchmark of internal time precision | ||
{| class="wikitable" | |||
!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 | |||
|} | |||
{| class="wikitable" | |||
Benchmark of pi calculation (internal time used for measurement) | |||
{| class="wikitable sortable" | |||
!Model | !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); | |||
} | |||
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);
}