Shift out 16 bits of data

I am working with a DAC that requires 4 bits of setup data, then a 12 bit value for the analog output. Here is the code I have right now:

int CS = 2;
int SCK = 3;
int SDI = 4;
int LDAC = 5;

void setup(){

// Setup input and output modes
pinMode(CS, OUTPUT);
pinMode(SCK, OUTPUT);
pinMode(SDI, OUTPUT);
pinMode(LDAC, OUTPUT);
digitalWrite(CS, HIGH);
digitalWrite(LDAC, HIGH);

}

void loop(){
digitalWrite(CS, LOW);
digitalWrite(LDAC, HIGH);
shiftOut(SDI, SCK, LSBFIRST, 0010);
shiftOut(SDI, SCK, LSBFIRST, 4095);
digitalWrite(CS, HIGH);
digitalWrite(LDAC, LOW);
digitalWrite(LDAC, HIGH);

delay(1000);

digitalWrite(CS, LOW);
digitalWrite(LDAC, HIGH);
shiftOut(SDI, SCK, LSBFIRST, 0010);
shiftOut(SDI, SCK, LSBFIRST, 0);
digitalWrite(CS, HIGH);
digitalWrite(LDAC, LOW);
digitalWrite(LDAC, HIGH);

delay(1000);

}

Right now this will only output .255 volts. Also, if I start with a value of 1 and step up, the output does not increase as would be expected. I am a little lost here and I am hoping to do this without going to SPI.

Thanks,
Ryan

shiftOut(SDI, SCK, LSBFIRST, 0010);

The number you shift out with the above statement is decimal 8 (numbers prefixed with 0 are by definition octal). Is this what you intend?

No, I intended to shift out the binary 0010. I think I need to change this to 0b0010 right?

Thanks for your help with this,

Ryan

#define ANALOG_IN 0

int CS = 2;
int SCK = 3;
int SDI = 4;
int LDAC = 5;

void setup(){

// Setup input and output modes
pinMode(CS, OUTPUT);
pinMode(SCK, OUTPUT);
pinMode(SDI, OUTPUT);
pinMode(LDAC, OUTPUT);
digitalWrite(CS, HIGH);
digitalWrite(LDAC, HIGH);
Serial.begin(9600);

}

void loop(){

for(int i=0; i<255; i++){

digitalWrite(CS, LOW);
digitalWrite(LDAC, HIGH);
int data = 4000;
shiftOut(SDI, SCK, LSBFIRST, 0010); // this seems to put the DAC into the right mode, but maybe not.
shiftOut(SDI, SCK, LSBFIRST, (data));
shiftOut(SDI, SCK, LSBFIRST, (data >> 8));
digitalWrite(CS, HIGH);
digitalWrite(LDAC, LOW);
digitalWrite(LDAC, HIGH);

int val = analogRead(ANALOG_IN);
Serial.print( 0xff, BYTE);
Serial.print( (val >> 8) & 0xff, BYTE);
Serial.print( val & 0xff, BYTE);

delay(1000);
}
/*
digitalWrite(CS, LOW);
digitalWrite(LDAC, HIGH);
int data2 = 00000000;
shiftOut(SDI, SCK, LSBFIRST, 0110);
shiftOut(SDI, SCK, LSBFIRST, (data2));
shiftOut(SDI, SCK, LSBFIRST, (data2 >> 8));
digitalWrite(CS, HIGH);
digitalWrite(LDAC, LOW);
digitalWrite(LDAC, HIGH);

val = analogRead(ANALOG_IN);
Serial.print( 0xff, BYTE);
Serial.print( (val >> 8) & 0xff, BYTE);
Serial.print( val & 0xff, BYTE);

delay(1000);
*/

}

So I changed this a little because shift out can't handle anything higher than 255. I made it so that it will shift it in stages but the output still doesn't go above 255. I am confused. Also, the 0010 seems to put the DAC into the appropriate mode.