Forum: Mikrocontroller und Digitale Elektronik Drehgeberauswertung mit xmega128a1 Pin4


von Paul P. (pommespaule)


Lesenswert?

Guten Morgen,
ich habe ein Problem mit der Auswertung eines Inkrementalgebers. Als µC 
verwende ich den xmega128a1 und in meiner Schaltung sind die Anschlüsse 
des Inkrementalgebers A, B, an PORTD Pin2 und 6 angeschlossen.
Folgendes Problem:
Der Inkrementalgeber kann auch als Taster funktionieren, wenn man auf 
ihn draufdrückt. Das Signal (active low) ist an Pin4 angeschlossen 
(Pull-Up Widerstand ist vorhanden). Nun kann ich direkt am Pin4, PortD 
des µC dauerhaft 3,3V messen und wenn ich den Taster drücke 0V. So wie 
es sein soll. In meinem kleinen Programm:
#include <avr/io.h>

int main(void)
{
  PORTF.DIR |= (1 << PIN4);
  PORTF.OUT |= (1 << PIN4);

    while(1)
    {
    if (!(PORTD.IN & 0x4)) {
      PORTF.OUTTGL |= (1 << PIN4);
    }
    }
}
sollte díe LED an PORTF, Pin4 getoggelt werden sobald der Taster 
gedrückt wird. Wenn der Taster gedrückt wird passiert aber nichts. Es 
passiert jedoch was wenn der Inkrementalgeber gedreht wird 
(angeschlossen an Pin2 u. 6). Da ich aber direkt am µC das korrekte 
Signal vom Taster messen kann, muss intern noch etwas mit dem Signal 
passieren. Habt ihr eine Ahnung, was da standardmäßig eingestellt sein 
kann?

Grüße

von spess53 (Gast)


Lesenswert?

Hi

> Das Signal (active low) ist an Pin4 angeschlossen

>if (!(PORTD.IN & 0x4))

Damit fragst du PORTD.2, also Kanal A, ab. Dein Programm macht genau 
das, was du programmiert hast.

MfG Spess

von Paul P. (pommespaule)


Lesenswert?

Fehler war das Umdenken von Pin zu Hex. 0x4 ist halt Pin zwei und nicht 
Pin vier :)

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.