Hallo,
hab eine Frage zu dem Drehgeber-Code von Peter Danegger:
1 | void ISR(void)
|
2 | {
|
3 | enc_input1 = GPIOE->IDR & 0x00002000; //PE13
|
4 | enc_input2 = GPIOE->IDR & 0x00004000; //PE14
|
5 |
|
6 | if((enc_input1 & PHASE_A) == PHASE_A)
|
7 | enc_new = 3;
|
8 |
|
9 | if((enc_input2 & PHASE_B) == PHASE_B)
|
10 | enc_new ^= 1;
|
11 |
|
12 | enc_new -= enc_last;
|
13 |
|
14 | if (enc_new & 1)
|
15 | {
|
16 | enc_last += enc_new;
|
17 | enc_delta += (enc_new & 2)-1;
|
18 | }
|
19 |
|
20 | }
|
21 |
|
22 | /*
|
23 | drehgeber init function
|
24 | */
|
25 | void init(void)
|
26 | {
|
27 | enc_input1 = GPIOE->IDR & 0x00002000;
|
28 | enc_input2 = GPIOE->IDR & 0x00004000;
|
29 |
|
30 | if( (enc_input1 & PHASE_A) == PHASE_A )
|
31 | new = 3;
|
32 | if( (enc_input2 & PHASE_B) == PHASE_B )
|
33 | new ^= 1;
|
34 |
|
35 | enc_last = new;
|
36 | enc_delta = 0;
|
37 |
|
38 | }
|
Wenn ich das Prinzip richtig verstanden habe, sollte in enc_delta
entweder 0x00 (wenn der Drehgeber nicht betätigt worden ist), oder 0x01
/ 0xFF enthalten sein (je nachdem in welche Richtung der Drehgeber
gedreht worden ist).
Momentan verwende ich einen Drehgeber von Alps aus der EC11 Serie mit
(Anschläge 30 und Auflösung 15ppr). Wenn ich von einem Anschlag auf den
nächsten den Encoder bewege, wird die if() Bedingung in der ISR immer 2x
ausgeführt.
1 | if (enc_new & 1)
|
2 | {
|
3 | enc_last += enc_new;
|
4 | enc_delta += (enc_new & 2)-1;
|
5 | }
|
Liegt diese Tatsache auch wirklich am Aufbau des Drehgebers, oder hat
das einen anderen Hintergrund? Wird mit Anschläge die Rasterung vom
Encoder - Rasterpunkte - bezeichnet? Was bedeutet in diesem Zusammenhang
dann die Auflösung?
Wäre schön, wenn mir das jmd kurz erklären kann bzw. in Zusammenhang
setzen könnte.
Des Weiteren bin ich mir nicht sicher, was genau ein 2 oder 4 step
encoder ist?
http://www.mikrocontroller.net/articles/Drehgeber
Dachte, dass so ein Encoder stets zwei Pins von einem µC benötigt und
beide beim Drehen des Encoders sich zwischen 0 und 1 bewegen können; so
wie die Abbildung das in dem Link ganz oben zeigt; ist das dann ein 2
step encoder?
Gruß
Jochen