Difference between Rail to Rail DAC vs Single Supply?

I had a project developed.. and it used a 12-bit DAC.... I was later informed that the 12-bit might not work for the original/intended purpose of the board/project. (not sure why it was chosen then?).. and that I may in fact need a 16 bit DAC? (not confirmed.. but wanted to start looking for a replacement)..

since the PCB's are already made.. a direct, drop-in replacement matching the same PIN OUT would obviously be the best solution!.. however I am not sure if that is possible...

(intended end use was the WaveHC library..for this hardware. Im not 100% sure this 12-it dac will NOT work)

Current DAC in use: LTC1257: http://www.linear.com/product/LTC1257 http://cds.linear.com/docs/Datasheet/1257fb.pdf

can this one perhaps be a direct 'drop-in' replacement? LTC1655 or LTC1655L: http://www.linear.com/product/LTC1655 http://cds.linear.com/docs/Datasheet/16555lf.pdf

Im not clear on the difference (if any) between the naming?

complete single supply 12-bit DAC vs rail to tail micropower 16-bit DAC

compare list: http://parametric.linear.com/voltage_output_dacs#!1050_1!1054_Serial%20SPI!inputs_1!resmin_!resmax_!interface_spi

Based on a quick look at the data sheets, the parts are not drop in compatible, but could be used in the same footprint with some changes.

By default the reference voltage is the same (2.048V), but the output signals are not. The 1655 output is scaled to 2x the reference voltage. The 1257 output is scaled to 1x the reference. If you use the 1655L, which is referenced to 1.25V instead of 2.048V the output amplitude will be similar, but not the same. You could also give up 1 bit of resolution and only use half the range of the 1655 output.

The 1655 can only be powered by 5V and the reference must be near Vcc/2. The 1257 can be referenced to 12V.

The 1655 is rail-to-rail so it can drive the output voltage from nearly 0V to nearly 5V. The 1257 can only drive the output voltage to Vcc-2.7V. Both would be considered "single supply" since you don't need a negative voltage supply.

Steve Turner

Thanks for the reply!..

I am still working through DAC issues currently.. =(

hey!.. your not too far from me! (sorta)..

Im in SE Wisconsin!

take care!

You misunderstood the original comment xl97. The DAC selected is a 12-bit DAC, you perform 2 8-bit transfers to it to load in data, 4 of the bits are ignored. That's all. Other DACs use the 4 bits for various purposes.

" The power supply current is a low 350µA when operating from a 5V supply, making the LTC1257 ideal for battery-powered applications. The space-saving 8-pin SO package and operation with no external components provide the smallest 12-bit D/A system available."

This collection of properties made it a good choice for your application.

I had started/posted this in response to your comment that the 12-bit DAC night not work.

When I was looking for a drop-in replacement, I had asked about this,…but you werent sure or replied ‘no clue’ or something similar.

I had read something about the WaveHC lib that the the last? 4 bits were ignored… but wasnt sure if this means I could still use the same DAC I have in use.

So to be clear (so “I’m” clear…haha)… my current DAC is not a problem,correct?

If yes…Im glad/happy then…one more thing checked off the list. :slight_smile:

I still havent been able to get any noise from the speaker/dac using that sample code…

(editing the values and/or removing the delays too!)



Having my own problems tonight too. Can't even get a board to acknowledge that it received a simple byte. Aggravating.

gonna have some time this week to work on things again…

wondering if you made any headway on your DAC output Crossroads??

I saw you had started a DAC thread…where it seems you guys worked through alot fo things… wondering if any of that new stuff will apply to the sample code I was suppose to try?

#include <SPI.h>  // check the format of that
int dataX;
byte DAC_SS = 9;
void setup(){
  pinMode(10, OUTPUT);
  pinMode (DAC_SS, OUTPUT);
  // other setup stuff
}  // end setup
void loop(){
  for (dataX = 0; dataX < 0x1000; dataX = dataX+150){ // play with dataX+1 part
    SPI.transfer (highByte (dataX) );  // you will have your data as int's, from 0x0000 to 0x0FFF, this sends  the 0x0F part
    SPI.transfer (lowByte (dataX) );   // and this sends out the remaining FF part
    digitalWrite (DAC_SS, LOW);
    digitalWrite (DAC_SS, HIGH);
    //delayMicroseconds(13); // play with this 
  for (dataX = 0x0FFF; dataX >= 0; dataX = dataX-150){ // play with dataX-1 part
    SPI.transfer (highByte (dataX) );  // you will have your data as int's, from 0x0000 to 0x0FFF
    SPI.transfer (lowByte (dataX) );
    digitalWrite (DAC_SS, LOW);
    digitalWrite (DAC_SS, HIGH);
    //delayMicroseconds(13); // play with this 
}//end void loop

this was the last version I had tried to use…


Yes, I think I have it working. Only updates every 1 of 8 every 5mS from data sent over an RS232 link, so way too slow for audio. Good enough for motor control tho:

    // Switch for the appropriate DAC, 0-7
    switch (Serial.read()) {
    case 0:
      // read serial UART & SPI.transfer it out
      PORTB = PORTB & B11111011; // PB:2 DAC 0 SS LOW
      SPI.transfer (Serial.read() | DAC_A_mode); // read highADC nibble & mix with control bits, send it out
      SPI.transfer (Serial.read());        // read lowADC byte, send it out
      PORTB = PORTB | B00000100; // DAC 0 SS HIGH

You could do the same PORTB = ... thing for speeding it up some too.