Control a Microchip MCP4XXX digital potentiometer with an Arduino.
Arduino library for controlling Microchip's MCP4XXX range of SPI controlled digital potentiometers.
The supported chips are designated as follows:
MCP 4 X Y Z
│ │ │
│ │ └── (Z) Wiper Configuration
│ │ 1 = Potentiometer, 2 = Rheostat
│ │
│ └──── (Y) Memory Type / Resolution
│ 3 = 7-bit RAM, 4 = 7-bit EEPROM, 5 = 8-bit RAM, 6 = 8-bit EEPROM
│
└────── (X) Number of pots
1 or 2
This encompasses: MCP4131, MCP4151, MCP4231, MCP4251, MCP4132, MCP4152, MCP4232 and MCP4252.
Note that the MCP41X1 chips multiplex SDI and SDO on a single pin. To use these chips with a standard SPI interface as on the Arduino you will need to connect the shared SDI/SDO pin on the pot to the Arduino's MISO pin, then bridge the MISO pin to the MOSI pin with a resistor (3k9 resistor seems to work well).
mcp4xxx.h
and mcp4xxx.cpp
files to a folder named mcp4xxx
in your Arduino libraries foldermcp4xxx.h
as per the example belowMore information is available under the section titled "Manual Installation" on the libraries page of the official Arduino website.
#include <SPI.h>
#include <mcp4xxx.h>
using namespace icecave::arduino;
MCP4XXX* pot;
void setup()
{
// Construct an instance of the MCP4XXX to manage the digipot.
// The first parameter is the pin number to use for 'chip select' (CS), if you are
// using the default SPI CS pin for your Arduino you can simply omit this parameter.
pot = new MCP4XXX(49);
}
void loop()
{
// Move the wiper to the lowest value
pot->set(0);
// Move the wiper to the highest value
pot->set(pot->max_value());
// Increment the wiper position by one
pot->increment();
// Decrement the wiper position by one
pot->decrement();
}
The MCP4XXX
class supports the full range of commands available on the MCP4XXX range of devices,
for more information please see the API documentation in the header file.