Hallo

Ich habe von meinem Lehrer einen Code für SPI erhalten.
Der Atmega 2560 soll der Master sein. Als Slaves werden 2 AT90PWM316 oder 2 Atmega 16 verwendet.

Das Problem ist das ich nicht mal den Master zum laufen bekommen.
Warscheinlich ist nur eine Kleinigkeit falsch aber ich finde den Fehler nicht.

Hier der Code.
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

unsigned char status = 0;
volatile unsigned char count;

void timer1 (void);
void master_init (void);
void master_transmit (unsigned char data);

SIGNAL (SIG_SPI) {
	return;
}

SIGNAL (SIG_OVERFLOW1) {						//Senderoutine
	if (count == 1) {
		master_transmit ('1');
		count--;
		return;
	}
	if (count == 0) {
		master_transmit ('0');
		count++;
	}
}

void timer1 (void) {
	TIMSK1 |= _BV(TOIE1);           				//Timer Overflow Interrupt enable
	TCNT1 = 0;                					//Rücksetzen des Timers
	TCCR1B = _BV(CS10) | _BV(CS11);			//8MHz/65536/64 = 1,91Hz --> 0,5s
}

void master_init (void) {
	DDRB = _BV(PB0) | _BV(PB3) | _BV(PB5);		// setze SCK,MOSI,PB0 (SS) als Ausgang
	DDRB &= ~_BV(PB4);							// setze MISO als Eingang
	PORTB = _BV(PB5) | _BV(PB0);				// SCK und PB0 high (ist mit SS am Slave verbunden)
	SPCR = _BV(SPE) | _BV(MSTR) | _BV(SPR0);	//Aktivierung des SPI, Master, Taktrate fck/16
	status = SPSR;								//Status löschen
}

void master_transmit (unsigned char data) {
	PORTB &= ~_BV(PB0);						//SS am Slave Low --> Beginn der Übertragung
	SPDR = data;								//Schreiben der Daten
	while (!(SPSR & (1<<SPIF)));
	PORTB |= _BV(PB0);							//SS High --> Ende der Übertragung
}

int main (void) {

	master_init ();
	timer1 ();
	sei ();

	for (;;);
	return 0;
}