Test for MCP4141. 7-bit digital potentiometer with SPI interface.

Dependencies:   mbed

Committer:
lnadal
Date:
Sat Aug 06 11:39:29 2011 +0000
Revision:
1:ea045d9d4c5b
Parent:
0:b91b5753e54f
Error corrected in line 21.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lnadal 0:b91b5753e54f 1 #include "mbed.h"
lnadal 0:b91b5753e54f 2
lnadal 0:b91b5753e54f 3 // MCP4141. 2.7 to 5.5V 7-bit linear digital potentiometer with SPI interface.
lnadal 0:b91b5753e54f 4 // Wiper commands can be write or read. This program is to write commands only.
lnadal 0:b91b5753e54f 5 // MOSI/MISO are multiplexed in the MCP4141 side.
lnadal 0:b91b5753e54f 6
lnadal 0:b91b5753e54f 7 // Author: Lluis Nadal. August 2011.
lnadal 0:b91b5753e54f 8
lnadal 0:b91b5753e54f 9
lnadal 0:b91b5753e54f 10 DigitalOut leds[] = {(LED1), (LED2),(LED3),(LED4)};
lnadal 0:b91b5753e54f 11
lnadal 0:b91b5753e54f 12 //Define SPI mBed side:
lnadal 0:b91b5753e54f 13 SPI spi(p5, p6, p7); // mosi, miso, sclk. To write commands only, you do not need to connect p6(miso) to MCP4141.
lnadal 0:b91b5753e54f 14 DigitalOut cs(p8); // Chip select. Active low.
lnadal 0:b91b5753e54f 15
lnadal 0:b91b5753e54f 16 /*
lnadal 0:b91b5753e54f 17 MCP4141 side:
lnadal 0:b91b5753e54f 18 p8 = Vdd: +3.3V. p4 = Vss: GROUND. p1: cs (mBed's p8).
lnadal 0:b91b5753e54f 19 p2: sclk (mBed's p7). p3: SDI (mBed's p5). p5: potentiometer a. p7: potentiometer b.
lnadal 0:b91b5753e54f 20 Rab: 5k, 10k 50k or 100k options. p6: wiper (75 Ohm).
lnadal 1:ea045d9d4c5b 21 Attach ohmeter to pins p6 and p7.
lnadal 0:b91b5753e54f 22 */
lnadal 0:b91b5753e54f 23
lnadal 0:b91b5753e54f 24 void write(int n) { // 0 >= n <= 128
lnadal 0:b91b5753e54f 25 cs=1;
lnadal 0:b91b5753e54f 26 cs=0;
lnadal 0:b91b5753e54f 27 spi.write(0x00); // Address(volatile) 0000, write=00, data=00 = 0x00
lnadal 0:b91b5753e54f 28 spi.write(n); // Data
lnadal 0:b91b5753e54f 29 cs=1;
lnadal 0:b91b5753e54f 30 }
lnadal 0:b91b5753e54f 31
lnadal 0:b91b5753e54f 32 void increment() {
lnadal 0:b91b5753e54f 33 cs=1;
lnadal 0:b91b5753e54f 34 cs=0;
lnadal 0:b91b5753e54f 35 spi.write(0x07);// Address(volatile) 0000, increment 0100 = 0x07
lnadal 0:b91b5753e54f 36 cs=1;
lnadal 0:b91b5753e54f 37 }
lnadal 0:b91b5753e54f 38
lnadal 0:b91b5753e54f 39 void decrement() {
lnadal 0:b91b5753e54f 40 cs=0;
lnadal 0:b91b5753e54f 41 spi.write(0x0B);// Address(volatile) 0000, decrement 1000 = 0x0B
lnadal 0:b91b5753e54f 42 cs=1;
lnadal 0:b91b5753e54f 43 }
lnadal 0:b91b5753e54f 44
lnadal 0:b91b5753e54f 45
lnadal 0:b91b5753e54f 46
lnadal 0:b91b5753e54f 47 int main() {
lnadal 0:b91b5753e54f 48
lnadal 0:b91b5753e54f 49 cs=1; // Disables MCP4141
lnadal 0:b91b5753e54f 50
lnadal 0:b91b5753e54f 51 spi.format(8,0); // 8 bits , mode 0
lnadal 0:b91b5753e54f 52 spi.frequency(1000000); // Default SPI frequency. ( 250kHz maximum for read commands).
lnadal 0:b91b5753e54f 53
lnadal 0:b91b5753e54f 54 while (1) {
lnadal 0:b91b5753e54f 55
lnadal 0:b91b5753e54f 56 leds[0]=0;
lnadal 0:b91b5753e54f 57 leds[1]=0;
lnadal 0:b91b5753e54f 58 leds[2]=0;
lnadal 0:b91b5753e54f 59 leds[3]=0; // All leds off.
lnadal 0:b91b5753e54f 60 wait(1);
lnadal 0:b91b5753e54f 61
lnadal 0:b91b5753e54f 62 write(32);// Set wiper to 32/128 = 1/4 Rab
lnadal 0:b91b5753e54f 63 leds[0]=1;
lnadal 0:b91b5753e54f 64 wait(4);
lnadal 0:b91b5753e54f 65
lnadal 0:b91b5753e54f 66 write(64);// Set wiper to 64/128 = 1/2 Rab
lnadal 0:b91b5753e54f 67 leds[1]=1;
lnadal 0:b91b5753e54f 68 wait(4);
lnadal 0:b91b5753e54f 69
lnadal 0:b91b5753e54f 70 write(96);// Set wiper to 96/128 = 3/4 Rab
lnadal 0:b91b5753e54f 71 leds[2]=1;
lnadal 0:b91b5753e54f 72 wait(4);
lnadal 0:b91b5753e54f 73
lnadal 0:b91b5753e54f 74 // Decrement wiper 10 times
lnadal 0:b91b5753e54f 75 for (int i=0; i<10; i++) {
lnadal 0:b91b5753e54f 76 decrement();
lnadal 0:b91b5753e54f 77 }
lnadal 0:b91b5753e54f 78 leds[3]=1;
lnadal 0:b91b5753e54f 79 wait(4);
lnadal 0:b91b5753e54f 80
lnadal 0:b91b5753e54f 81 // Increment wiper 10 times
lnadal 0:b91b5753e54f 82 for (int i=0; i<10; i++) {
lnadal 0:b91b5753e54f 83 increment();
lnadal 0:b91b5753e54f 84 }
lnadal 0:b91b5753e54f 85
lnadal 0:b91b5753e54f 86 leds[3]=0;
lnadal 0:b91b5753e54f 87 wait(4);
lnadal 0:b91b5753e54f 88
lnadal 0:b91b5753e54f 89 }
lnadal 0:b91b5753e54f 90
lnadal 0:b91b5753e54f 91 }