Hallo

Ich kann es natürlich nicht testen:
Code:
#define AVRGCC

#include <avr/io.h>
//#include <compiler.h>

/**
PD2   Spur A
PD3 Spur B

PB0   links
PB1   rechts

   1   2   3   4
A   0   1   1   0
B   0   0   1   1
**/

#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)
{
	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;
		}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) dir=1; else dir=0; // dir==1 ist rechts/aufsteigend
			}
			else
			{
		   	if(spurb_akt) dir=0; else dir=1;
			}
		}
		else // Bitwechsel war bei Spur A
		{
			if(spurb_akt)
			{
		   	if(spura_akt) dir=0; else dir=1;
			}
			else
			{
		   	if(spura_akt) dir=1; else dir=0;
			}
		}

		spura_old=spura_akt;
		spurb_old=spurb_akt;

		if(dir)
		{
		   Rechts1;
		   Links0;
		   if(count<31) count++; else count=0;
		}
		else
		{
		   Rechts0;
		   Links1;
		   if(count>0) count--; else count=31;
		}
	}
	return(0);
}
Ich hoffe, ich habe es ungefähr getroffen. Der Motor dreht dauerhaft in Richtung der letzten Geberdrehung, der Zähler wird bei jedem Geberimpuls geändert (mit Nulldurchgang).

Gruß

mic

[Edit]Ähm, irgendwie verstehe ich gar nicht was du eigentlich bezwecken möchtest. Wie soll denn die Drehbewegung des Geber nach Ausgang Links-Rechts verteilt werden? Mit einer Anzeige könntest du den Zähler verfolgen und kontrollieren ob alle Geberimpulse erkannt werden/ ob der Nulldurchgang immer an der selben Stelle auftritt.