Kevin Kent
/
XVHE_HID
IVSC Project
Diff: DigiPot.cpp
- 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 +