Hallo noch mal,

ich habe deine Software gerade getestet und bin sehr zufrieden. Ich würde sagen nun funktioniert die Auswertung zu ca. 95%. Hier mal mein angepasster Code für meinen Anwendungsfall:

Code:
#define AVRGCC 

#include <avr/io.h> 

/** 
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 & 0b00000100) == 0) 
#define SpurB                     ((PIND & 0b00001000) == 0) 

char SpurA_akt, SpurA_old, SpurB_akt, SpurB_old, count = 0, dir = 0; 

int main(void) 
{ 
	DDRB = 0b00000011;
	PORTB = 0b00000011;

	DDRD = 0b00000000;
	PORTD = 0b00001100;

	Rechts0; 
   	Links0;    

   	SpurA_akt = SpurA_old = SpurA; 
   	SpurB_akt = SpurB_old = SpurB; 
    
  	while (1) 
   	{ 

      	do // warten bis Bitwechsel erkannt wird 
      	{ 
         	SpurA_akt = SpurA; 
         	SpurB_akt = SpurB;

			if (count > 0)
			{
				count--;
				if (count == 0)
				{
					Rechts0; 
    				Links0;
				}
			}
      	}
	  	while ((SpurA_akt == SpurA_old) && (SpurB_akt == SpurB_old)); 

      	if (SpurA_akt == SpurA_old)	// Bitwechsel war bei Spur B 
      	{ 
         	if (SpurA_akt) 
         	{ 
            	if (SpurB_akt)
					Links1;
				else
					Rechts1;
         	}
         	else 
         	{
            	if (SpurB_akt)
					Rechts1;
				else
					Links1;
         	} 
      	} 
      	else							// Bitwechsel war bei Spur A 
      	{ 
         	if (SpurB_akt) 
         	{ 
	            if (SpurA_akt)
					Rechts1;
				else
					Links1;
         	} 
         	else 
         	{ 
            	if (SpurA_akt)
					Links1;
				else
					Rechts1;
         	} 
      	} 

      	SpurA_old = SpurA_akt; 
      	SpurB_old = SpurB_akt; 

		count = 4;
   	} 

   	return(0); 
}
Erstaunlicherweise funktioniert das ganze besser, wenn ich die Fuse aktiviere, die den internen Clock durch 8 teilt, also wenn der AVR langsamer läuft.

Wie könnte man das ganze jetzt noch verbessern, damit aus den 95% vielleicht 100% werden? In professionellen Geräten bekommen die das ja auch irgendwie hin.

Viele Grüße
Andreas