DigitalPotentiometer code for MCP4131.

Files at this revision

API Documentation at this revision

Comitter:
wsalis01
Date:
Mon Apr 30 00:37:45 2012 +0000
Commit message:
Initial Commit.

Changed in this revision

DigitalPotentiometer.cpp Show annotated file Show diff for this revision Revisions of this file
DigitalPotentiometer.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DigitalPotentiometer.cpp	Mon Apr 30 00:37:45 2012 +0000
@@ -0,0 +1,82 @@
+#include "DigitalPotentiometer.h"
+
+DigitalPotentiometer::DigitalPotentiometer(PinName csPin) : _spi(p5, p6, p7), _cs(csPin)
+{
+	_cs = 0;
+
+	//Increase the frequency when external pull ups are used
+    _spi.format(8,3);
+    _spi.frequency(1000000);
+}
+
+int DigitalPotentiometer::increment() {
+	_cs = 1;
+	
+	//  send in the address and value via SPI:
+	char ret1 = _spi.write(0x04);
+
+	_cs = 0;
+	return ret1;
+}
+
+int DigitalPotentiometer::decrement() {
+	_cs = 1;
+	
+	//  send in the address and value via SPI:
+	char ret1 = _spi.write(0x08);
+	
+	_cs = 0;
+	return ret1;
+}
+
+int DigitalPotentiometer::readTCON() {
+	_cs = 1;
+	
+	//  send in the address and value via SPI:
+	char ret1 = _spi.write(0x4C);
+	char ret2 = _spi.write(0x00);
+	
+	_cs = 0;
+	return ret1;
+}
+
+int DigitalPotentiometer::initTCON() {
+	_cs = 1;
+	
+	//  send in the address and value via SPI:
+	char ret1 = _spi.write(0x41);
+	char ret2 = _spi.write(0x0F);
+	
+	_cs = 0;
+	return ret1;
+}
+
+int DigitalPotentiometer::readStatus() {
+	_cs = 1;
+	
+	//  send in the address and value via SPI:
+	char ret1 = _spi.write(0x5C);
+	char ret2 = _spi.write(0x00);
+	
+	_cs = 0;
+	return ret1;
+}
+
+int DigitalPotentiometer::setTap(int value) {
+	_cs = 1;
+
+	//  send in the address and value via SPI:
+	char h = 0x03 & (value >> 8);
+	char l = 0x00FF & value;
+	
+	//Serial.print("HIGH: ");
+	//Serial.println(h, BIN);
+	//Serial.print("LOW: ");
+	//Serial.println(l, BIN);
+	
+	char ret1 = _spi.write(h);
+	char ret2 = _spi.write(l);
+
+	_cs = 0;	
+	return (ret1 << 8) | ret2;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DigitalPotentiometer.h	Mon Apr 30 00:37:45 2012 +0000
@@ -0,0 +1,31 @@
+#ifndef DigitalPotentiometer_h
+#define DigitalPotentiometer_h
+
+#include "mbed.h"
+
+#define MOSI	11
+#define MISO	12
+#define SCK		13
+
+#define DigitalPotentiometer_MIN 0
+#define DigitalPotentiometer_MAX 256
+
+class DigitalPotentiometer
+{
+public:
+    DigitalPotentiometer(PinName csPin);
+	int initTCON();
+	int readTCON();
+	int readStatus();
+	int increment();
+	int decrement();
+	int setTap(int value);
+	
+private:
+    SPI _spi;
+    DigitalOut _cs;
+	void enable();
+	void disable();
+};
+
+#endif