Gast
#802822
Hallo, bin gerade erst in die Welt der µC's eingestiegen... Jetzt stehe ich "mal wieder" vor einer Hürde. Ich möchte einen 74HC595 am SPI des Atmega32 betreiben. Problem: Die Daten erscheinen erst nach dem zweiten aufruf der Funktion SPI_MasterTransmit() am Schieberegister. Ich hoffe ihr könnt mir helfen. #include <avr\io.h> #include "uart.h" void SPI_MasterInit(void) { /* Set MOSI and SCK output, all others input */ DDRB = (1<<PB5)|(1<<PB7)|(1<<PB4); /* Enable SPI, Master, set clock rate fck/16 */ SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); } void SPI_MasterTransmit(char cData) { PORTB |= (1 << PB4); /* Start transmission */ SPDR = cData; /* Wait for transmission complete */ while(!(SPSR & (1<<SPIF))); PORTB &= ~(1 << PB4); } int main( void ) { unsigned char temp=0; SPI_MasterInit(); uart_init( MYUBRR); while(1) { temp=uart_Receive(); if( temp=='1') {SPI_MasterTransmit(0b11111111);} if( temp=='2') {SPI_MasterTransmit(0b11111110);} if( temp=='3') {SPI_MasterTransmit(0b11111100);} if( temp=='4') {SPI_MasterTransmit(0b11111000);} } return 0; } Mfg Sascha