Ryan Tseng
/
battery
LT Battery test code
main.cpp@0:3f9f4f8c8b2d, 2010-09-05 (annotated)
- Committer:
- kagelump
- Date:
- Sun Sep 05 19:00:01 2010 +0000
- Revision:
- 0:3f9f4f8c8b2d
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kagelump | 0:3f9f4f8c8b2d | 1 | #include "mbed.h" |
kagelump | 0:3f9f4f8c8b2d | 2 | |
kagelump | 0:3f9f4f8c8b2d | 3 | SPI spi(p5, p6, p7); // mosi, miso, sclk |
kagelump | 0:3f9f4f8c8b2d | 4 | DigitalOut cs(p8); |
kagelump | 0:3f9f4f8c8b2d | 5 | |
kagelump | 0:3f9f4f8c8b2d | 6 | Serial pc(USBTX, USBRX); // tx, rx |
kagelump | 0:3f9f4f8c8b2d | 7 | |
kagelump | 0:3f9f4f8c8b2d | 8 | // Write configuration. CFG is assumed to be a 6 byte array |
kagelump | 0:3f9f4f8c8b2d | 9 | void write_cfg(int * cfg) { |
kagelump | 0:3f9f4f8c8b2d | 10 | // Chip enable |
kagelump | 0:3f9f4f8c8b2d | 11 | cs = 0; |
kagelump | 0:3f9f4f8c8b2d | 12 | // Send 0x01 for Writing Configuration Register Group |
kagelump | 0:3f9f4f8c8b2d | 13 | spi.write(0x01); |
kagelump | 0:3f9f4f8c8b2d | 14 | int i; |
kagelump | 0:3f9f4f8c8b2d | 15 | // Send 6 bytes of cfg |
kagelump | 0:3f9f4f8c8b2d | 16 | for (i=0; i<6; i++) |
kagelump | 0:3f9f4f8c8b2d | 17 | spi.write(cfg[i]); |
kagelump | 0:3f9f4f8c8b2d | 18 | // Done sending |
kagelump | 0:3f9f4f8c8b2d | 19 | cs = 1; |
kagelump | 0:3f9f4f8c8b2d | 20 | } |
kagelump | 0:3f9f4f8c8b2d | 21 | |
kagelump | 0:3f9f4f8c8b2d | 22 | // Read configuration. cfg is assumed to be a 7 int buffer |
kagelump | 0:3f9f4f8c8b2d | 23 | void read_cfg(int * cfg) { |
kagelump | 0:3f9f4f8c8b2d | 24 | cs = 0; |
kagelump | 0:3f9f4f8c8b2d | 25 | // Select the first board |
kagelump | 0:3f9f4f8c8b2d | 26 | spi.write(0x80); |
kagelump | 0:3f9f4f8c8b2d | 27 | // Read config |
kagelump | 0:3f9f4f8c8b2d | 28 | spi.write(0x02); |
kagelump | 0:3f9f4f8c8b2d | 29 | int i; |
kagelump | 0:3f9f4f8c8b2d | 30 | for (i=0; i<7; i++) |
kagelump | 0:3f9f4f8c8b2d | 31 | cfg[i] = spi.write(0xAA); |
kagelump | 0:3f9f4f8c8b2d | 32 | cs = 1; |
kagelump | 0:3f9f4f8c8b2d | 33 | } |
kagelump | 0:3f9f4f8c8b2d | 34 | |
kagelump | 0:3f9f4f8c8b2d | 35 | void start_ADC() { |
kagelump | 0:3f9f4f8c8b2d | 36 | cs = 0; |
kagelump | 0:3f9f4f8c8b2d | 37 | spi.write(0x10); |
kagelump | 0:3f9f4f8c8b2d | 38 | cs = 1; |
kagelump | 0:3f9f4f8c8b2d | 39 | } |
kagelump | 0:3f9f4f8c8b2d | 40 | |
kagelump | 0:3f9f4f8c8b2d | 41 | // buf is a 19 int array |
kagelump | 0:3f9f4f8c8b2d | 42 | void read_batt(int * buf) { |
kagelump | 0:3f9f4f8c8b2d | 43 | cs = 0; |
kagelump | 0:3f9f4f8c8b2d | 44 | spi.write(0x80); |
kagelump | 0:3f9f4f8c8b2d | 45 | spi.write(0x04); |
kagelump | 0:3f9f4f8c8b2d | 46 | int i; |
kagelump | 0:3f9f4f8c8b2d | 47 | for (i=0; i<19; i++) { |
kagelump | 0:3f9f4f8c8b2d | 48 | buf[i] = spi.write(0xAA); |
kagelump | 0:3f9f4f8c8b2d | 49 | } |
kagelump | 0:3f9f4f8c8b2d | 50 | cs = 1; |
kagelump | 0:3f9f4f8c8b2d | 51 | } |
kagelump | 0:3f9f4f8c8b2d | 52 | |
kagelump | 0:3f9f4f8c8b2d | 53 | // buf is a 19 int array, out is a 12 int array |
kagelump | 0:3f9f4f8c8b2d | 54 | void conv_batt(int * buf, int * out) { |
kagelump | 0:3f9f4f8c8b2d | 55 | out[0] = (buf[0] & 0xFF) | (buf[1] & 0x0F) << 8; |
kagelump | 0:3f9f4f8c8b2d | 56 | out[1] = ((buf[1] & 0xF0) >> 4) | ((buf[2] & 0xFF) << 4); |
kagelump | 0:3f9f4f8c8b2d | 57 | |
kagelump | 0:3f9f4f8c8b2d | 58 | out[2] = (buf[3] & 0xFF) | (buf[4] & 0x0F) << 8; |
kagelump | 0:3f9f4f8c8b2d | 59 | out[3] = (buf[4] & 0xF0) >> 4 | (buf[5] & 0xFF) << 4; |
kagelump | 0:3f9f4f8c8b2d | 60 | out[4] = (buf[6] & 0xFF) | (buf[7] & 0x0F) << 8; |
kagelump | 0:3f9f4f8c8b2d | 61 | out[5] = (buf[7] & 0xF0) >> 4| (buf[8] & 0xFF) << 4; |
kagelump | 0:3f9f4f8c8b2d | 62 | out[6] = (buf[9] & 0xFF) | (buf[10] & 0x0F) << 8; |
kagelump | 0:3f9f4f8c8b2d | 63 | out[7] = (buf[10] & 0xF0) >> 4| (buf[12] & 0xFF) << 4; |
kagelump | 0:3f9f4f8c8b2d | 64 | out[8] = (buf[12] & 0xFF) | (buf[13] & 0x0F) << 8; |
kagelump | 0:3f9f4f8c8b2d | 65 | out[9] = (buf[13] & 0xF0) >> 4| (buf[14] & 0xFF) << 4; |
kagelump | 0:3f9f4f8c8b2d | 66 | out[10] = (buf[15] & 0xFF) | (buf[16] & 0x0F) << 8; |
kagelump | 0:3f9f4f8c8b2d | 67 | out[11] = (buf[16] & 0xF0) >> 4| (buf[17] & 0xFF) << 4; |
kagelump | 0:3f9f4f8c8b2d | 68 | } |
kagelump | 0:3f9f4f8c8b2d | 69 | |
kagelump | 0:3f9f4f8c8b2d | 70 | int main() { |
kagelump | 0:3f9f4f8c8b2d | 71 | // Setup the spi for 8 bit data, high steady state clock, |
kagelump | 0:3f9f4f8c8b2d | 72 | // second edge capture, with a 0.5MHz clock rate |
kagelump | 0:3f9f4f8c8b2d | 73 | spi.format(8,0); |
kagelump | 0:3f9f4f8c8b2d | 74 | spi.frequency(100000); |
kagelump | 0:3f9f4f8c8b2d | 75 | int cfg[6] = { 0xE7, 0x00, 0x00, 0x00, 0x00, 0xFA }; |
kagelump | 0:3f9f4f8c8b2d | 76 | write_cfg(cfg); |
kagelump | 0:3f9f4f8c8b2d | 77 | wait(0.2); |
kagelump | 0:3f9f4f8c8b2d | 78 | while(1) { |
kagelump | 0:3f9f4f8c8b2d | 79 | int buf[19]; |
kagelump | 0:3f9f4f8c8b2d | 80 | int i; |
kagelump | 0:3f9f4f8c8b2d | 81 | start_ADC(); |
kagelump | 0:3f9f4f8c8b2d | 82 | wait(0.1); |
kagelump | 0:3f9f4f8c8b2d | 83 | read_batt(buf); |
kagelump | 0:3f9f4f8c8b2d | 84 | int batt[12]; |
kagelump | 0:3f9f4f8c8b2d | 85 | conv_batt(buf, batt); |
kagelump | 0:3f9f4f8c8b2d | 86 | for (i=0;i<12;i++) |
kagelump | 0:3f9f4f8c8b2d | 87 | pc.printf("%d: %f \r\n", i, batt[i] * 1.5 / 1000); |
kagelump | 0:3f9f4f8c8b2d | 88 | pc.printf("\r\n=============================\r\n"); |
kagelump | 0:3f9f4f8c8b2d | 89 | wait(2); |
kagelump | 0:3f9f4f8c8b2d | 90 | } |
kagelump | 0:3f9f4f8c8b2d | 91 | } |