Bei mir funktionierts so:
Code:
SPI_WORD( 0b10100000 | ((setspg>>6) & 0b00011111) , setspg<<2 );
In setspg steht der gewünschte Wert der Ausgangsspg drin.
Gibt dann 0V-4.095 aus. (Vermute ich, aufs Bit genau geht mein DMM nicht)
Allerdings ist das hier noch ein wenig verschoben (beim zuerst gesendeten Byte hab ich meine Angaben um ein Bit nach links verschoben (Glück gehabt, dass das MSB 0 sein muss wenn man DAC_A braucht^^).
Ich hab den verdacht, dass SCK schon irgendwo zu früh eine steigende Flanke macht und der DAC schon am lesen ist. Aber ich hab leider momentan in der Arbeit wenig Zeit übrig (Prüfungsvorbereitung) und deswegen bin ich noch nicht dazu gekommen mir den BUS mit dem Digitaloskar anzusehen.
PS: meine SPI Routinen:
Code:
void SPI_INIT (void)
{
DDRB = DDRB | (1<<DDB5) | (1<<DDB7) | (1<<DDB4);
SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR0) | (1<<CPHA);
}
void SPI_WORD (char data1, char data2)
{
PORTB = PORTB & 0b11101111;
SPDR = data1;
while(!(SPSR & (1<<SPIF)));
SPDR = data2;
while(!(SPSR & (1<<SPIF)));
PORTB = PORTB | 0b00010000;
}
Viele Grüße
-schumi-
Lesezeichen