Moin!
Ich hoff das ist das richtige Unterforum, hab leider kein passenderes gefunden.

Ich versuche gerade einen DA-Wandler über SPI anzusprechen. Bis jetzt
leider ohne Erfol.

Der DA-Wandler erwartet ein 14-bit Wort nach dem Schema:

1 Startbit, 2 Controlbits, 3 Adressbits und 8-Datenbits.

folgendes möchte ich Übertragen:

1 0 1 0 0 0 1 1 , 1 1 1 1 1 1

Das wäre meine 14-bit Information, um das zweite Byte vollzubekommen
häng ich noch 2 0er an. Die letzten zwei Stellen sind ja eh don`t care
für den DA-Wandler(?).

Also übertrage ich 0xA3 und 0xFC mit folgendem Program:


Code:
#include <stdlib.h>
#include <avr/io.h>
#include <avr/signal.h>

#define SS PB0
#define MOSI   PB2
#define SCK  PB1
#define CS  PE6

SIGNAL (SIG_SPI) {
  return;
}

void SPI_Master_TransmitInit(void)
{
  /* Set MOSI, SS und SCK als Ausgang */
  DDRB |= (1<<MOSI) | (1<<SCK) | (1<<SS);
  DDRE |= (1<<CS);      //Chip select als Ausgang  
  PORTB |=(1<<SS);      //Slave select High
  PORTE |= (1<<CS);      //Chip select High
  /* Enable SPI Interrupt, Enable SPI, Master, f = FCPU/16 */
  SPCR = (1<<SPIE) | (1<<SPE) | (1<<MSTR) | (1<<SPR0);
}

void SPI_MasterTransmit(void)
{
  PORTE &= ~(1<<CS);    //Chip select Low
  PORTB &= ~(1<<SS);    //Slave select Low
  SPDR = 0xA3;        //Erstes Byte senden
  while(!(SPSR & (1<<SPIF))); // warte bis Byte gesendet
  SPDR = 0xFC;          //Zweites Byte senden  
  while(!(SPSR & (1<<SPIF))); // warte bis Byte gesendet
  PORTE |=(1<<CS);      //Chip select High
  PORTB |=(1<<SS);      //Slave select High
}

int main (void)
{ 
  sei(); 
  SPI_Master_TransmitInit();
  SPI_MasterTransmit(); 
 
  while(1)  
  return 0;
}
Nicht wundern wegen SS und CS, CS geht an den DA-Wandler, SS ist über
Widerstand auf Masse, ist Hardwaremäßig so vorgegeben.

Weiß vielleciht jemand einen Rat was faul sein könnte?