// Failed counnting cycles in WOKWI
// On real ATmega2560 is 16 cycles, with simulator is 17
void startTimer1 ()
{
// reset Timer 1
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0; // reset counter
TIFR1 |= bit (TOV1); // clear overflow flag
// start Timer 1
TCCR1B = bit (CS10); // no prescaler
}
void setup ()
{
delay(100);
Serial.begin (115200);
Serial.println ();
Serial.print (F("Frequency: "));
Serial.print (F_CPU);
Serial.println (F("Hz"));
Serial.println ("Cycles, ns");
}
void loop ()
{
cli();
startTimer1 ();
// 16x NOP
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
volatile uint16_t cy = TCNT1;
sei();
cy -= 1; // correction
volatile uint32_t ns10 = (uint32_t)cy * 625;
Serial.print (cy);
Serial.write (',');
Serial.write (' ');
Serial.print (ns10 / 10);
Serial.write ('.');
Serial.println (ns10 % 10);
Serial.flush ();
}