DigitalPotentiometer code for MCP4131.

Committer:
wsalis01
Date:
Mon Apr 30 00:37:45 2012 +0000
Revision:
0:9bd76a5655fa
Initial Commit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wsalis01 0:9bd76a5655fa 1 #include "DigitalPotentiometer.h"
wsalis01 0:9bd76a5655fa 2
wsalis01 0:9bd76a5655fa 3 DigitalPotentiometer::DigitalPotentiometer(PinName csPin) : _spi(p5, p6, p7), _cs(csPin)
wsalis01 0:9bd76a5655fa 4 {
wsalis01 0:9bd76a5655fa 5 _cs = 0;
wsalis01 0:9bd76a5655fa 6
wsalis01 0:9bd76a5655fa 7 //Increase the frequency when external pull ups are used
wsalis01 0:9bd76a5655fa 8 _spi.format(8,3);
wsalis01 0:9bd76a5655fa 9 _spi.frequency(1000000);
wsalis01 0:9bd76a5655fa 10 }
wsalis01 0:9bd76a5655fa 11
wsalis01 0:9bd76a5655fa 12 int DigitalPotentiometer::increment() {
wsalis01 0:9bd76a5655fa 13 _cs = 1;
wsalis01 0:9bd76a5655fa 14
wsalis01 0:9bd76a5655fa 15 // send in the address and value via SPI:
wsalis01 0:9bd76a5655fa 16 char ret1 = _spi.write(0x04);
wsalis01 0:9bd76a5655fa 17
wsalis01 0:9bd76a5655fa 18 _cs = 0;
wsalis01 0:9bd76a5655fa 19 return ret1;
wsalis01 0:9bd76a5655fa 20 }
wsalis01 0:9bd76a5655fa 21
wsalis01 0:9bd76a5655fa 22 int DigitalPotentiometer::decrement() {
wsalis01 0:9bd76a5655fa 23 _cs = 1;
wsalis01 0:9bd76a5655fa 24
wsalis01 0:9bd76a5655fa 25 // send in the address and value via SPI:
wsalis01 0:9bd76a5655fa 26 char ret1 = _spi.write(0x08);
wsalis01 0:9bd76a5655fa 27
wsalis01 0:9bd76a5655fa 28 _cs = 0;
wsalis01 0:9bd76a5655fa 29 return ret1;
wsalis01 0:9bd76a5655fa 30 }
wsalis01 0:9bd76a5655fa 31
wsalis01 0:9bd76a5655fa 32 int DigitalPotentiometer::readTCON() {
wsalis01 0:9bd76a5655fa 33 _cs = 1;
wsalis01 0:9bd76a5655fa 34
wsalis01 0:9bd76a5655fa 35 // send in the address and value via SPI:
wsalis01 0:9bd76a5655fa 36 char ret1 = _spi.write(0x4C);
wsalis01 0:9bd76a5655fa 37 char ret2 = _spi.write(0x00);
wsalis01 0:9bd76a5655fa 38
wsalis01 0:9bd76a5655fa 39 _cs = 0;
wsalis01 0:9bd76a5655fa 40 return ret1;
wsalis01 0:9bd76a5655fa 41 }
wsalis01 0:9bd76a5655fa 42
wsalis01 0:9bd76a5655fa 43 int DigitalPotentiometer::initTCON() {
wsalis01 0:9bd76a5655fa 44 _cs = 1;
wsalis01 0:9bd76a5655fa 45
wsalis01 0:9bd76a5655fa 46 // send in the address and value via SPI:
wsalis01 0:9bd76a5655fa 47 char ret1 = _spi.write(0x41);
wsalis01 0:9bd76a5655fa 48 char ret2 = _spi.write(0x0F);
wsalis01 0:9bd76a5655fa 49
wsalis01 0:9bd76a5655fa 50 _cs = 0;
wsalis01 0:9bd76a5655fa 51 return ret1;
wsalis01 0:9bd76a5655fa 52 }
wsalis01 0:9bd76a5655fa 53
wsalis01 0:9bd76a5655fa 54 int DigitalPotentiometer::readStatus() {
wsalis01 0:9bd76a5655fa 55 _cs = 1;
wsalis01 0:9bd76a5655fa 56
wsalis01 0:9bd76a5655fa 57 // send in the address and value via SPI:
wsalis01 0:9bd76a5655fa 58 char ret1 = _spi.write(0x5C);
wsalis01 0:9bd76a5655fa 59 char ret2 = _spi.write(0x00);
wsalis01 0:9bd76a5655fa 60
wsalis01 0:9bd76a5655fa 61 _cs = 0;
wsalis01 0:9bd76a5655fa 62 return ret1;
wsalis01 0:9bd76a5655fa 63 }
wsalis01 0:9bd76a5655fa 64
wsalis01 0:9bd76a5655fa 65 int DigitalPotentiometer::setTap(int value) {
wsalis01 0:9bd76a5655fa 66 _cs = 1;
wsalis01 0:9bd76a5655fa 67
wsalis01 0:9bd76a5655fa 68 // send in the address and value via SPI:
wsalis01 0:9bd76a5655fa 69 char h = 0x03 & (value >> 8);
wsalis01 0:9bd76a5655fa 70 char l = 0x00FF & value;
wsalis01 0:9bd76a5655fa 71
wsalis01 0:9bd76a5655fa 72 //Serial.print("HIGH: ");
wsalis01 0:9bd76a5655fa 73 //Serial.println(h, BIN);
wsalis01 0:9bd76a5655fa 74 //Serial.print("LOW: ");
wsalis01 0:9bd76a5655fa 75 //Serial.println(l, BIN);
wsalis01 0:9bd76a5655fa 76
wsalis01 0:9bd76a5655fa 77 char ret1 = _spi.write(h);
wsalis01 0:9bd76a5655fa 78 char ret2 = _spi.write(l);
wsalis01 0:9bd76a5655fa 79
wsalis01 0:9bd76a5655fa 80 _cs = 0;
wsalis01 0:9bd76a5655fa 81 return (ret1 << 8) | ret2;
wsalis01 0:9bd76a5655fa 82 }