Man styr chipet med ett 11-bitars dataord som klockas in till ett internt skiftregister men sista biten skall klockas på särskilt sätt för att chipet skall latcha in hela ordet - data måste vara hög när man sänker klockan vid sista biten!
Jag använde mitt PeekyPokey-kort (USB) för att experimentera mig fram till en fungerande lösning. Mycket enklare med "trial and error"-programmering i C# på PC jämfört med en mikrokontroller.
Enkelt att snabbt koppla ihop testrigg med visuell feedback (LEDs på alla gpio ju) och matning. Nu när jag vet precis hur chipet skall styras är det en enkel sak att implementera i en mikrokontroller

Såhär blev koden för volymjustering:
Kod: Markera allt
// mode = b0x = 0 = set both channels
// mode = b10 = 2 = set channel 1
// mode = b11 = 3 = set channel 2
private void SendData(byte mode, byte vol)
{
// bits 0 and 1
int data = mode & 3;
// bits 7 and 8 (2 LSB of vol)
data |= (vol & 3) << 7;
// bits 2 - 6 (5 MSB of vol)
data |= (vol & 0x7c);
// set bits 9 and 10 (EOT marker)
data |= 0x600;
// clock out 11 bits
for (int i = 0; i < 11; i++, data >>= 1)
{
_bus.Value = (byte)(data & 1); // data only
_bus.Value = (byte)((data & 1) | 2); // data and clock
_bus.Value = (byte)(i == 10 ? 1 : 0); // latch on last bit
}
}