FM62429 Digital Volume?

Guys, I found this cheap Digital Volume chip: FM62429 - its great, but the datasheet tells me its a 2-wire interface: Data, Clock - but doesn't show me what is transmitted. Can someone give me a hint, please? :blush:

Thank you, Wk

first idea: from datasheet - Gain is from 0- -83dB in 1dB steps so I think one byte should be sufficient.

google gave me zillion links to the same datasheet or rubbish,
seems you have to reverse engineer the spec. clock in bytes and measure …

Indeed. As soon as the chips arrive I will start playing around with it and see what happens, txs.


Sadly no luck, couldn't get it to work. =(

A great friend just pointed me this out:

the FM62429 is a "copy" of Mistubishi's M62429/FP

And he sent me all PDF data, here's some links:


Do you mind sharing the part of your code where you are communicating with the volume control circuit?

I am having trouble sending 11 bits. How do you do that?

Additional from FM62429, CSC62429, CD62429 is replacement for M62429 as well.

if I were you , I will send 11 bits as 2 bytes since Arduino is 8 bits cpu. first byte is first 8 bits data, second byte will be rest 3 bits plus "00000" as tail by using Arduino virtual serial/serial port. I do not have above IC. You could give it a try.

Hello all,

if someone is interested, I’m running the M62429 on such a “Digital Stereo Audio Volume Control Board PT2259”:

If you do not use the rotary encoder but instead plug +5V, GND, DATA, and CLOCK to your Arduino it will work perfectly. The external power supply is also not needed.

I found a library and examples at this site GitHub - krupski/M62429: Arduino Library for the NEC/Renesas M62429 Digital Volume Control, but in the library the delay functions have wrong syntax, so change _delay_ms to delay and _delay_us to delayMicroseconds.

The following code is based on the library, but mine doesn’t need a library, it’s all in the code.

A little example sketch based on this lib:

int x=0;
int VolumePinDAT=7; // connect to DATA
int VolumePinCLK=6; // connect to CLOCK

void setup (void)
  pinMode(VolumePinDAT, OUTPUT);
  pinMode(VolumePinCLK, OUTPUT);

void loop (void)
  // sweep from quiet to loud
  for (x=0;x<=100;x++)
  // sweep back
  for (x=100;x>=0;x--)


// this function does the job
void setVolume (uint8_t volume)
	uint8_t bits;
	uint16_t data = 0; // control word is built by OR-ing in the bits

	// convert attenuation to volume
	volume = (volume > 100) ? 0 : (((volume * 83) / -100) + 83); // remember 0 is full volume!
        // generate 10 bits of data
	data |= (0 << 0); // D0 (channel select: 0=ch1, 1=ch2)
	data |= (0 << 1); // D1 (individual/both select: 0=both, 1=individual)
	data |= ((21 - (volume / 4)) << 2); // D2...D6 (ATT1: coarse attenuator: 0,-4dB,-8dB, etc.. steps of 4dB)
	data |= ((3 - (volume % 4)) << 7); // D7...D8 (ATT2: fine attenuator: 0...-1dB... steps of 1dB)
	data |= (0b11 << 9); // D9...D10 // D9 & D10 must both be 1

	for (bits = 0; bits < 11; bits++) { // send out 11 control bits
		delayMicroseconds (2); // pg.4 - M62429P/FP datasheet
		digitalWrite (VolumePinDAT, 0);
		delayMicroseconds (2);
		digitalWrite (VolumePinCLK, 0);
		delayMicroseconds (2);
		digitalWrite (VolumePinDAT, (data >> bits) & 0x01);
		delayMicroseconds (2);
		digitalWrite (VolumePinCLK, 1);
	delayMicroseconds (2);
	digitalWrite (VolumePinDAT, 1); // final clock latches data in
	delayMicroseconds (2);
	digitalWrite (VolumePinCLK, 0);
	//return data; // return bit pattern in case you want it :)

Ok, so final confirmation before I buy.

1.These chips FM62429 work well with Audio 2.Although they are not I2C they work with 2 Wires. 3.You are satisfy with the audio results

One more question, can you read the data that you send after you send? I mean if I set the volume value, can I go later and check what the value is set to? Or is the register write only?

can this chip be used as an actual pot?

anyone? its advertised as a digital potentiometer in many places