NU32: Using the MCP42X1 SPI Digital Potentiometer

From Mech
Revision as of 10:23, 14 July 2012 by AndrewKessler (talk | contribs) (Created page with " The MCP42X1 is a 7-bit dual digital potentiometer. It is available in total resistance options of 5, 10, 50 and 100 kOhm. It is controlled using SPI communication and a digit...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

The MCP42X1 is a 7-bit dual digital potentiometer. It is available in total resistance options of 5, 10, 50 and 100 kOhm. It is controlled using SPI communication and a digital output (chip select).


Overview

A potentiometer is useful in a variety of circumstances when a variable resistance is needed. A digital potentiometer allows provides a variable resistor that can be controlled from a microcontroller. Because the MCP42X1 is a 7-bit device, there are 2^7 = 128 possible resistance "steps". By communicating with the IC over SPI, we can choose what step (and thus, resistance) the potentiometer is set at.

The resistance across the PxB and PxW (the wiper) is governed by where the 5kOhm comes from the total resistance of the pot, depending on the model. The value N is the setting of the pot between 0 and 127.

The pot requires four communication pins from a microcontroller: SPI CLK, SDO, SDI, and one digital output. The pot is powered with 3.3V. This model is a dual pot chip, meaning it has two completely independent potentiometer channels in the same IC, referred to as Pot 0 and Pot 1, respectively.

Details

Datasheet

Example schematic when communicating with the NU32, using SPI channel 1:

  • Pot 1-CS -----> F3
  • Pot 2-SCK -----> D10
  • Pot 3-SDI -----> D0
  • Pot 4-VSS -----> GND
  • Pot 5-P1B -----> P1+
  • Pot 6-P1W -----> P1-
  • Pot 7-P1A -----> NC
  • Pot 8-P0A -----> NC
  • Pot 9-P0W -----> P0-
  • Pot 10-P0B -----> P0+
  • Pot 11 -WP -----> NC
  • Pot 12 - SHDN -----> 3.3v
  • Pot 13-SDO -----> C4
  • Pot 14-VDD -----> 3.3v

The resistance across PXB and PXW is what changes, labeled above as Px+ and Px-.

Library Functions

Code: Nokia5110.h, Nokia5110.c

Full example: All example code

Nokia5110.h sets up control pins on E0, E1 and E2. These may be changed if desired. The file also contains function prototypes, constants, and a 96 x 5 element lookup array of ASCII characters.

Nokia5110.c contains the following functions:

  • LcdCharacter - used to write an individual ASCII character
  • LcdClear - clears the entire LCD
  • LcdInitialize - Initializes SPI3 (can be changed if desired) and sends the startup commands to the LCD
    • The second command sent (LCD Vop) sets the contrast of the LCD and can be altered for more or less contrast
  • LcdString - writes a string of characters to the LCD
  • LcdWrite - sends individual commands to the LCD
    • Sending commands before the LCD is ready for them will make the LCD miss them, so 1000 Nop()s are called between commands
  • gotoXY - places the cursor at an x pixel (0-84) and y character (0-5)
  • setPixel - turns on a pixel at x (0-84) and y (0-48)

Sample Code

Initialize and clear the LCD:

  LcdInitialize();
  LcdClear();

Go to the leftmost side of the screen on the second line and write 'Hello'

  gotoXY(0,1);
  LcdString("Hello");

Write the value of a variable:

  char str[5];
  sprintf(str, "i=%d", i);
  LcdString(str);

Turn on a pixel at (20,35):

  setPixel(20,35,1);

More Information

The sample code in All example code will create the image at the top of this page. Sending the NU32v2 an 'a' over serial will clear the LCD.