Okay. Das habe ich nun versucht.
Mein SPI schaut wie folgt aus:
Code:void SPI_MasterInit(void) { // Set /SS, MOSI and SCK output, all others input DDRB = (1<<PB2)|(1<<PB3)|(1<<PB5); // SS, MOSI, CLK are Outputs //PORTB &= ~(1<<PB2); // LED on (PB2 low) DDRC = (1<<PC1)|(1<<PC2)|(1<<PC3)|(1<<PC4); // SPI::SS1...4 outputs PORTC = (1<<PC1)|(1<<PC2)|(1<<PC3)|(1<<PC4); // all high // Enable SPI, Master, MSB first, SPI Mode 1, set clock rate fck/128 SPCR |= (1<<SPE) | SPI_MSB_1 | (1<<MSTR) | SPI_MODE_0 | SPI_SPEED_128; }Code:void SPI_MasterSend(char high, char mid, char low) { PORTB |= (1<<PB2); // SS is set high, effects that LED is off cli(); _delay_us(5); SPDR = high; while(!(SPSR & (1<<SPIF))); SPDR = mid; while(!(SPSR & (1<<SPIF))); SPDR = low; while(!(SPSR & (1<<SPIF))); _delay_us(5); sei(); PORTB &= ~(1<<PB2); // SS is set low, effects that LED is on }Code:void SPI_Master_to_DAC_send(uint8_t mode, uint8_t dac, uint16_t wert) { uint8_t byte_high = 0x0; uint8_t byte_mid = 0x0; uint8_t byte_low = 0x0; char dac_buf[128]; // Buffer für Konsolenausgabe-String switch( mode ) { case 0: byte_high |= 0x0; break; // write to input register n case 1: byte_high |= 0x8; break; // update dac register n case 2: byte_high |= 0x10; break; // write to input register n, update all case 3: byte_high |= 0x18; break; // write to and update dac channel n } switch( dac ) { case 0: byte_high |= DAC_A; break; case 1: byte_high |= DAC_B; break; case 2: byte_high |= DAC_C; break; case 3: byte_high |= DAC_D; break; case 4: byte_high |= DAC_ALL; break; } byte_mid = (wert>>4); byte_low = (wert<<4); PORTC &= ~(1<<PC1); SPI_MasterSend( byte_high, byte_mid, byte_low ); PORTC |= (1<<PC1); sprintf( dac_buf, "## SYSTEM ## DAC Data send (%d)(%d[%d][%d])\n\r", byte_high,wert,byte_mid,byte_low); UART_puts(dac_buf); }Code:#define SPI_MODE_0 ( (0<<CPOL) | (0<<CPHA) ) #define SPI_MODE_1 ( (0<<CPOL) | (1<<CPHA) ) #define SPI_MODE_2 ( (1<<CPOL) | (0<<CPHA) ) #define SPI_MODE_3 ( (1<<CPOL) | (1<<CPHA) ) #define SPI_MSB_1 ( (0<<DORD) ) #define SPI_LSB_1 ( (1<<DORD) ) #define SPI_SPEED_64 ( (1<<SPR1) | (0<<SPR0) ) #define SPI_SPEED_128 ( (1<<SPR1) | (1<<SPR0) )







Zitieren

Lesezeichen