meta data for this page
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| sensor:digipot [2026/04/11 15:32] – vamsan | sensor:digipot [2026/04/11 16:29] (current) – [Renesas X9C series] vamsan | ||
|---|---|---|---|
| Line 24: | Line 24: | ||
| * **Resistance Tolerance: | * **Resistance Tolerance: | ||
| * **Typical Wiper Resistance: | * **Typical Wiper Resistance: | ||
| + | |||
| + | {{page>: | ||
| {{ : | {{ : | ||
| Line 49: | Line 51: | ||
| * **Control Interface: | * **Control Interface: | ||
| * **Saving Settings:** To save the current resistance so it persists after power-off, you must pull CS HIGH while INC is already HIGH. | * **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** | ||
| + | |||
| + | |< 100%>| | ||
| + | ^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| | ||
| <code c> | <code c> | ||
| + | // 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, | ||
| + | pinMode(INC_PIN, | ||
| + | pinMode(UD_PIN, | ||
| + | |||
| + | // Initial state: deselect chip and set high idle | ||
| + | digitalWrite(CS_PIN, | ||
| + | digitalWrite(INC_PIN, | ||
| + | | ||
| + | Serial.println(" | ||
| + | } | ||
| + | |||
| + | // Function to move the wiper 1 step | ||
| + | void moveWiper(bool up) { | ||
| + | digitalWrite(UD_PIN, | ||
| + | digitalWrite(CS_PIN, | ||
| + | delayMicroseconds(1); | ||
| + | | ||
| + | digitalWrite(INC_PIN, | ||
| + | delayMicroseconds(1); | ||
| + | digitalWrite(INC_PIN, | ||
| + | | ||
| + | digitalWrite(CS_PIN, | ||
| + | } | ||
| + | |||
| + | // 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(); | ||
| + | Serial.println(" | ||
| + | delay(2000); | ||
| + | |||
| + | // Gradually increase resistance | ||
| + | for (int i = 0; i < 100; i++) { | ||
| + | moveWiper(true); | ||
| + | int value = analogRead(A0); | ||
| + | Serial.print(" | ||
| + | Serial.print(" | ||
| + | delay(50); | ||
| + | } | ||
| + | |||
| + | Serial.println(" | ||
| + | delay(2000); | ||
| + | } | ||
| </ | </ | ||
| - | ===== Communication | + | **Key Logic Steps** |
| - | {{topic>communication}} | + | |
| + | * **Selection: | ||
| + | * **Direction: | ||
| + | * **The " | ||
| + | * **No Feedback:** These chips cannot tell the Arduino their current position. The // | ||
| + | |||
| + | ===== Sensor | ||
| + | {{topic>sensor}} | ||
| - | {{tag>BMP280 AHT20 temperature humidity pressure | + | {{tag> |
| This page has been accessed for: Today: {{counter|today}}, | This page has been accessed for: Today: {{counter|today}}, | ||