Hi Tony,
you are probably right with the settings of register 17. I was actually checking it couple of times, but will have to see again.
I have also found similar issue on twistedpearaudio, where the solution seemed to be switches settings (which of course doesnt work in my case)
..."SW 2 - 3 set to off will only work when you are feeding it left justified. please set SW2 - 4 to OFF for dual mono selection. Unless your BIIIse is actually a BIII of course"
-----------------------------------------------
the reg17 is set to 0x9D which is 10011101 in binary notation (means SW 2 - 3 off)
---------------------------------------------
#ifdef DUALMONO
byte reg17R=0x9D; // Auto SPDIF, MONO RIGHT CHANNEL, other defaults. Used for reg 17 right only
#endif DUALMONO
--------------------------------------------
then at start, the bit 0 is set again to 1 (mono)
--------------------------------------------
#ifdef DUALMONO // DAC registers default to stereo. Set to MONO L/R for dual MONO
bitSet(reg17,0); // Set for MONO
writeSabreReg(0x11,reg17); // Sets both chips to MONO
#endif DUALMONO
-----------------------------------------------
Register 17 (0x11) (MC5)
|1| | | | | | | | Mono Right (if set for MONO)
|0| | | | | | | | Mono Left (if set for MONO) (D)
| |1| | | | | | | OSF (Oversample filter) Bypass
| |0| | | | | | | Use OSF (D)
| | |1| | | | | | Relock Jitter Reduction
| | |0| | | | | | Normal Operation Jitter Reduction (D)
| | | |1| | | | | SPDIF: Auto deemph ON (D)
| | | |0| | | | | SPDIF: Auto deemph OFF
| | | | |1| | | | SPDIF Auto (Only if no I2S on pins) (D)
| | | | |0| | | | SPDIF Manual (Manually select SPDIF input format)
| | | | | |1| | | FIR: 28 coefficients (D)
| | | | | |0| | | FIR: 27 coefficients
| | | | | | |1| | DPLL: Phase invert
| | | | | | |0| | DPLL: Phase NO invert (D)
| | | | | | | |1| All MONO (Then select Mono L or R)
| | | | | | | |0| Eight channel (D)
---------------------------------------------------
plus there are some another regs set at start
---------------------------------------------------
bitSet(reg10,0); // Set bit zero for reg 10: Mute DACs
writeSabreReg(0x0A,reg10); // Mute DACs. Earliest we can mute the DACs to avoid full volume
setSabreVolume(currAttnu); // Reg 0 to Reg 7 Set volume registers with startup volume level
writeSabreReg(0x0D,0x00); // DAC in-phase
writeSabreReg(0x13,0x00); // DACB anti-phase
writeSabreReg(0x25,0x00); // Use built in filter for stage 1 and stage 2
writeSabreReg(0x0E,reg14); // Reg 14: BuffII input map, trueDiff, normal IIR and Fast rolloff
// Reg 14: except BuffII input map setting, the others will be
// redefined.
---------------------------------------------------
So, basically my code for register settings is exactly like the original one of hifiduino. I was changing mostly user interface, but will check it again on weekend.
I will have to dig a bit in integration guide to see how to set that thing to work in mono properly.
I think you are right, that i was wrong with saing its not software
I just have to dig a bit deeper.
This stuff is crazy, I just wanted to get good DAC and all i am doing is soldering and coding all the time, not even using my stereo to hear the music, but computer and headphones
...at least i could get lately very good priced grado RS1, so i can enjoy the music properly.
Regards from Tomasz