ESS Sabre Reference DAC (8-channel)

OK, looking hopeful.

I'd better explain that although I've been building electronic projects for many years (I'm currently playing with room correction on a TI DSP board), I never really grasped some of the 'basics' of electronics.

I understand things like ohms law and I've repaired hundreds of TV's, VCR's, DVD players, PC's, laptops etc. over the years, but I still don't quite get things like impedance and I/V converters.

I know that some DACs can output either voltage or current, but isn't this kind of the same thing? If you put current 'through' a resistor, wouldn't it also have voltage across it? Why are I/V converters necessary? I've looked on the Web for info, but didn't find much to explain the concept.

Please let me know if this is off topic.

OzOnE.
P.S. Don't worry about the datasheet, the 4shared link is working again for me now.
 
There are better DAC expertise than me here.
But.
Most audio DACs are current out, but some have the current to voltage (I/V) stage internally. But internal opamps are inferior to external ones, provided they are to some degree decent! Hence some have voltage out.
The text book method of getting a voltage from current is to connect the DAC current output to the minus input of an opamp with a resistor between minus in and output. The plus input goes to ground. 1 mA output current and this feedback resistor (e.g. 1 kohm) will give you 1 mA times 1 kohm = 1 V at the output.
If you have eight outputs with 1 mA and sums these before the opamp, you will have 8 mA x 1 kohm = 8 V.
If you have eight outputs of 1 mA through eight opamps with 1 kohm, you will have 1 V on all eight outputs. These can again be summed together, giving 8 V at the summer output (provided all resistors are equal (e.g. 1 kohm)).
You will have to cascade the summing opamp with the I/V stage.
If you connect a 1 kohm resistor from DAC current out to ground you will get 1 mA through that as well, and 1 V will appear over it.
And so on...
:cool:
Not off topic at all, I think.
BTW this has been a very good thread with lots of interesting things. I must get my hands on these DACs and do some nice implementations!

RK
 
Thank you, that's very helpful.

I've got a good basis to go on now. Shouldn't be too much effort to put into practice. So basically, most DACs have a very small current output capability, so they generally require a buffer or something similar to convert this small current to a usable voltage?

Ok, that's cool. I will start on the board layout for the Sabre IC first, then concentrate on the output summing etc. I may have to bug you guys / girls from time to time, but I'll try to keep my posts short.

OzOnE.
(looking forward to get RevC amps up and running again soon!)
 
Current output from DACs vary. Cannot remember what the Sabre gives. Some TI DACs has 4 mA full scale if I remember right....
The reason some converts the current with a resistor to ground instead over an opamp's -in and out is probably fear of distortion. Probably possible also due to fast edges on the current output. (Rise and fall times.)
If you go for the resistor to ground you will need an (opamp) buffer anyway. So make the PCB so you can vary between "passive" and "active" I/V. Try it out.
Remember proper grounding and decoupling!!!!!!

RK
 
Most audio DACs are current out, but some have the current to voltage (I/V) stage internally. But internal opamps are inferior to external ones, provided they are to some degree decent! Hence some have voltage out.

This is not how decent voltage out DACs (WM8740/1 for example) work. They are not internally current output with integrated opamps.
 
A different question - and I know I'm gonna sound thick when you read this!

Anyway - this DAC will take 24bit at 192, right? I have an el cheapo universal DVD recorder/player that will play just about any disc that you throw at it. So what is the best way to get some of these high res recordings onto a disc? Is it normally done on a DVD? Eg if I was to download some of the linn high res recordings what would be the best kind of disc to burn that onto so I could play it back through the buffalo? Connecting a PC directly won't work for me. Is there a decent guide somewhere that you would recommend?

Sorry for what is probably an out of context question but I haven't a clue of the answer!!

Fran
 
Spartacus said:
Hello Russ,

Any progress sorting out the 6/9 bit quantizer issue? Could you characterize the difference in noise in band and out of band with the two settings?

Cheers,
Dan

I have not had a chance to really evaluate it, but I have a suspicion.

I think the problem is not really so much about the quantizer setting but about the way they work with the DACs remapped as they have to be to support all input types (DSD,SPDIF,I2S) with 4 DACs per channel.

I think the problem is that in 9 bit mode one or more DACs is somehow inverted, or incorrectly mapped.

This is just a guess. Maybe Dustin can chime in with some help.

It could be I am just missing something in the firmware.

I will gladly send source code.

In fact here it is:
Code:
#include "init.h"
#include <htc.h>

#define SPDIF_SWITCH					GPIO5
#define FILTER_MODE_SWITCH				GPIO4
#define QUANTIZER_SWITCH				GPIO3
#define DPLL_MODE_SWITCH				GPIO2

#define AUTOMUTE_TRIGGER_LOWEST 		0b1111111 	// lowest automute trigger point
#define AUTOMUTE_OFF					0b00000000	// Effectively turns off automute
#define LOW_VOLUME 						255			// Lower limit on volume, to conserve pot travel....

#define SPDIF_ENABLED 					0b1
#define SPDIF_DISABLED 					0b0

#define PCM_DATA_FORMAT_I2S 			0b00
#define PCM_DATA_FORMAT_LJ 				0b01
#define PCM_DATA_FORMAT_RJ 				0b10

#define PCM_DATA_LENGTH_24 				0b00
#define PCM_DATA_LENGTH_20 				0b01
#define PCM_DATA_LENGTH_16 				0b10

#define NON_OVERLAP_CONTROL_OVERLAP  	0b0
#define NON_OVERLAP_CONTROL_STANDARD    0b1

#define JITTER_REDUCTION_DISABED	    0b0
#define JITTER_REDUCTION_ENABLED	    0b1

#define DEEMPHASIS_USE					0b0
#define DEEMPHASIS_BYPASS				0b1

#define UNMUTED							0b0
#define MUTED							0b1

#define NS_MOD_GAIN_3					0b0
#define NS_MOD_GAIN_4					0b1

#define DPLL_BANDWIDTH_NO_BANDWIDTH		0b000
#define DPLL_BANDWIDTH_LOWEST			0b001
#define DPLL_BANDWIDTH_LOW				0b010
#define DPLL_BANDWIDTH_MED_LOW			0b011
#define DPLL_BANDWIDTH_MEDIUM			0b100
#define DPLL_BANDWIDTH_MED_HIGH			0b101
#define DPLL_BANDWIDTH_HIGH				0b110
#define DPLL_BANDWIDTH_HIGHEST			0b111

#define PCM_DEEMPHASIS_FREQUENCY_44_1	0b01

#define DITHER_CONTROL_NOISE_SHAPED		0b0

#define ROTATOR_INPUT_NS_MOD			0b0

#define REMAPPING_REMAMP				0b1

#define NOTCH_DELAY_NO_NOTCH			0b00000
#define NOTCH_DELAY_MCK_DIV_4			0b00001
#define NOTCH_DELAY_MCK_DIV_8			0b00011
#define NOTCH_DELAY_MCK_DIV_16			0b00111
#define NOTCH_DELAY_MCK_DIV_32			0b01111
#define NOTCH_DELAY_MCK_DIV_64			0b11111

#define DAC_SOURCE_NORMAL				0b0
#define DAC_SOURCE_ALTERNATE			0b1

#define PSEUDO_DIFFERENTIAL				0b0
#define TRUE_DIFFERENTIAL				0b1

#define IIR_BW_NORMAL					0b00
#define IIR_BW_50K						0b01
#define IIR_BW_60K						0b10
#define IIR_BW_70K						0b11

#define ROLLOFF_SLOW					0b0
#define ROLLOFF_FAST					0b1

#define QUANT6							0b00
#define QUANT7							0b01
#define QUANT8							0b10
#define QUANT9							0b11


// external I2C functions
char I2C_Send(char Address,char *Data,char Num);
char I2C_Read(char Address,char *Data,char Num);
char i2csendbyte(char byte);
char i2cgetbyte(void);
char i2cgetack(void);
void i2csendack(void);
void i2cdelay(char delay);
void i2cstart(void);
void i2cstop(void);
void i2cclock(void);
char i2creadbit(void);
void DelayMs(unsigned char);
void setup(void);
void setRegister (unsigned char, unsigned char);
void setRegBits(int, int, int, int);

unsigned char address = 0x90;

unsigned char registers[16];

void setup() {
	if (SPDIF_SWITCH == 1) setRegBits(8,7,7,SPDIF_ENABLED);
	else setRegBits(8,7,7,SPDIF_DISABLED);
	setRegBits(8,6,0,AUTOMUTE_TRIGGER_LOWEST);
	registers[9] = AUTOMUTE_OFF;
	setRegBits(10,7,6,PCM_DATA_LENGTH_24);
	setRegBits(10,5,4,PCM_DATA_FORMAT_I2S);
	setRegBits(10,3,3,NON_OVERLAP_CONTROL_STANDARD);
	setRegBits(10,2,2,JITTER_REDUCTION_ENABLED);
	setRegBits(10,1,1,DEEMPHASIS_BYPASS);
	setRegBits(10,0,0,UNMUTED);
	setRegBits(11,7,7,NS_MOD_GAIN_4);
	setRegBits(11,6,5,0);								// reserved set to 0b00
	if (DPLL_MODE_SWITCH == 0) {
		setRegBits(11,4,2,DPLL_BANDWIDTH_HIGH);
	}
	else {
		if (SPDIF_SWITCH == 1) setRegBits(11,4,2,DPLL_BANDWIDTH_MED_LOW);// SPDIF needs to be at least a MED_LOW to prevent turn on glitches as per Dustin's email
		else setRegBits(11,4,2,DPLL_BANDWIDTH_LOWEST);
	}
	setRegBits(11,1,0,PCM_DEEMPHASIS_FREQUENCY_44_1);
	setRegBits(12,7,7,DITHER_CONTROL_NOISE_SHAPED);
	setRegBits(12,6,6,ROTATOR_INPUT_NS_MOD);
	setRegBits(12,5,5,REMAPPING_REMAMP);
	if (QUANTIZER_SWITCH == 0) setRegBits(12,4,0,NOTCH_DELAY_MCK_DIV_64);
	else setRegBits(12,4,0,NOTCH_DELAY_NO_NOTCH);
	registers[13] = 0;									// all DACs in phase.
	setRegBits(14,7,7,DAC_SOURCE_ALTERNATE);
	setRegBits(14,6,6,DAC_SOURCE_ALTERNATE);
	setRegBits(14,5,5,DAC_SOURCE_ALTERNATE);
	setRegBits(14,4,4,DAC_SOURCE_ALTERNATE);	
	if (QUANTIZER_SWITCH == 0) setRegBits(14,3,3,TRUE_DIFFERENTIAL);
	else setRegBits(14,3,3,PSEUDO_DIFFERENTIAL);
	setRegBits(14,2,1,IIR_BW_50K);
	if (FILTER_MODE_SWITCH == 1) setRegBits(14,0,0,ROLLOFF_FAST);
	else setRegBits(14,0,0,ROLLOFF_SLOW);
	if (QUANTIZER_SWITCH == 0) {
		setRegBits(15,7,6,QUANT6);
		setRegBits(15,5,4,QUANT6);
		setRegBits(15,3,2,QUANT6);
		setRegBits(15,1,0,QUANT6);
	}
	else {
		setRegBits(15,7,6,QUANT9);
		setRegBits(15,5,4,QUANT9);
		setRegBits(15,3,2,QUANT9);
		setRegBits(15,1,0,QUANT9);
	}
}

void setRegBits(int reg, int hi, int low, int value) {
	int i;
	unsigned char v;
	for (i = low; i <= hi; i++) {
		// clear the register bits in case they were already set
		registers[reg] &= ~(1 << i);
	}
	// shift
	v = (unsigned char) value << low;
	// set
	registers[reg] |= v;
}

void setRegister (unsigned char reg, unsigned char value) {
	unsigned char message[2];
	message[0] = reg;
	message[1] = value;
	I2C_Send(address,message,2);
}


main(void) {
	int i;
	init();
	// enable pullups
	GPPU = 1;
	WPU5 = 1;
	WPU4 = 1;
	WPU2 = 1;
	DelayMs(10);
	setup();
	for (i = 8;i < 16; i++) {
		setRegister(i,registers[i]);
	}
	while (1){
		SLEEP();
	}
}


Cheers!
Russ
 
woodturner-fran said:
A different question - and I know I'm gonna sound thick when you read this!

Anyway - this DAC will take 24bit at 192, right? I have an el cheapo universal DVD recorder/player that will play just about any disc that you throw at it. So what is the best way to get some of these high res recordings onto a disc? Is it normally done on a DVD? Eg if I was to download some of the linn high res recordings what would be the best kind of disc to burn that onto so I could play it back through the buffalo? Connecting a PC directly won't work for me. Is there a decent guide somewhere that you would recommend?

Sorry for what is probably an out of context question but I haven't a clue of the answer!!

Fran

The Linn Hi Rez downloads are 24/88.2. Seems Linn offers only 2-channels, even if the equivalent SACDs are multichannel. They say the quality is the same, but please not that the disk is DSD while the downloads are PCM. Probably the masters are PCM anyway, and converted to DSD for the SACDs.

To the point; Linn has provided some kind of user manual for what you ask about. They even recommend burning a "DVD Audio" copy.

Please see here:
http://www.linnrecords.com/linn-help-download-Burning-downloaded-music-onto-DVD.aspx#about

As the downloads are 2 channel 24/88.2 it should be possible to burn it as a DVD-V audio-only disk. (Or doesn't the DVD-V standard support 88.2 kHz sampling? DVD-A does... As they talk about the AUDIO_TS folder it seems they really mean DVD-Audio as such!)

If you try this, please report in the forum!

RK
 
Many thanks for the info, I've gone and downloaded one of the linn sampler albums to try this out. Seems to be downloading OK! They seem to recommend a specific piece of software for burning the DVD-A so I'll have to see about getting a trial version of that software. This should be an interesting experiment.

Right hardware next. Can SPDIF carry the 24-96 files?

Fran
 
Re: ESS Sabre GUI incomplete

hirez69 said:
Hi Dusfor99 (or whoever can help me),

i need you help for a problem with ESS Sabre GUI.

I'm owner of an ESS Sabre EVB. I have a problem with some
registers setting through the most recent release 2.0.2.1. (but the problem there is also with the previous version) of Sabre8 GUI (2.0.2.1.): I was not able to find in any section of the GUI the window called "Input Settings (Quantizer Setting)" where to editing the number of bits each quantizer will use. While setting in stereo mode the DAC (2 Channel) i cannot set the value of the quantizer. Through the "List all register" button I see the Register 15 setting to 00000000 (6 bits quantizer), but i cannot find the "Quantizer Settings (Input)" Window where to modify the value to 7, 8 or 9 Bits. I attach the screen capture taken from the Sabre8 Gui Help file show the windows that I cannot find.
Oherwise could you sugest another way to modify those values?
Also I don't find where to midify the "differential" from "True" to "Pseudo". I use the EVB with I2S input.

Sabre firmware is updated to the latest version available in
http://www.esstech.com/techsupp/drivers.shtm#sabre.

Thank you.



HI HighRes,

Go to the About dilog box I believe it is, then double click the ESS logo, that will show all the registers. I only did it this way to make it straight forward for those wwho aren't interested in super tweaking the DAC.
 
How to bypass the internal oversampling filter

   To Dustin (or anyone can help)
does ES9008 chip have a direct input mode which bypasses the internal oversampler filter (like AD1955 and/or PCM179x chips have)? ... the input format can be ignored in this case.
I ask this because I want to feed the ES9008 DAC with a 352.8kHz or 384kHz sample rate signal from an external upsampler. It is possible?
  Thanx!
 
dusfor99 said:



For the DIY'er you can do this. (Its what I did to 10 units)

1. buy a Denon 1940CI DVD player
2. open it up, find the DAC is a BB DSD17xx or something, find its datasheet.
3. Build a header onto the back of the denon unit.
4. tap the DSD and I2S signals to the header.
5. close it up, and conenct to the Sabre DAC.

Make sure you do a before and after FFT you will be happy.

Dustin


I guess the same will work perfectly with the Denon DVD-3910 (and other players as well). It has the PCM1796. Any experiences here?

(It should also be possible to get hold of the up to 8 channel 24/192 PCM from BluRay players this way.)

In the case of the 3910 this player also supports HDCD. HDCD disks will be decoded before the DAC, of course. Probably then, 20 bit data will be sent to the DAC(?).

RK
 
Re: How to bypass the internal oversampling filter

excelon said:
   To Dustin (or anyone can help)
does ES9008 chip have a direct input mode which bypasses the internal oversampler filter (like AD1955 and/or PCM179x chips have)? ... the input format can be ignored in this case.
I ask this because I want to feed the ES9008 DAC with a 352.8kHz or 384kHz sample rate signal from an external upsampler. It is possible?
  Thanx!

Afaik it's not possible. You'd have to downsample it. Or not upsample it that much.

Why do you want to have another upsampler? I think a great strengh of the Sabre is this oversampling...

To everybody: finish drawing the board next week. Some boards (with only the Chip, caps and a lot of connectors) will be available, as well as chips. Made with wire for sens and ground sense for the supplies etc... Mais be useless, it's a test board, trying to get the juice out of it.

I'm still very afraid of the IV stage, I think I'll go with something IVY like (or maybe buy an IVY to start with, simply), but SNR and DNR go way down, if I remember correctly, because of "high residual hf noise".

Well, if you can't really hear it it's not that bad but it upsets me.

Russ, could you get it measured again with your new configuration of the IVY?
 
diyAudio Editor
Joined 2001
Paid Member
MODERATOR"S NOTE:

Many recent posts on this thread have been moved to this new thread:

"ESS Sabre Buffalo DAC"

http://www.diyaudio.com/forums/showthread.php?s=&postid=1521516#post1521516

because they are discussing the Buffalo DAC board and associated products created by Twisted Pear Audio. Discussions regarding these products should take place on the new thread, while posts regarding the ESS Sabre DAC generally should still take place here.


Thank You,

Variac

:captain: