IVSC Project

Dependencies:   USBDevice mbed

Committer:
kevinkent
Date:
Wed Nov 28 19:14:21 2012 +0000
Revision:
2:d0778c36d28d
Parent:
1:82f2ef52759e
Child:
4:262764d24e4d
Fixed fall thru on main case structure.
; Reported hanging after some msgs.

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