Hallo thewulf00,
ich habe gerade eben endlich Zeit gefunden das ganze mit ISR auszuprobieren. Es funktioniert tatsächlich genauso perfekt wie der andere Code. Hier mal meine Lösung:
Den kurzen Code von RP6conrad habe ich nicht ausprobiert, weil ich ihn gerade nicht ganz verstanden habe. Ich glaube da fehlt noch ein Teil?Code:#define AVRGCC #include <avr/io.h> #include <avr/interrupt.h> ISR (INT0_vect); ISR (INT1_vect); /** PD2 Eingang Spur A PD3 Eingang Spur B PB0 Ausgang links PB1 Ausgang rechts **/ #define Links1 PORTB = (PORTB | (1<<PB0)) #define Links0 PORTB = ~(~PORTB | (1<<PB0)) #define Rechts1 PORTB = (PORTB | (1<<PB1)) #define Rechts0 PORTB = ~(~PORTB | (1<<PB1)) #define SpurA ((PIND & (1<<PD2)) == 0) //INT0 #define SpurB ((PIND & (1<<PD3)) == 0) //INT1 volatile char Reset = 0; ISR (INT0_vect) { if (Reset == 0) { if (SpurB) { if (SpurA) Rechts1; else Links1; } else { if (SpurA) Links1; else Rechts1; } Reset = 4; } } ISR (INT1_vect) { if (Reset == 0) { if (SpurA) { if (SpurB) Links1; else Rechts1; } else { if (SpurB) Rechts1; else Links1; } Reset = 4; } } int main(void) { DDRB = 0b00000011; PORTB = 0b00000011; DDRD = 0b00000000; PORTD = 0b00001100; MCUCR = 0b00000101; GIMSK = 0b11000000; sei (); while (1) { if (Reset > 0) Reset--; if (Reset == 0) { Links0; Rechts0; } } return(0); }
Viele Grüße
Andreas







Zitieren

Lesezeichen