LT Battery test code

Dependencies:   mbed

Committer:
kagelump
Date:
Sun Sep 05 19:00:01 2010 +0000
Revision:
0:3f9f4f8c8b2d

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }