miniDSP to Twister Pear Opus DAC via I2S

Status
This old topic is closed. If you want to reopen this topic, contact a moderator using the "Report Post" button.
Anyone connect their miniDSP to an opus DAC via I2S? I've read in other another thread that it is possible. MiniDSP - MiniDSP/MiniDIGI combo and external DACs? - MiniDSP
and the miniDSP I2S technical note.

However, i was wondering if anybody had this going with the opus configured in Normal mode using hardware jumpers?

It should work.

According to the miniDSP i2s manual, miniDSP I2S operates in the following mode:
-External ADC/DAC is an I2S slave device.
-MCLK: 12.288MHz
-BCLK: 3.072MHz = 64Fs = (64 * 48kHz)
-LRCLK: 48kHz
-Resolution: 24bits

This is supported by WM8741/OPUS. MCKL at 12.288 is 256fs which is in the sweet spot of mclk supported by the DAC
 
I can confirm it's working. I'm using the default hardware settings for the Opus, as found in it's user manual. My chain is miniDIGI (I2S master) -> miniDSP (I2S/MCLK slave) -> Opus (slave).


Great!!
I have the same setup (miniDIGI and miniDSP)

I have some other questions:
which board are you using to get your MCLK signal?
Are you using two opus DACS to get 4 mono outs?
How does it sound?

Thanks.
Leo
 
Sorry, should have written miniDIGI is MCLK master.

Unfortunately I don't have my new amps with balanced input yet (still waiting for manufacturer), so all I've done is hook up one Opus to the miniDSP and route one of the Opus' outputs into my soundcard (RME FF400) to check it's working.

My speakers are 3 way stereo. At this stage I'm just using the miniDSP DACs into my receiver for multi-amping.

System will soon be:
FF400 -> SPDIF ->
miniDIGI -> I2S ->
2x miniDSP -> I2S ->
3x Opus
 
>>
System will soon be:
FF400 -> SPDIF ->
miniDIGI -> I2S ->
2x miniDSP -> I2S ->
3x Opus
<<

Although I have not contemplated purchasing these models, I've had the same arrangement in my head. The miniDIGI is a nice module with good clock and SRC chip. Ideally one would use the volume control of the OPUS and then connect directly into amps. However with 3 OPUS you are one I2C address short.

How do plan to control the volume?
 
It should be possible via SPI. As the WM8741 has in built daisy chaining features, it looks like it would only require 3 wires from an arduino.

What happens if there are more than 1 device on an I2C bus with the same address? If it's OK for all the volume to be set the same this might work.


Failing all that (or maybe preceding), the RME FF400's internal mixer runs at 40bits, and it's already got a display and a knob.
 
What happens if there are more than 1 device on an I2C bus with the same address? If it's OK for all the volume to be set the same this might work.

This doesn't work and is the one major pitfall of I2C. After each transmitted data byte the slave has to send an ACK or NACK in response. It does this by pulling the dataline low for the clock period after the last bit sent.

Quite how this would function if you did connect two devices with the same address I do not know. The ACK is passive, in that the master doesn't have to acknowledge it in any way. I get the impression that the ACK is used for two things. 1) so you know everything is working correctly and 2) for timing. In other words you monitor an internal flag for the ACK and know you can send the next data byte directly after it as a result.

Instead of monitoring the flag for the ACK, you can ignore it and place a time delay between successive data transmits instead, it accomplishes the same thing but could be prone to slip ups if you trim the time delay too low and end up interrupting the transmit bus as a result.

To this end, if the timing between two slaves under the same address was slightly different (why this would be a don't know they are both clocked to the same thing), both would try and pull the data line low in ACK, at the same time. I don't know what the result of this would be. From the view point of the master, it wouldn't really care. The slaves? I don't know what would happen if both try to ACK at the same time. I have heard of errors where a slave pulls a line low and doesn't release it. This generally occurs if the clock goes away for some reason before the line is released. This could perhaps happen if one device ACKs slightly before the other and the master releases the clock as a result. To solve this you need to change the micros output pin configuration, disable the I2C module, configure the clock pin as a general output, send a makeshift clock pulse down what was the clock line so the slave can finish what it's trying to do and it will then release the line. Then turn the I2C module back on and transmit the next data byte.

This of course is just speculation, it could work just fine, or it could be a disaster, I've never tried it, although I'd be up for giving it a go :p

You could use SPI, or purchase a micro with two I2C controllers instead.

(Take what I've written here with a grain of salt as I've only just learnt how to use I2C;))
 
It should be possible via SPI. As the WM8741 has in built daisy chaining features, it looks like it would only require 3 wires from an arduino.

What happens if there are more than 1 device on an I2C bus with the same address? If it's OK for all the volume to be set the same this might work.


Failing all that (or maybe preceding), the RME FF400's internal mixer runs at 40bits, and it's already got a display and a knob.

Ah Yeah, SPI... WM8741 supports both I2C and SPI...
 
Status
This old topic is closed. If you want to reopen this topic, contact a moderator using the "Report Post" button.