Hallo Forum
Für einen kleinen Motor-Incremental-Encoder habe ich zwei Varianten für die ISR.
Variante 1:
Encoder_c:
If A = 1 And B = 1 Then Zähler = Zähler - 1
If A = 1 And B = 0 Then Zähler = Zähler + 1
If A = 0 And B = 1 Then Zähler = Zähler + 1
If A = 0 And B = 0 Then Zähler = Zähler - 1
Return
Variante 2:
Encoder_c:
If A = 1 Then
If B = 1 Then Zähler = Zähler - 1
If B = 0 Then Zähler = Zähler + 1
Elseif A = 0 Then
If B = 1 Then Zähler = Zähler + 1
If B = 0 Then Zähler = Zähler - 1
End If
Return
A und B sind die Ausgänge des Encoder's, wobei A den Int. auslöst.Von der Auflösung her reicht das vollkommen aus. Ich muß A auch auswerten, da ich einen PCINT benutze, der reagiert nur auf steigende UND fallende Flanken.
Jetzt würde ich gern wissen, welche Variante wohl schneller verarbeitet wird. Übrigens, Variante 2 benötigt 128 Byte weniger im Flash. Vielleicht gibt es auch eine noch schnellere Möglichkeit.
Was meint Ihr
LG Thomas
Für einen kleinen Motor-Incremental-Encoder habe ich zwei Varianten für die ISR.
Variante 1:
Encoder_c:
If A = 1 And B = 1 Then Zähler = Zähler - 1
If A = 1 And B = 0 Then Zähler = Zähler + 1
If A = 0 And B = 1 Then Zähler = Zähler + 1
If A = 0 And B = 0 Then Zähler = Zähler - 1
Return
Variante 2:
Encoder_c:
If A = 1 Then
If B = 1 Then Zähler = Zähler - 1
If B = 0 Then Zähler = Zähler + 1
Elseif A = 0 Then
If B = 1 Then Zähler = Zähler + 1
If B = 0 Then Zähler = Zähler - 1
End If
Return
A und B sind die Ausgänge des Encoder's, wobei A den Int. auslöst.Von der Auflösung her reicht das vollkommen aus. Ich muß A auch auswerten, da ich einen PCINT benutze, der reagiert nur auf steigende UND fallende Flanken.
Jetzt würde ich gern wissen, welche Variante wohl schneller verarbeitet wird. Übrigens, Variante 2 benötigt 128 Byte weniger im Flash. Vielleicht gibt es auch eine noch schnellere Möglichkeit.
Was meint Ihr
LG Thomas