So ich habe mich nochmal an das Problem mit der SPI-Übertragung rangesetzt. Zu folgender Erkenntnis bin ich gekommen:
- Ich kann über die Schnittstelle des Arduinos mit der Pixy-Cam kommunizieren, dies aber nur in eine Richtung (Von Pixy-Cam zu Arduino).
- Ich erhalte einen 16 bit Wert mit dem niederwertigsten Byte als erstes.
- Die Sync-Bytes sind das einzig sinnvolle was ich bekomme (Checksum stimmt vom Rest nicht).

hier der link zu der Seite wo das alles beschrieben ist:

http://www.cmucam.org/projects/cmuca.../Porting_Guide

Und im Anschluss nochmal der überarbeitete Code.

Meine Probleme sind:

- Daten über SPI von Arduino zu Pixy schicken.
- Vernünftige Daten erhalten nach den Sync-Bytes (Checksum)


Ich hoffe ihr könnt mir helfen.
Danke im Voraus

Code:
#define F_CPU 16000000UL

#define UARTaktiv //Auskommentieren, um UART zu deaktivieren

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

void TimerInit ()
{
	TCCR1A=0b10100001;
	TCCR1B=0b00000011;
	DDRB=(1<<PINB6) | (1<<PINB5);
}

	
	void USART_init(uint8_t baud)
	{
		
		/*Setzen der Baudrate (Übertragungsrate)*/
		UBRR1H = (unsigned char) (baud>>8);
		UBRR1L = (unsigned char) baud;
		
		/*Aktivieren von Empfänger(RX) und Sender(TX)*/
		UCSR1B = (1<<RXEN1) | (1<<TXEN1);
		
		/*Setzen des Formates: 8bit Groß, 2bits zum Stoppen*/
		UCSR1C = (1<<USBS1) | (3<<UCSZ10);
		
	}
	
	void USARTTransmit (unsigned char data)
	{
		/*Auf leeren Übertragungspuffer warten*/
		while (!(UCSR1A & (1<<UDRE1)) );
		
		/*Packe die Daten in den Puffer und sende diese*/
		UDR1 = data;
	}
	
	void USART_Recieve()
	{
		/*Warte auf Empfangen von Daten*/
		while (!(UCSR1A &(1<<RXC1)) );
		
		/*Bekomme die Daten vom Puffe und gebe sie zurück*/
		return UDR1;
	}
	
void SPIinit(void)
{
	DDRB = (1<<PINB1)|(1<<PINB2)|(1<<PINB0);
	SPCR = 0b01110001;
	SPSR= 0;
}
unsigned char SPI_start(unsigned char cData)
{
	SPDR = cData;
	while(!(SPSR & (1<<SPIF)));
	return SPDR;
}

uint8_t SensorArray()
{
[...]
}

void PullupSet()
{
	PORTB = (1<<PINB7);
	PORTC = (1<<PINC6);
	PORTD = (1<<PIND4);
	PORTF = (1<<PINF7) | (1<<PINF5) | (1<<PINF4);
}


int main(void)
{
	uint16_t ObjectBlock;
	uint16_t Checksum;
	uint16_t signatureNr;
	uint16_t xposition;
	uint16_t yposition;
	uint16_t width;
	uint16_t height;
	uint16_t count;
	uint8_t buffer;
	
	uint8_t sig1;
	uint8_t sig2;

	TimerInit();
 	USART_init(103);
	PullupSet();
 	SPIinit();

    while(1)
    {
		count++;
		buffer=SPI_start(0xFF);
		
		if(buffer==0xAA )
		{
			count=0;
			sig1 =(buffer);
		}
		else if (count==1)
			sig2 =(buffer);	
		else if (count==2)
			Checksum=buffer;
		else if (count==3)
			Checksum=Checksum+buffer<<8;
		else if (count==4)
			signatureNr = buffer;
		else if (count==5)
			signatureNr+= buffer<<8;
		else if (count==6)
			xposition=buffer;
		else if (count==7)
			xposition+=buffer<<8;	
		else if (count==8)
			yposition=buffer;
		else if (count==9)
			yposition=yposition+buffer<<8;
		else if (count==10)
			width=buffer;
		else if (count==11)
			width=width+buffer<<8;	
		else if (count==12)
			height=buffer;
		else if (count==13)
			height=height+buffer<<8;		

		if ((sig1==0xAA) && (sig2==0x55))
		{
		USARTTransmit((uint8_t)((xposition & 0xff00)>>8));
		USARTTransmit((uint8_t)(xposition & 0x00ff));
		USARTTransmit(sig1);
		USARTTransmit(sig2);
		USARTTransmit((uint8_t)((Checksum & 0xff00)>>8));
		USARTTransmit((uint8_t)(Checksum & 0x00ff));
		USARTTransmit((uint8_t)((signatureNr & 0xff00)>>8));
		USARTTransmit((uint8_t)(signatureNr & 0x00ff));
		USARTTransmit((uint8_t)((xposition & 0xff00)>>8));
		USARTTransmit((uint8_t)(xposition & 0x00ff));
		USARTTransmit((uint8_t)((yposition & 0xff00)>>8));
		USARTTransmit((uint8_t)(yposition & 0x00ff));
		USARTTransmit((uint8_t)((width & 0xff00)>>8));
		USARTTransmit((uint8_t)(width & 0x00ff));
		USARTTransmit((uint8_t)((height & 0xff00)>>8));
		USARTTransmit((uint8_t)(height & 0x00ff));
		USARTTransmit(13);
		}
 	}
}