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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.