#include #include #define A PIND1 // Schalter A im Drehgeber #define B PIND0 // Schalter B im Drehgeber #define P PIND2 // Taster im Drehgeber #define Geber PIND // Drehgeber Port #define Ausgabe PORTB // Ausgabe Port zum Testen volatile unsigned char richtung = 0; // 0 ... 255 ISR(TIMER0_OVF_vect) { static unsigned char alter_status = 0,step = 0; unsigned char neuer_status; neuer_status = Geber & (_BV(A) | _BV(B)); // Änderung einlesen if ((neuer_status ^ step)==(_BV(A) | _BV(B))) { if ((neuer_status ^ alter_status)==_BV(A)) richtung +=1; // Es war nach rechts else richtung -=1; // Es war nach links step = neuer_status; } alter_status = neuer_status; } int main( void ) { // Drehgeber Anschluß DDRD &= ~(_BV(PD0) | _BV(PD1)); // Pin's auf eingang setzen DDRB = 0xFF; // Timer0 einstellen 8,2ms bei 8MHz TCCR0B = 1<