Forum: Mikrocontroller und Digitale Elektronik QDEC Module XMEGA ASF


von Sebastian S. (audionaut)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.