Tromse
28.06.2006, 17:08
Hi!
Ich habe ein Problem mit meinem ATMega32. Ich will über die SPI Daten senden, jedoch gibt es schon bei den Grundlegenden Sachen Schwierigkeiteen:
Ich habe mich bei den Funktionen SPI_Init() und SPI_Transmit() relativ genau an das Datenblatt gehalten, jedoch sendet mein AVR lediglich (relativ zufällig) nur etwa 2-30 bytes. Dann bleibt er in der Schleife hängen, in der er auf die SPIF-Flag wartet.
Als Debugausgabe lasse ich mir per UART Kontrollstrings an den PC senden.
Wenn man die Ausgabe "waiting" aus der Schleife rausnimmt, dann hört er halt einfach nach einem "sende jetzt" auf.
Wäre nett, wenn mir jemand helfen könnte!
Vielen Dank schon mal!
Greets Tromse
void SPI_Init(void){
/* Set !DM, MOSI and SCK output, MISO input */
DDRB |= (1<<PB3) | (1<<PB5) | (1<<PB7);
DDRB &= ~(1<<PB6);
/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR0);
}
void SPI_Transmit(uint8_t cData){
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while (!(SPSR & (1<<SPIF)))
printf("waiting\n");
}
void main(){
SPI_Init();
while (1){
printf("sende jetzt\n");
SPI_Transmit(164);
printf("senden fertig\n");
}
}
Ich habe ein Problem mit meinem ATMega32. Ich will über die SPI Daten senden, jedoch gibt es schon bei den Grundlegenden Sachen Schwierigkeiteen:
Ich habe mich bei den Funktionen SPI_Init() und SPI_Transmit() relativ genau an das Datenblatt gehalten, jedoch sendet mein AVR lediglich (relativ zufällig) nur etwa 2-30 bytes. Dann bleibt er in der Schleife hängen, in der er auf die SPIF-Flag wartet.
Als Debugausgabe lasse ich mir per UART Kontrollstrings an den PC senden.
Wenn man die Ausgabe "waiting" aus der Schleife rausnimmt, dann hört er halt einfach nach einem "sende jetzt" auf.
Wäre nett, wenn mir jemand helfen könnte!
Vielen Dank schon mal!
Greets Tromse
void SPI_Init(void){
/* Set !DM, MOSI and SCK output, MISO input */
DDRB |= (1<<PB3) | (1<<PB5) | (1<<PB7);
DDRB &= ~(1<<PB6);
/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR0);
}
void SPI_Transmit(uint8_t cData){
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while (!(SPSR & (1<<SPIF)))
printf("waiting\n");
}
void main(){
SPI_Init();
while (1){
printf("sende jetzt\n");
SPI_Transmit(164);
printf("senden fertig\n");
}
}