Hallo,
habe hier ein Phänomen welches ich so noch nicht kenne.
Erstmal Code:
1 | uint8_t Encoder_Query_v2()
|
2 | {
|
3 | encoder_neu = 0;
|
4 | encoder_neu |= (((ENCODER_PIN & (1<<ENCODER_PIN_UP))>>ENCODER_PIN_UP) << 1);
|
5 | encoder_neu |= (((ENCODER_PIN & (1<<ENCODER_PIN_DOWN))>>ENCODER_PIN_DOWN) << 0);
|
6 |
|
7 |
|
8 | if (encoder_neu != encoder_old)
|
9 | {
|
10 | if ((encoder_neu == 0b00000010) && (encoder_old == 0b00000000)) ret=1; // RIGHT
|
11 | if ((encoder_neu == 0b00000011) && (encoder_old == 0b00000010)) ret=1; // RIGHT
|
12 | if ((encoder_neu == 0b00000001) && (encoder_old == 0b00000011)) ret=1; // RIGHT
|
13 | if ((encoder_neu == 0b00000000) && (encoder_old == 0b00000001)) ret=1; // RIGHT
|
14 |
|
15 | if ((encoder_neu == 0b00000001) && (encoder_old == 0b00000000)) ret=2; // LEFT
|
16 | if ((encoder_neu == 0b00000011) && (encoder_old == 0b00000001)) ret=2; // LEFT
|
17 | if ((encoder_neu == 0b00000010) && (encoder_old == 0b00000011)) ret=2; // LEFT
|
18 | if ((encoder_neu == 0b00000000) && (encoder_old == 0b00000010)) ret=2; // LEFT
|
19 |
|
20 | }
|
21 | encoder_old = encoder_neu;
|
22 |
|
23 | return ret;
|
24 | }
|
25 |
|
26 | void TogglePIN(uint8_t inPin)
|
27 | {
|
28 | PORTD ^= (1<<inPin);
|
29 | }
|
30 |
|
31 |
|
32 | int main(void)
|
33 | {
|
34 | /*
|
35 |
|
36 | */
|
37 | DDRD |= (1<<0);
|
38 |
|
39 | while (1) // 2.4MHz on 8MHz Quarz
|
40 | {
|
41 | TogglePIN(0);
|
42 |
|
43 | // BLOCK1
|
44 | uint8_t ret=0;
|
45 | ret=Encoder_Query_v2();
|
46 |
|
47 |
|
48 |
|
49 | // BLOCK2
|
50 | /*
|
51 | uint8_t ret=0;
|
52 | uint8_t encoder_old=0;
|
53 | uint8_t encoder_neu=0;
|
54 |
|
55 | encoder_neu = 0;
|
56 | encoder_neu |= (((ENCODER_PIN & (1<<ENCODER_PIN_UP))>>ENCODER_PIN_UP) << 1);
|
57 | encoder_neu |= (((ENCODER_PIN & (1<<ENCODER_PIN_DOWN))>>ENCODER_PIN_DOWN) << 0);
|
58 |
|
59 | if (encoder_neu != encoder_old)
|
60 | {
|
61 | if ((encoder_neu == 0b00000010) && (encoder_old == 0b00000000)) ret=1; // RIGHT
|
62 | if ((encoder_neu == 0b00000011) && (encoder_old == 0b00000010)) ret=1; // RIGHT
|
63 | if ((encoder_neu == 0b00000001) && (encoder_old == 0b00000011)) ret=1; // RIGHT
|
64 | if ((encoder_neu == 0b00000000) && (encoder_old == 0b00000001)) ret=1; // RIGHT
|
65 |
|
66 | if ((encoder_neu == 0b00000001) && (encoder_old == 0b00000000)) ret=2; // LEFT
|
67 | if ((encoder_neu == 0b00000011) && (encoder_old == 0b00000001)) ret=2; // LEFT
|
68 | if ((encoder_neu == 0b00000010) && (encoder_old == 0b00000011)) ret=2; // LEFT
|
69 | if ((encoder_neu == 0b00000000) && (encoder_old == 0b00000010)) ret=2; // LEFT
|
70 | }
|
71 | encoder_old = encoder_neu;
|
72 | */
|
73 | }
|
74 |
|
75 | return 0;
|
76 | }
|
Die Funktion TogglePIN invertiert ständig einen PIN am PORTD, an diesem
wiederum ein Frequenzzähler hängt.
Bei auskommentiertem BLOCK2, zeigt der Zähler 158kHz.
Wird hingegen BLOCK1 kommentiert und BLOCK2 verwendet, dann komme ich
auf 1.5MHz! Also der Faktor 10.
Verwendet wird AVRStudio 4.18.
Was mache ich falsch?
LG
Günter