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:
can this one perhaps be a direct 'drop-in' replacement? LTC1655 or LTC1655L:
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
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.
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.
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!)
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);
SPI.begin();
// 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
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
break;
You could do the same PORTB = ... thing for speeding it up some too.