Fork me on GitHub

Project Notes

#259 DigitalPots/M62429

Control the M62429 dual channel volume control with an Arduino.



I’m trying out some digital potentiometers for an application. This is a test of the M62429.

The M62429 is a dual channel electronic volume control:

  • dual channel, with independant channel control
  • Volume 0 to -83dB (1dB/step)
  • Vcc = 4.5 to 5.5V
  • controlled with a simple serial data protocol

The chip is primarily designed for audio applications as:

  • volume levels are set on a logarithmic scale (dB)
  • it centres the output around VCC/2

It does work with both AC and DC signals however.

The programming interface is a very simple two-wire (data, clock) serial protocol. But being so simple (and having a strange command length of 11 bits) it’s not really possible to use either the standard Wire or SPI libraries. Time for some bit-banging!



  • Reads data signal at the rising edge of clock signal
  • Reads latch signal at the falling edge of clock
  • Clock cycle time: min 4µs
  • Clock pulse width: min 1.6µs
  • Clock rise/fall time: max 0.4µs
  • Data setup time: min 0.8µs
  • Data hold time: min 0.8µs

Level Encoding

D6 D5 D4 D3 D2 D8 D7 Level
0 0 0 0 0 x x -∞dB
0 0 0 0 1 0 0 -83dB
0 0 0 0 1 0 1 -82dB
0 0 0 0 1 1 0 -81dB
0 0 0 0 1 1 1 -80dB
0 0 0 1 0 0 0 -79dB
. . . . . . . ..
1 0 1 0 0 1 1 -4dB
1 0 1 0 1 0 0 -3dB
1 0 1 0 1 0 1 -2dB
1 0 1 0 1 1 0 -1dB
1 0 1 0 1 1 1 0dB


The M62429.ino sketch is a simple exercise of the chip.

  • input for both channels is AC-coupled 1kHz sine wave
  • left channel is set to max volume
  • right channel volume is stepped up through all gradations

Here is a capture of two frames of clock/data output from the Arduino, captured with a logic analyzer:


The first sequence reads: 11011101011 + latch (data high on falling clock). That breaks down as:

  • 11 2CH, channel at a time
  • 01110 ATT1: -28dB
  • 10 ATT2: -2dB
  • 11 end bits
  • i.e. set channel 2 to -30dB

The first sequence reads: 11011100111 + latc:

  • 11 2CH, channel at a time
  • 01110 ATT1: -28dB
  • 01 ATT2: -1dB
  • 11 end bits
  • i.e. set channel 2 to -29dB

Yes, that’s as expected - the script is sequencing through level settings on channel 2.

The scope trace tells the story of what is happening on the left and right channel outputs:

  • CH1 (yellow) is DC-coupled left channel
  • CH2 (blue) is the AC-coupled right-channel


Next test was with a 5V DC signal on left and right channel input.

  • CH1 (yellow) is DC-coupled left channel
  • CH2 (blue) is the DC-coupled right-channel, offset by -2.5V






Credits and References

Project Source on GitHub Project Gallery Return to the LEAP Catalog

This page is a web-friendly rendering of my project notes shared in the LEAP GitHub repository.

LEAP is just my personal collection of projects. Two main themes have emerged in recent years, sometimes combined:

  • electronics - usually involving an Arduino or other microprocessor in one way or another. Some are full-blown projects, while many are trivial breadboard experiments, intended to learn and explore something interesting
  • scale modelling - I caught the bug after deciding to build a Harrier during covid to demonstrate an electronic jet engine simulation. Let the fun begin..
To be honest, I haven't quite figured out if these two interests belong in the same GitHub repo or not. But for now - they are all here!

Projects are often inspired by things found wild on the net, or ideas from the many great electronics and scale modelling podcasts and YouTube channels. Feel free to borrow liberally, and if you spot any issues do let me know (or send a PR!). See the individual projects for credits where due.