So, nach einigem Ausprobieren und rumgetüftle, sieht meine ISR jetzt so aus:
Code:
_delay_ms( 1 );
if( ( PIND & ( 1 << PIND2 ) ) && ( PIND & ( 1 << PIND3 ) ) ) zaehler--;
if( ( !( PIND & ( 1 << PIND2 ) ) ) && ( !( PIND & ( 1 << PIND3 ) ) ) ) zaehler--;
if( ( !( PIND & ( 1 << PIND2 ) ) ) && ( PIND & ( 1 << PIND3 ) ) ) zaehler++;
if( ( PIND & ( 1 << PIND2 ) ) && ( !( PIND & ( 1 << PIND3 ) ) ) ) zaehler++;
Der Interrupt wird bei jeder Zustandsänderung ausgelöst. Somit wird jetzt jeder zweite Tick erkannt.
Ausweiten könnte man das ganze jetzt noch, indem man wie oben schon gesagt, einen zweiten ext. Interrupt-Pin auf die zweite Phase ansetzt. Die Auflösung von 50% reicht mir, weil ich keinen weiteren externen Interrupt opfern möchte. Das Drehgefühl ist jetzt auch ganz angenehm.
Entprellt habe ich das ganze noch weiter mit dieser Mini-Pause. Die Pause habe ich schon runteroptimiert soweit es ging. Da geht nicht viel Rechenzeit drauf und es ist sowohl einfach als auch funktionell, weil jetzt gar nix mehr prellt.
Dann muss ich mich jetzt wirklich nur noch um das Coden des Menüs kümmern.
Gute Nacht, (euer für heute sehr zufriedener ) Manni
Lesezeichen