astrobeed:
micros() ha un jitter tipico di compreso tra 0 e 4 us, purtroppo è un errore incrementale
Ecco, è il fatto che sia incrementale che non mi convince.
Se fosse così il codice sottoriportato, che genera 12500Hz usando micros, dovrebbe sbagliare almeno del 5% (un paio di µs medi accumulati ogni semiperiodo), cioe` di circa 600Hz.
Invece su un Arduino Pro Mini (non quarzato) ho un errore dello 0.081% (10Hz), e le cose migliorano ancora con l'Arduino2009: 0.0016% di errore (0.2Hz)
void setup() { pinMode(13, OUTPUT); }
void loop(){
static uint32_t t = 0;
if(micros() - t >= 40){
t += 40;
digitalWrite(13, !digitalRead(13));
}
}