IVSC Project

Dependencies:   USBDevice mbed

Committer:
kevinkent
Date:
Wed Nov 14 20:01:50 2012 +0000
Revision:
1:82f2ef52759e
Child:
2:d0778c36d28d
Added DAC support

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kevinkent 1:82f2ef52759e 1 //
kevinkent 1:82f2ef52759e 2 #include "DigiPot.h"
kevinkent 1:82f2ef52759e 3 #include "mbed.h"
kevinkent 1:82f2ef52759e 4 #include "MCP4651.h"
kevinkent 1:82f2ef52759e 5
kevinkent 1:82f2ef52759e 6 // Enable pins for PCA9
kevinkent 1:82f2ef52759e 7 BusOut Pbus(p14,p13,p12,p11);
kevinkent 1:82f2ef52759e 8
kevinkent 1:82f2ef52759e 9 Serial dbg(USBTX, USBRX);
kevinkent 1:82f2ef52759e 10
kevinkent 1:82f2ef52759e 11 MCP4651 Chip1(p9, p10, 0x1);
kevinkent 1:82f2ef52759e 12 MCP4651 Chip2(p9, p10, 0x2);
kevinkent 1:82f2ef52759e 13 MCP4651 Chip3(p9, p10, 0x3);
kevinkent 1:82f2ef52759e 14 MCP4651 Chip4(p9, p10, 0x5);
kevinkent 1:82f2ef52759e 15 MCP4651 Chip5(p9, p10, 0x6);
kevinkent 1:82f2ef52759e 16 MCP4651 Chip6(p9, p10, 0x7);
kevinkent 1:82f2ef52759e 17
kevinkent 1:82f2ef52759e 18
kevinkent 1:82f2ef52759e 19 // The MCP4651 go to mid scale on reset
kevinkent 1:82f2ef52759e 20 // Use the general call commands to set all pots to zero
kevinkent 1:82f2ef52759e 21 // Set the lowest values pot to approximately 10k
kevinkent 1:82f2ef52759e 22
kevinkent 1:82f2ef52759e 23 int PotReset(void) {
kevinkent 1:82f2ef52759e 24 char wip0[2] = {0x80, 0x0};
kevinkent 1:82f2ef52759e 25 char wip1[2] = {0x90, 0x0};
kevinkent 1:82f2ef52759e 26 I2C GenCall(p9,p10);
kevinkent 1:82f2ef52759e 27
kevinkent 1:82f2ef52759e 28 // Reset R1 & R2
kevinkent 1:82f2ef52759e 29 Pbus = 0x1;
kevinkent 1:82f2ef52759e 30 GenCall.write(0x0, wip0, 2);
kevinkent 1:82f2ef52759e 31 GenCall.write(0x0, wip1, 2);
kevinkent 1:82f2ef52759e 32 Chip1.SetValue(0,50); // About 10k on 50k pot
kevinkent 1:82f2ef52759e 33 Chip4.SetValue(0,50);
kevinkent 1:82f2ef52759e 34
kevinkent 1:82f2ef52759e 35 // Reset R3 & R4
kevinkent 1:82f2ef52759e 36 Pbus = 0x2;
kevinkent 1:82f2ef52759e 37 GenCall.write(0x0, wip0, 2);
kevinkent 1:82f2ef52759e 38 GenCall.write(0x0, wip1, 2);
kevinkent 1:82f2ef52759e 39 Chip1.SetValue(0,50);
kevinkent 1:82f2ef52759e 40 Chip4.SetValue(0,50);
kevinkent 1:82f2ef52759e 41
kevinkent 1:82f2ef52759e 42 // Reset R5 & R6
kevinkent 1:82f2ef52759e 43 Pbus = 0x4;
kevinkent 1:82f2ef52759e 44 GenCall.write(0x0, wip0, 2);
kevinkent 1:82f2ef52759e 45 GenCall.write(0x0, wip1, 2);
kevinkent 1:82f2ef52759e 46 Chip1.SetValue(0,50);
kevinkent 1:82f2ef52759e 47 Chip4.SetValue(0,50);
kevinkent 1:82f2ef52759e 48
kevinkent 1:82f2ef52759e 49 // Pbus = 0x8; /* Not Used at this time */
kevinkent 1:82f2ef52759e 50 Pbus = 0;
kevinkent 1:82f2ef52759e 51 return(0);
kevinkent 1:82f2ef52759e 52 } // End PotReset
kevinkent 1:82f2ef52759e 53
kevinkent 1:82f2ef52759e 54 // Decode the HID report and set the pots
kevinkent 1:82f2ef52759e 55 int SetResist( uint8_t *data) {
kevinkent 1:82f2ef52759e 56 int wiper = 0, value = 0;
kevinkent 1:82f2ef52759e 57 dbg.printf("data[0] = %d\n",data[0]);
kevinkent 1:82f2ef52759e 58 dbg.printf("data[1] = %d\n",data[1]);
kevinkent 1:82f2ef52759e 59 dbg.printf("data[2] = %d\n",data[2]);
kevinkent 1:82f2ef52759e 60 dbg.printf("data[3] = %d\n",data[3]);
kevinkent 1:82f2ef52759e 61 dbg.printf("data[4] = %d\n",data[4]);
kevinkent 1:82f2ef52759e 62 dbg.printf("data[5] = %d\n",data[5]);
kevinkent 1:82f2ef52759e 63 if (data[0] != 3) return(1);
kevinkent 1:82f2ef52759e 64 if (data[1] == 0) return(1); // Zero = bus disable
kevinkent 1:82f2ef52759e 65 if (data[3] == 0) return(1); // Zero disallowed
kevinkent 1:82f2ef52759e 66 Pbus = data[1];
kevinkent 1:82f2ef52759e 67 if(data[4] > 0) wiper = (data[4] - 1);
kevinkent 1:82f2ef52759e 68 value = data[5];
kevinkent 1:82f2ef52759e 69
kevinkent 1:82f2ef52759e 70 switch (data[3]) {
kevinkent 1:82f2ef52759e 71 case 1:
kevinkent 1:82f2ef52759e 72 Chip1.SetValue(wiper, value);
kevinkent 1:82f2ef52759e 73 dbg.printf("Set Pbus = %d, Chip = %d, Pot = %d, Value = %d\n", data[1], data[3], wiper, value);
kevinkent 1:82f2ef52759e 74 break;
kevinkent 1:82f2ef52759e 75 case 2:
kevinkent 1:82f2ef52759e 76 Chip2.SetValue(wiper, value);
kevinkent 1:82f2ef52759e 77 dbg.printf("Set Pbus = %d, Chip = %d, Pot = %d, Value = %d\n", data[1], data[3], wiper, value);
kevinkent 1:82f2ef52759e 78 break;
kevinkent 1:82f2ef52759e 79 case 3:
kevinkent 1:82f2ef52759e 80 Chip3.SetValue(wiper, value);
kevinkent 1:82f2ef52759e 81 dbg.printf("Set Pbus = %d, Chip = %d, Pot = %d, Value = %d\n", data[1], data[3], wiper, value);
kevinkent 1:82f2ef52759e 82 break;
kevinkent 1:82f2ef52759e 83 case 4:
kevinkent 1:82f2ef52759e 84 Chip4.SetValue(wiper, value);
kevinkent 1:82f2ef52759e 85 dbg.printf("Set Pbus = %d, Chip = %d, Pot = %d, Value = %d\n", data[1], data[3], wiper, value);
kevinkent 1:82f2ef52759e 86 break;
kevinkent 1:82f2ef52759e 87 case 5:
kevinkent 1:82f2ef52759e 88 Chip5.SetValue(wiper, value);
kevinkent 1:82f2ef52759e 89 dbg.printf("Set Pbus = %d, Chip = %d, Pot = %d, Value = %d\n", data[1], data[3], wiper, value);
kevinkent 1:82f2ef52759e 90 break;
kevinkent 1:82f2ef52759e 91 case 6:
kevinkent 1:82f2ef52759e 92 Chip6.SetValue(wiper, value);
kevinkent 1:82f2ef52759e 93 dbg.printf("Set Pbus = %d, Chip = %d, Pot = %d, Value = %d\n", data[1], data[3], wiper, value);
kevinkent 1:82f2ef52759e 94 break;
kevinkent 1:82f2ef52759e 95 default:
kevinkent 1:82f2ef52759e 96 break;
kevinkent 1:82f2ef52759e 97 }
kevinkent 1:82f2ef52759e 98 dbg.printf("got here\n");
kevinkent 1:82f2ef52759e 99 data[0] = 0;
kevinkent 1:82f2ef52759e 100 Pbus = 0;
kevinkent 1:82f2ef52759e 101 return(0);
kevinkent 1:82f2ef52759e 102 } // End SetResist
kevinkent 1:82f2ef52759e 103