Gast
#897200
Hallo :-)
Ich habe bei der Kommunikation über SPI mit meinem Atmega8 einige
Probleme. Ich versuche gerade über MOSI verschiedene Signale zu senden.
Lege ich 4 Byte Nullen auf den Bus zeigt mir der Logiganalysator (Bild
leider nicht kopierbar) folgendes:
SS: Bleibt 0 über 32 Bit
SCK: 32 Takte innerhalb SS
MOSI: Je eine "1" nach 8 Takten
Unten mein dazugehöriger Quellcode. Hat jemand ne Idee? Ich probiere
schon seit Wochen herum ohne einen Fortschritt zu erzielen.
Danke!
//###########################################
void read_write_spi(UCHAR writebyte)
{
/* Start transmission */
SPDR = writebyte;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
}
//############################################
void Send(UCHAR a, UCHAR b, UCHAR c, UCHAR d)
{
PORTC&=~((1<<PC2)); //Pin2 CSN auf LOW legen
read_write_spi(a);
read_write_spi(b);
read_write_spi(c);
read_write_spi(d);
PORTC|=(1<<PC2); //PIN2 (CSN) auf HIGH legen
}
//#############################################
void INIT_SPI (void)
{
DDRB = (1<<PB3)|(1<<PB5)|(1<<PB2);
PORTB=(1<<PB2);
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
}
//#############################################
int main (void)
{
WDTCR=0x18; //Watchdog disable
WDTCR=0x00;
DDRD=0xff; //PORTD = Ausgang
DDRC=0xff; //PORTC = Ausgang
PORTC=0; //PORTC = 0
PORTD=0; //PORTD = 0
INIT_SPI();
while(1)
{
_delay_us(100);
Send(0x00, 0x00, 0x00, 0x00);
}
return 0;