Hallo,

ich habe folgenden Testcode für den Arduino Uno.
Code:
void setup() {
  Serial.begin(115200);
  while(!Serial){}

  pinMode(3,INPUT);
}

void loop() {
  int a = micros();


  int c = digitalRead(3);
  delayMicroseconds(1);
  

  int b = micros();
  b=(b-a)*4;
  Serial.println(b);
  delay(2000);
}
Ich will wissen, wieviel Zeit der Befehlsblock
Code:
int c = digitalRead(3);
  delayMicroseconds(1);
in Anspruch nimmt. Ich erhalte eine Ausgabe, die sehr wechselhaft ist:
Code:
32
16
16
32
16
32
16
16
32
16
16
16
32
16
32
16
So weit ich das verstanden habe ist es doch auf dem UNO so, das micros() ein Vielfaches von 4 zurückgibt. Also multipliziere ich das Ergebnis mit 4. Dennoch braucht er einmal dann die doppelte Zeit zur Ausführung des Befehlsblocks? Ich denke:
- dass der Controller hier entweder zwischendurch dann was anderes macht, was Zeit benötigt
- der Mikrosekundenzähler eine relative Abweichung hat

Vielleicht weiß jemand besser darüber bescheid und kann mal eine Erläuterung dazu geben, was diese Schwankungen hervorruft?

Gruß, Moppi