Wiring the digital potentiometer AD5280 (again!)

Hi all, I would use again this 50k i2c digipot; this time, I have a LED driver that provides me 2 pin for external regulation.

The datasheet says: "You can use a 50k potentiometer or a 0-10v control voltage".

Now, since there are only 2 pins ("1/10V+" and "1/10V- GND") I suppose that the potentiometer must be used in rheostat mode, ence only A (or B) and W would be used.

Using Arduino UNO r3, 50k digipot AD5280 datasheet

pin1 = A = 1/10V+
pin2 = W = "1/10V- GND
pin3 = B = not connected
pin4 = Vdd = (I don't know? Maybe 1/10V+? Or 5?)
pin5 = SHDN = 5V
pin6 = SCL
pin7 = SDA
pin8 = GND
pin9 = GND
pin10 = GND
pin11 = GND
pin12 = not connected
pin13 = 5V
pin14 = not connected

(4.7k pull-up resistor on both i2c pins, pin 8-9 are tied to GND for the i2c addres)

Are those wirings correct? Any help would be really appreciated!

Thank you!


Reading the AD5290 datasheet

A - Terminal. VSS ≤ VA ≤ VDD
B - Terminal. VSS ≤ VB ≤ VDD

Does it mean (supposing the AD5280 works the same as the AD5290) that I could provide 12V to Vdd?

Looks correct.. also the 12V for Udd

Looks correct.. also the 12V for Udd

12v even if the interface of the driver it's a 0-10v?

thank you knut_ny

The datasheet doesnt indicate otherwice. I believe: yes. even with 0..10V driver

The datasheet doesnt indicate otherwice. I believe: yes. even with 0..10V driver

Perfect, it does indeed work! Thank you!

This is an example of operation for people that is the first time you experiment with this digital potentiometer.

(I found this image in a German forum. I modified it. I have searched for the original source but I can not get to it. If someone realizes, please, tell my to mention this information.)

Code example:

#include <Wire.h>

void setup()

void loop()
  • Arduino UNO and Nano all normal, without pull-up resistors. The I2C pins are: A4 (SDA) and A5 (SCL).
  • In STM32F103 resistances of about 3k3 are needed (ideally 4k7 aprox.), and the I2C pins are: B6 (SCL) and B7 (SDA).

The third byte is the resistive value to send (0…255). In the program I set zero, change that value to others to see the resistive changes.

The 15v voltage is not necessary to see the operation. You can put the multimeter in ohms between points A and W, or between B and W, and check the resistive value that you have sent.

By default at the beginning it gives a half value, for example, if the AD5280 is 20K it will give you 10K. Once the microcontroller sends the resistive value it is when the AD5280 takes that value. If you want to start with a zero value, you have to connect /SHDN to O1 or otherwise to O2. If you connect /SHDN to O1 the second byte must have the value 0x08, and if you connect it to O2, then the value is 0x10.

More information in the datasheet.

Greetings and luck.

If you have problems, you can check in this way to see where the error is, showing that error with a "Serial.print".

error = Wire.endTransmission ();

Then "error" value can contain these values:

0: All perfect.
1: Data too long to fit in the transmission buffer.
2: Error in the address data.
3: Error in the data.
4: Another type of error.