Unexpected Results with LTC1661

Hey all, 

I'd like to preface by apologizing in advance if this was posted in the wrong subsection. 

I'm fairly new to using external DAC's, and had a few LTC1661's laying around and decided to use them for R&D purposes. I've had success in the past with using the same DAC as a waveform generator while in school and am trying to have it generate arbitrary analog voltages between 0.1-3V for a power management control application. I am currently using the DAC's supply voltage as the reference voltage and am measuring that at 4.995V. I wrote a simple function to transfer data over SPI to the DAC, and everything at first seemed to be in order. I transferred code 1000 over SPI and generated 4.881V on the output from channel A and B of the DAC. The expected resulted would've been 1000/1023*4.995 = ~4.883 by my calculation. Perfect! Everything seemed to be in working order. I then moved to write a function to generate arbitrary voltages and that is where things started to go haywire. My debugging instinct was to simply write DAC codes and test outputs while observing the output from the uC over a logic analyzer. As an example of the problem, at DAC code 500 I would expect somewhere close to half the voltage, while allowing for some INL/DNL error. At this DAC code, the DAC is outputting 2.799V vs 2.441V (expected). This is an extremely large amount of error, especially as the datasheet indicates fairly minimal INL/DNL error at this point. Neither channel of the DAC appears to be able to go below 0.7V.  The SPI clock speed is set to 125KHz. I've included a code excerpt below, but I feel strongly as if there is unlikely to be an error here. The interface is extremely simple, everything checks out on the logic analyzer, and the upper bound values of the DAC appear to be on point. Any pointers or tips on further steps to take are appreciated as my next step is simply to try and use a micro with an internal DAC. Thanks!


















    uint8_t lowbyte;
	uint8_t highbyte;
	uint16_t register_value = 500;  
	register_value = (register_value << 2);
	register_value = (0xF000 | register_value);//append DAC code to front of value (now at 16 bits)
	lowbyte = (register_value & 0x00FF);
	highbyte = ((register_value & 0xFF00) >> 8);//...and high byte
	setLOW(PORTB, PB0); //CS low = enables SPI
	SPDR = highbyte;
	while(!checkHIGH(SPSR, SPIF)); //wait until transfer complete
	SPDR = lowbyte;
	while(!checkHIGH(SPSR, SPIF)); //wait until transfer complete
	setHIGH(PORTB, PB0); //CS high = disables SPI