MCP41100 an Arduino Controlled Potentiometer

MCP41100 an Arduino Controlled PotentiometerDigital Potentiometer MCP41100 and Arduino

Digital Potentiometer MCP41100 and Arduino

 

We know the analog potentiometer , is a three-terminal resistor with a sliding contact that forms an adjustable voltage divider .

MCP41100 an Arduino Controlled Potentiometer:

1)volume controls on audio equipment.
2) Control the amplifier Gain and offset .
3) Transducer ‚ÄĚ displacement ¬†transducers ‚Äú.

and many Other application , But did you you want to control the resistance value by Microcontroller instead  of using analog one ?

Analog potentiometers have some problem with MCU ,  Microcontroller doesn’t have an easy way to interface with them .

The Digital Potentiometer ,  give you an ability to adjust the resistance ,allowing you to control a voltage splitter with digital signals

In this simple instructable I will show you how  to control Digital Potentiometer MCP41100 Using Arduino IDE .

 Step 1: Material
Digital Potentiometer MCP41100 and ArduinoDigital Potentiometer MCP41100 and Arduino
Digital Potentiometer MCP41100 and Arduino

 

we will need :

1) Arduino Board .
2)Digital Potentiometer MCP41100 .
3)Resistor 100 Ohm
4)LED
5)BreadBoard.
6JumperS

The pin Configuration for MCP41100 above , very easy .

Data sheet for MCP41100 here

This IC using SPI Protocol to communicate with Arduino Board .

Step 2: Calculate the resistance .Digital Potentiometer MCP41100 and Arduino

Ok , now we will look at this table , which is show who we can Calculate the Output resistance .

MCP41100 Have a sensitivity of 8bit , 256 taps for each potentiometer will taken from .

The MCP41100 Nominal resistane equal 100K ohm ‚ÄúRab‚ÄĚ and from the Datasheet , The wiper resistance is 125 ohm‚ÄĚTypical‚ÄĚ ,

For example , if we write 222 to MCP41100 ,The resistance will equal :

Rwa= (100*10^3)*(256-222)/256 ¬†‚Äď 125 = 13.41K ohm .

Step 3: Arduino CodeDigital Potentiometer MCP41100 and Arduino

Digital Potentiometer MCP41100 and ArduinoThe arduino Code  below :

/*
this program taken from arduino Example .
modified by By Mohannad Rawashdeh
http://www.genotronex.com
http://www.instructables.com/

This code used to control the digital potentiometer
MCP41100 connected to  arduino Board
CS >>> D10
SCLK >> D13
DI  >>> D11
PA0 TO VCC
PBO TO GND
PW0 TO led with resistor 100ohm .
*/
#include <SPI.h>
byte address = 0x11;
int CS= 10;
int i=0;

void setup()
{
pinMode (CS, OUTPUT);
SPI.begin();
// adjust high and low resistance of potentiometer
// adjust Highest Resistance .
digitalPotWrite(0x00);
delay(1000);

// adjust  wiper in the  Mid point  .
digitalPotWrite(0x80);
delay(1000);

// adjust Lowest Resistance .
digitalPotWrite(0xFF);
delay(1000);
}

void loop()
{
for (i = 0; i <= 255; i++)
{
digitalPotWrite(i);
delay(10);
}
delay(500);
for (i = 255; i >= 0; i--)
{
digitalPotWrite(i);
delay(10);
}
}

int digitalPotWrite(int value)
{
digitalWrite(CS, LOW);
SPI.transfer(address);
SPI.transfer(value);
digitalWrite(CS, HIGH);

 

Step 4: Simple applications :Motor drive controller and LED Controller

Digital Potentiometer MCP41100 and ArduinoThis Is a simple example to control the speed of DC Motor using555 timer  ,  PWM Technique

the arduino Code :

/*
this program taken from arduino Example .
modified by By Mohannad Rawashdeh
http://www.genotronex.com
This code used to control the digital potentiometer
MCP41100 connected to  arduino Board
CS >>> D10
SCLK >> D13
DI  >>> D11
PA0 TO VCC
PBO TO GND
PW0 TO led with resistor 100ohm .
*/
#include <SPI.h>
byte address=0x11;
int CS= 10;

void setup()
{
pinMode (CS, OUTPUT);
SPI.begin();
// adjust high and low resistance of potentiometer
// adjust Highest Resistance .
digitalPotWrite(0x00);
delay(1000);

// adjust  wiper in the  Mid point  .
digitalPotWrite(0x80);
delay(1000);

// adjust Lowest Resistance .
digitalPotWrite(0xFF);
delay(1000);
}

void loop()
{
for (int i = 0; i <= 255; i++)
{
digitalPotWrite(i);
delay(10);
}
delay(1000);
for (int i = 255; i >= 0; i--)
{
digitalPotWrite(i);
delay(5);
}

}

int digitalPotWrite(int value)
{
digitalWrite(CS, LOW);
SPI.transfer(address);
SPI.transfer(value);
digitalWrite(CS, HIGH);

Video :

About The Author

Ibrar Ayyub

I am an experienced technical writer with a Master's degree in computer science from BZU Multan University. I have written for various industries, mainly home automation, and engineering. I have a clear and simple writing style and am skilled in using infographics and diagrams. I am a great researcher and is able to present information in a well-organized and logical manner.

Scroll to Top