keiner eine Idee?
Hier nochmal der ganze Code
Code:/************************************************************** Es soll alle halbe Sekunde im Wechsel 0 bzw. 1 gesendet werden. Am korrespondierenden Slave soll zur Indikation jeweils die LEDs an bzw. aus gehen Verdrahtung: MISO(Master) --> MISO(Slave) MOSI(Master) --> MOSI(Slave) SCK(Master) --> SCK(Slave) PB0(Master) --> SS(Slave) **************************************************************/ #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--; PORTL = 0xFF; return; } if (count == 0) { master_transmit ('0'); PORTL = 0x00; count++; } } void timer1 (void) { TIMSK1 |= (1<<TOIE1); //Timer Overflow Interrupt enable TCNT1 = 0; //Rücksetzen des Timers TCCR1B = (1<<CS10) | (1<<CS11); //8MHz/65536/64 = 1,91Hz --> 0,5s } void master_init (void) { DDRB = (1<<PB1) | (1<<PB2) | (1<<PB0); // setze SCK,MOSI,PB0 (SS) als Ausgang PORTB = (1<<PB1) | (1<<PB0); // SCK und PB0 high (ist mit SS am Slave verbunden) SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); //Aktivierung des SPI, Master, Taktrate fck/16 status = SPSR; //Status löschen } void master_transmit (unsigned char data) { PORTB &= ~(1<<PB0); //SS am Slave Low --> Beginn der Übertragung SPDR = data; //Schreiben der Daten while (!(SPSR & (1<<SPIF))); PORTB |= (1<<PB0); //SS High --> Ende der Übertragung } int main (void) { DDRL = 0xFF; master_init (); timer1 (); sei (); for (;;); return 0; }







Zitieren

Lesezeichen