meta data for this page
This is an old revision of the document!
lamaPLC project: Digitales Potentiometer Board Moduls
A digital potentiometer (or “digipot”), such as the Renesas X9C series, is a semiconductor device that replicates the function of a mechanical potentiometer—varying resistance—but replaces the manual knob with digital control signals.
Renesas X9C series
The X9C102, X9C103, X9C104, and X9C503 are digitally controlled (XDCP) potentiometers. The device consists of a resistor array, wiper switches, a control section, and nonvolatile memory. The wiper position is controlled by a three-wire interface.
The potentiometer is implemented using a resistor array composed of 99 resistive elements and a wiper-switching network. Between each element and at either end are tap points accessible to the wiper terminal. The position of the wiper element is controlled by the CS, U/D, and INC inputs. The wiper position can be stored in non-volatile memory and recalled upon subsequent power-up.
The device can be used as a three-terminal potentiometer or a two-terminal variable resistor in a wide variety of applications, from control to signal processing to parameter adjustment.
| Model | Total Resistance (R total) | Step Size (approx.) | Temp.Coefficient | Max Terminal Voltage Differential (ΔV) |
|---|---|---|---|---|
| X9C102 | 1 KΩ | 10.1 Ω | +600 ppm/°C | 4 V |
| X9C103 | 10 KΩ | 101 Ω | +300 ppm/°C | 10 V |
| X9C104 | 100 KΩ | 505 Ω | +300 ppm/°C | 10 V |
| X9C503 | 50 KΩ | 1010 Ω | +300 ppm/°C | 10 V |
- Resolution: 100 Wiper Tap Points (0–99).
- Interface: 3-wire serial (CS, U/D, INC).
- Memory: Non-volatile EEPROM (retains position for 100 years).
- Supply Voltage (Vcc): 5V
- Resistance Tolerance: ±20% end-to-end.
- Typical Wiper Resistance: 40 Ω at 1 mA
Full datasheet: https://www.renesas.com/en/document/dst/x9c102-x9c103-x9c104-x9c503-datasheet
Pinout for the Renesas X9C series module board
The Renesas X9C series module board, commonly known as the X9C103S module, organizes the chip's pins into two separate header rows, making it more convenient to connect with breadboards and microcontrollers such as Arduino. Usually, it includes a 5-pin control header on one side and a 3-pin potentiometer header on the opposite side.
| Header | Pin Label | Name | Function |
|---|---|---|---|
| Control | VCC | Power | Connects to +5V supply. |
| Control | GND | Ground | Circuit common ground. |
| Control | CS | Chip Select | Active LOW. Must be pulled low to enable control. |
| Control | INC | Increment | Negative-edge triggered. Pulses move the wiper. |
| Control | U/D | Up/Down | Direction: HIGH to increase, LOW to decrease. |
| Potentiometer | VH (or H) | High | High-end terminal of the pot (max +5V). |
| Potentiometer | VW (or W) | Wiper | The adjustable “middle” output pin. |
| Potentiometer | VL (or L) | Low | Low-end terminal of the pot (min -5V). |
Quick Wiring Guide
- For 0-5V Voltage Divider: Connect VH to 5V, VL to GND, and read the output from VW.
- Control Interface: Connect CS, INC, and U/D to any three digital GPIO pins on your microcontroller.
- Saving Settings: To save the current resistance so it persists after power-off, you must pull CS HIGH while INC is already HIGH.
Arduino example code
To operate a Renesas X9C series digital potentiometer (such as the X9C103S) with an Arduino, you can either utilise a dedicated library like DigiPotX9Cxxx or manually control the pins. Here is a straightforward example that gradually varies the resistance from minimum to maximum without requiring any external library.
Wiring Diagram
| X9C Module Pin | Arduino Pin | Description |
|---|---|---|
| VCC | 5V | Power Supply |
| GND | GND | Ground |
| CS | Pin 10 | Chip Select (Active LOW) |
| INC | Pin 9 | Increment (Pulse to move) |
| U/D | Pin 8 | Up/Down (HIGH = Up, LOW = Down) |
| VH / VL | 5V / GND | To use as a 0-5V voltage divider |
| VW | A0 | Connect to Analogue Pin 0 to see results |
// Pin Definitions const int CS_PIN = 10; const int INC_PIN = 9; const int UD_PIN = 8; void setup() { Serial.begin(9600); // Set control pins as outputs pinMode(CS_PIN, OUTPUT); pinMode(INC_PIN, OUTPUT); pinMode(UD_PIN, OUTPUT); // Initial state: deselect chip and set high idle digitalWrite(CS_PIN, HIGH); digitalWrite(INC_PIN, HIGH); Serial.println("Starting X9C Sweep..."); } // Function to move the wiper 1 step void moveWiper(bool up) { digitalWrite(UD_PIN, up ? HIGH : LOW); // Set direction digitalWrite(CS_PIN, LOW); // Select chip delayMicroseconds(1); digitalWrite(INC_PIN, LOW); // Falling edge moves wiper delayMicroseconds(1); digitalWrite(INC_PIN, HIGH); // Return to high digitalWrite(CS_PIN, HIGH); // Deselect to end movement } // Function to reset the wiper to 0 (by moving down 100 times) void resetToZero() { for (int i = 0; i < 100; i++) { moveWiper(false); } } void loop() { resetToZero(); // Start from a known position (0) Serial.println("At 0% resistance"); delay(2000); // Gradually increase resistance for (int i = 0; i < 100; i++) { moveWiper(true); int value = analogRead(A0); // Read voltage at wiper Serial.print("Step: "); Serial.print(i); Serial.print(" | Analog Value: "); Serial.println(value); delay(50); } Serial.println("At 100% resistance"); delay(2000); }
Key Logic Steps
- Selection: The chip is only active when CS is pulled LOW.
- Direction: The U/D pin indicates whether the resistance increases or decreases.
- The “Pulse”: The INC pin is negative-edge triggered. A transition from HIGH to LOW triggers the movement.
- No Feedback: These chips cannot tell the Arduino their current position. The resetToZero() function ensures you start at a known point by forcing the wiper down 100 times.
Communication topics on lamaPLC
This page has been accessed for: Today: 2, Until now: 2
