Arduino Input Tidsforhold

Fra HTX Arduino
Spring til navigation Spring til søgning

Kaldet til digitalRead(pin) tager tid, så det undersøges i det følgende

Testprogram

Der skrives et lille testprogram, der kan måle tiden det tager at kalde digitalRead, og i dette tilfælde gemme resultatet i en boolean variabel. Testkoden ser ud som følger:

void setup() {
  // put your setup code here, to run once:
  Serial.begin(1000000);
}

unsigned long tider[11];
bool temp;
byte n;

void loop() {
  // put your main code here, to run repeatedly:
  tider[0] = micros();
  tider[1] = micros();
  tider[1] = micros();
  tider[1] = micros();
  tider[1] = micros();
  tider[1] = micros();
  tider[1] = micros();
  tider[1] = micros();
  tider[1] = micros();
  tider[1] = micros();
  tider[1] = micros();
  temp = digitalRead(4);
  temp = digitalRead(4);
  temp = digitalRead(4);
  temp = digitalRead(4);
  temp = digitalRead(4);
  temp = digitalRead(4);
  temp = digitalRead(4);
  temp = digitalRead(4);
  temp = digitalRead(4);
  temp = digitalRead(4);
  tider[2] = micros();
  for (n = 0; n < 2; n++) {
    Serial.println(tider[n+1] - tider[n]);
  }
  Serial.println();
  delay(500);
}

Først måles der hvor lang tid det tager at lave en tidsmåling, det gøres ved at måle på 10 kald til micros(), der lagres i et array (der lagres bare til samme celle). Det tager ca. 2,8 us svarende til 45 maskininstruktioner.

Ti kald til digitalRead() samt en tidsmåling tager 32 us, eller 512 maskininstruktioner, så de 10 kald må tage 467 maskininstruktioner, hvilket betyder at et kald til digitalRead tager 47 maskininstruktioner eller 2,9 us

Hurtigere input

Ved at udnytte at man kan læse direkte i porten, så kan man aflæse ben 4 på følgende måde:

  temp = PIND & 0b00010000;

Nu tager de ti læsninger af inputtet samt en tidsmåling kun 4 us, eller 64 maskininstruktioner, så de 10 læsninger tager 19 maskininstruktioner, hvilket betyder at en læsning nu tager 2 maskininstruktioner eller 0,125 us

Referencer


Arduino Elektrisk
Arduino Input Input - Input Høj-Lav - Input Strøm-Spænding - Input med intern Pull Up - Analogt - Analogt Input - Analog indgang - Arduino Reference Input - Input Tidsforhold - Specielle Input
Arduino Output Output - Output Høj-Lav - Output Strøm-Spænding - Analogt Output - Output Tidsforhold
Arduino Tidsforhold Arduino Reset Tid - Arduino setup() Tid - Arduino loop() Tid - Arduino Interrupt Tid - Arduino Tidsforhold Variabeltyper - Arduino Tidsforhold Sprogstrukturer - Input Tidsforhold - Output Tidsforhold - Serielle Tidsforhold