About TimeThe Arduino millis counter is a little bit to slow. So every approx 41 tick the interrutp routine adds a leap milliscond Here is a simple test program that shows it.
/*
* Simple test program that show Arduino UNO (328P cpu) approx every 40 millisecond
* add a leap millisec to the millis counter !!!
* /JENS
*/
/*
* Simple test program that show Arduino UNO (328P cpu) approx every 40 millisecond
* add a leap millisec to the millis counter !!!
* /JENS
*/
unsigned long m, mOld, oneCount;
void setup() {
Serial.begin(115200);
m = mOld = millis();
oneCount = 0;
}
void loop() {
m = millis();
switch (m - mOld) {
case 0:
break;
case 1:
oneCount++;
break;
case 2:
oneCount++;
Serial.print('2');
Serial.print(" ");
Serial.println(oneCount);
oneCount = 0;
break;
default:
Serial.println("larger than 2");
}
mOld = m;
}
// OUTPUT FROM PROGRAM
There is a leap msec every 41 and 42 millisec.
42 42 41 42 42 41 42 42 41 ..
average 41,6666...
:29:02.519 -> 2 42
14:29:02.551 -> 2 41
14:29:02.583 -> 2 42
14:29:02.647 -> 2 42
14:29:02.679 -> 2 41
14:29:02.712 -> 2 42
14:29:02.777 -> 2 42
14:29:02.809 -> 2 41
14:29:02.841 -> 2 42
14:29:02.906 -> 2 42
14:29:02.938 -> 2 41
14:29:02.970 -> 2 42
14:29:03.034 -> 2 42
14:29:03.067 -> 2 41
14:29:03.100 -> 2 42
14:29:03.162 -> 2 42
14:29:03.194 -> 2 41
14:29:03.226 -> 2 42
14:29:03.291 -> 2 42
14:29:03.324 -> 2 41
14:29:03.356 -> 2 42
14:29:03.388 -> 2 42
14:29:03.452 -> 2 41
14:29:03.485 -> 2 42
14:29:03.550 -> 2 42
14:29:03.582 -> 2 41
14:29:03.613 -> 2 42
14:29:03.645 -> 2 42
14:29:03.709 -> 2 41
14:29:03.742 -> 2 42
14:29:03.775 -> 2 42
14:29:03.840 -> 2 41
|