Kevin Kent
/
XVHE_HID
IVSC Project
DigiPot.cpp@2:d0778c36d28d, 2012-11-28 (annotated)
- 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?
User | Revision | Line number | New 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 |