IVSC Project

Dependencies:   USBDevice mbed

Revision:
1:82f2ef52759e
Child:
2:d0778c36d28d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DigiPot.cpp	Wed Nov 14 20:01:50 2012 +0000
@@ -0,0 +1,103 @@
+//
+#include "DigiPot.h"
+#include "mbed.h"
+#include "MCP4651.h"
+
+// Enable pins for PCA9
+BusOut Pbus(p14,p13,p12,p11);
+
+Serial dbg(USBTX, USBRX);
+
+MCP4651 Chip1(p9, p10, 0x1);
+MCP4651 Chip2(p9, p10, 0x2);
+MCP4651 Chip3(p9, p10, 0x3);
+MCP4651 Chip4(p9, p10, 0x5);
+MCP4651 Chip5(p9, p10, 0x6);
+MCP4651 Chip6(p9, p10, 0x7);
+
+
+//  The MCP4651 go to mid scale on reset
+//  Use the general call commands to set all pots to zero
+//  Set the lowest values pot to approximately 10k
+ 
+int PotReset(void) {
+    char wip0[2] = {0x80, 0x0};
+    char wip1[2] = {0x90, 0x0};    
+    I2C GenCall(p9,p10);
+    
+    // Reset R1 & R2
+    Pbus = 0x1;
+    GenCall.write(0x0, wip0, 2);
+    GenCall.write(0x0, wip1, 2);
+    Chip1.SetValue(0,50); // About 10k on 50k pot
+    Chip4.SetValue(0,50);
+    
+    // Reset R3 & R4
+    Pbus = 0x2;
+    GenCall.write(0x0, wip0, 2);
+    GenCall.write(0x0, wip1, 2);
+    Chip1.SetValue(0,50);
+    Chip4.SetValue(0,50);
+    
+    // Reset R5 & R6
+    Pbus = 0x4;
+    GenCall.write(0x0, wip0, 2);
+    GenCall.write(0x0, wip1, 2);
+    Chip1.SetValue(0,50);
+    Chip4.SetValue(0,50);
+    
+    // Pbus = 0x8; /* Not Used at this time */
+    Pbus = 0;
+    return(0);
+} // End PotReset
+
+//  Decode the HID report and set the pots
+int SetResist( uint8_t *data) {
+    int wiper = 0, value = 0;
+    dbg.printf("data[0] = %d\n",data[0]);
+    dbg.printf("data[1] = %d\n",data[1]);
+    dbg.printf("data[2] = %d\n",data[2]);
+    dbg.printf("data[3] = %d\n",data[3]);
+    dbg.printf("data[4] = %d\n",data[4]);
+    dbg.printf("data[5] = %d\n",data[5]);
+    if (data[0] != 3) return(1);
+    if (data[1] == 0) return(1); // Zero = bus disable
+    if (data[3] == 0) return(1); // Zero disallowed
+    Pbus = data[1];
+    if(data[4] > 0) wiper = (data[4] - 1);
+    value = data[5];
+    
+    switch (data[3]) {
+        case 1:
+            Chip1.SetValue(wiper, value);
+            dbg.printf("Set Pbus = %d, Chip = %d, Pot = %d, Value = %d\n", data[1], data[3], wiper, value);
+            break;
+        case 2:
+            Chip2.SetValue(wiper, value);
+            dbg.printf("Set Pbus = %d, Chip = %d, Pot = %d, Value = %d\n", data[1], data[3], wiper, value);
+            break;
+        case 3:
+            Chip3.SetValue(wiper, value);
+            dbg.printf("Set Pbus = %d, Chip = %d, Pot = %d, Value = %d\n", data[1], data[3], wiper, value);
+            break;
+        case 4:
+            Chip4.SetValue(wiper, value);
+            dbg.printf("Set Pbus = %d, Chip = %d, Pot = %d, Value = %d\n", data[1], data[3], wiper, value);
+            break;
+        case 5:
+            Chip5.SetValue(wiper, value);
+            dbg.printf("Set Pbus = %d, Chip = %d, Pot = %d, Value = %d\n", data[1], data[3], wiper, value);
+            break;
+        case 6:
+            Chip6.SetValue(wiper, value);
+            dbg.printf("Set Pbus = %d, Chip = %d, Pot = %d, Value = %d\n", data[1], data[3], wiper, value);
+            break;
+        default:
+            break;
+       }
+    dbg.printf("got here\n");
+    data[0] = 0;
+    Pbus = 0;
+    return(0);
+} // End SetResist
+