[Edit]
Ähm, das ist die Anwort auf den von dir inzwischen wieder gelöschten Beitrag. Ich lasse es aber trotzdem mal so stehen
Ja Sry, kurz nach dem POST hatte ich einen großen Fehler schon entdeckt (das ich ja gar nicht mein MISO ein und ausschalte...das habe ich jetzt fix korrigiert und ich denke der WRITE ist jetzt so richtig (hoffentlich) an den Reead muss ich gefühlt nochmal ran...weil ich da auch immernoch nix bekomme.



Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>


#define F_CPU 4000000UL
#define ADNS_PORT	PORTB
#define ADNS_DDR	DDRB
#define ADNS_PIN	PINB
#define ADNS_SCK	7	// Pinnumber für SCK vom ATMega32
#define ADNS_MISO	6	// Pinnumber für MISO vom ATMega32
#define ADNS_MOSI	5	// Pinnumber für MOSI vom ATMega32
	
#define ADNS_CONFIG				0x00
#define ADNS_STATUS				0x01
#define ADNS_DY					0x02
#define ADNS_DX					0x03
#define ADNS_SQUAL				0x04
#define ADNS_MAX_PIXEL			0x05
#define ADNS_MIN_PIXEL			0x06
#define ADNS_PIXEL_SUM			0x07
#define ADNS_PIXEL_DATA			0x08
#define START_OF_FRAME			0x80
#define VALID_DATA				0x40

void SCK_High (void);
void SCK_Low (void);

void USART_Init (void) ;
void USART_Transmit (unsigned char data) ;

void ADNS_Init (void) ;
void ADNS_Transmit (unsigned char data1) ;
unsigned char ADNS_Receive(void);
void ADNS_Write (unsigned char adr, unsigned char data) ;
unsigned char ADNS_Read (unsigned char adr) ;
void ADNS_Pulse (void) ;
void Delay1ms (unsigned int time) ;
void Delay1us (unsigned int time) ;


void SCK_High (void)
{
  ADNS_PORT |= (1<<ADNS_SCK);
}

void SCK_Low (void)
{
  ADNS_PORT &=~ (1<<ADNS_SCK);
}

//*********************Def's für die UART Verbindung
void USART_Init (void)
{
  
  UBRRL = F_CPU / (16 * 9600UL) - 1; 
  UCSRB = (1<<RXEN) | (1<<TXEN) ;
  UCSRC = (1<<URSEL) | (1<<USBS) | (3<<UCSZ0) ;
}

void USART_Transmit (unsigned char data0)
{
  while ( !(UCSRA & (1<<UDRE)) ) ;
  UDR = data0 ;
}

//*******************Def's für die SPI Verbindung zum ADNS
void ADNS_Init (void)
{
  ADNS_DDR |= (1<<ADNS_SCK) | (1<<ADNS_MOSI); 	//Setzt PortB auf 0b10100000 also PB7 und PB5 als Ausgang => für Read?
  SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR0);		//Müssen CPOL und CPHA gesetzt werden?
}											

/*
void ADNS_Transmit (unsigned char data1)		// überträgt data1 per spi an den adns
{
  SPDR = data1;
  while(!(SPSR & (1<<SPIF)));					//brauch ich angeblich gar nicht?
}

char ADNS_Receive (void)
{
  while(!(SPSR & (1<<SPIF)));
  return SPDR;									//Stattdessen soll das so aussehen
}
*/
void ADNS_Transmit (unsigned char data1)
{
  unsigned char i,mask;
  mask=0b10000000;

  for (i=0; i<8; i++)
  {
    SCK_Low();						// Clock Low= Sensor bereit zum beschreiben
	Delay1us(2);
	if (data1 & mask)				// Wenn Datenbit und Datenstelle (mask) 1 wird MOSI auf High gesetzt
	{								// Datenstelle startet mit bit 0 und läuft bis bit 7
	  ADNS_PORT |= (1<<ADNS_MOSI);
	}
	else
	{
	  ADNS_PORT &=~ (1<<ADNS_MOSI);
	}
	SCK_High();
	Delay1us(2);
	mask >>= 1;						// Datenstelle wird um 1 nach oben versschoben 0b00000001 wird zu 0b00000010
  }
  
}

unsigned char ADNS_Receive (void)
{
  unsigned char i,mask,result;
  result = 0;
  ADNS_PORT |= ADNS_MOSI; //Setzt Mosi port auf 1, aber ist das nicht sowieso von der Init auf 1??? brauch ich das?
  mask = 0b10000000;
  for (i=0; i<8; i++)
  {
    SCK_Low();
	Delay1us(2);
	SCK_High();
	Delay1us(2);
	if (bit_is_set(ADNS_PIN,ADNS_MOSI))
  	{
      result |= mask;
  	}
  	mask>>=1;
  }
  Delay1us(1);
  return result;
}
 
void ADNS_Pulse (void)
{
  ADNS_PORT &=~(1<<ADNS_SCK);
  ADNS_PORT &=~(1<<ADNS_SCK);
  ADNS_PORT |= (1<<ADNS_SCK);
  ADNS_PORT |= (1<<ADNS_SCK);
 
}

void ADNS_Write (unsigned char adr, unsigned char data) 
{
  ADNS_Transmit(adr | 0b10000000); 	//setzt bit 8 auf 1 zum schreiben zur adresse (bit0-3)
  Delay1us(150);
  ADNS_Transmit(data);
  Delay1us(150);
}



unsigned char ADNS_Read (unsigned char adr)			
{
 char temp;
 ADNS_Transmit(adr);
 Delay1us(150);
 temp = ADNS_Receive();
 Delay1us(150);
 return temp;
}



void Delay1ms (unsigned int time)				
{
 while(time--) _delay_ms(1);
}


void Delay1us (unsigned int time)
{
 while(time--) _delay_us(1);
}



int main (void)
{
  char send;
  USART_Transmit('A');
  USART_Init ();
  USART_Transmit('B');
  Delay1ms(500);
  ADNS_Init ();
  ADNS_Pulse (); 
  USART_Transmit('C');
  Delay1ms(500);
  ADNS_Write (ADNS_CONFIG , 0x80);
  USART_Transmit('D');				 //SOFT RESET
  Delay1ms(1000);
  ADNS_Write (ADNS_CONFIG , 0x01); //Always AWAKE
  USART_Transmit('E');
  Delay1ms(1000);

  while(1)
  {
  	USART_Transmit ('Y');
	send = ADNS_Read (ADNS_DY);
	USART_Transmit (send);
	USART_Transmit ('X');
	send = ADNS_Read (ADNS_DX);
	USART_Transmit (send);
  }
}