About Time

The 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