 	<< (wdg < 0 ? PSTR("T") : PSTR("T+")) << wdg
 	<< PSTR(",err=") << (1000.0 * wdg) / cycle
 	<< endl;
+#else
+  // Print number of cycles and calibration settings
+  if ((cycle % 60) == 0) {
+    trace << endl;
+    trace << cycle << PSTR(" seconds") << endl;
+    trace << PSTR("#define BOARD_INFO \"Board Info\"")
+	  << endl;
+    trace << PSTR("#define RTC_CALIBRATION_MS ")
+	  << (1000 * rtc) / cycle
+	  << endl;
+    trace << PSTR("#define WATCHDOG_CALIBRATION_MS ")
+	  << (1000 * wdg) / cycle
+	  << endl;
+  }
+  else {
+    trace << '.';
+  }
+#endif
   cycle += 1;
 }

  // Count loop cycles
  static int32_t cycle = 1;

  // Wait for clock tick
  clock_t start = clock.time();
  clock_t now;
  while (1) {
    now = clock.time();
    if (now != start) break;
    yield();
  }

  // Calculate the clock drift in seconds
  int32_t rtc = wall.time() - now;
  int32_t wdg = bark.time() - now;

  // Print the clocks, drift and error rate (milli-seconds per second)
  trace << cycle << ':' << now
	<< PSTR(":RTC:")

  OutputPin m_pin;
};

// Pulse generators from the different clocks (logic analyzer channel colors)
Pulse black(&clock, 1, Board::D7);
Pulse brown(&wall, 1, Board::D8);
Pulse red(&bark, 1, Board::D9);

void setup()
{
