Hallöle,
ich habe einen Drehgeber:
http://de.rs-online.com/web/p/products/7816809/
an einem XMEGA128A3U und verwende zur Auswertung den Quadrature Decoder
aus dem ASF:
http://asf.atmel.com/docs/3.27.3/xmegaau/html/group__qdec__group.html
http://asf.atmel.com/docs/3.27.3/xmegaau/html/xmega_qdec_quickstart.html
Habe den Code aus dem Quickstartguide einfach übernommen.
1 | static void qdec_init(void)
|
2 | {
|
3 | qdec_get_config_defaults(&qdec1);
|
4 | qdec_config_phase_pins(&qdec1, &PORTB, 1, false, 500);
|
5 | qdec_config_revolution(&qdec1, 2400);
|
6 | qdec_enabled(&qdec1);
|
7 | }
|
8 |
|
9 | int main (void)
|
10 | {
|
11 | sysclk_init();
|
12 | board_init();
|
13 |
|
14 | //Rotary encoder
|
15 | qdec_init();
|
16 |
|
17 | qdec1_count = 0;
|
18 |
|
19 |
|
20 | while (1)
|
21 | {
|
22 | qdec1_count = qdec_get_position(&qdec1);
|
23 | .
|
24 | .
|
25 | .
|
26 | }
|
27 | }
|
Funktioniert auch soweit. Das Problem ist nur, das bei jedem
Hardwareschritt um 4 hochgezählt wird, also jede Flanke als inkrement
genommen wird. Könnte mir vorstellen, dass das für einen Motor oderso
gedacht ist, aber bei einem handbetätigten Encoder macht das ja wenig
Sinn.
Habe schon versucht den Prescaler des Counters auf 4 zu stellen. Hat
aber nichts gebracht. Auch den digitalen Filter des Eventchannels auf 4
zu stellen bringt nichts.
Hatte das Problem schon mal jemand oder übersehe ich einfach eine
offensichtliche Einstellmöglichkeit?
Danke schonmal für eure Zeit.