Hallo Liebe Community,
ich würde gerne einen Maussensor ADNS2610 mit Hilfe eines ATMegas32 auslesen und die Info's per UART an den PC senden. Ich habe den Maussensors als Einzelteil mit nem 24MHZ Quarz, LED, 5V und MOSI und SCK vom ATmega32 bestückt. Der uC sitzt auf nem STK500 Programmierboard.
Die UART-Verbindung habe ich soweit schon zum laufen bekommen. Nun stockt es aber bei meinen Programmierkenntnissen zum Auslesen des Maussensors über die SPI Verbindung.

Beispielhaft habe ich schonmal ein Programmtext zum auslesen der delta x und y Werte geschrieben.
Ich weiß eben nur nicht wie mein Write und Read dazu aussehen muss. Ich hoffe mir kann da geholfen werden und das ich kein hoffnungsloser Fall bin
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 USART_Init (void) ;
void USART_Transmit (unsigned char data) ;

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


//*********************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)));
}

char ADNS_Receive (void)
{
  while(!(SPSR & (1<<SPIF)));
  return SPDR;
}

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) // Hier weiß ich leider überhaupt nicht mehr weiter	
{
 
}



char ADNS_Read (unsigned char adr)			
{
 char temp;
 
 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_Init ();
  Delay1ms(500);
  ADNS_Init ();
  Delay1ms(500);
  ADNS_Write (ADNS_CONFIG , 0x80); //SOFT RESET
  Delay1ms(200);
  ADNS_Write (ADNS_CONFIG , 0x01); //Always AWAKE
  Delay1ms(200);

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