Used for testing battery sense circuit, looking for max and min levels. Allow for finding true empty, half and full values for driving LEDs for example

Dependencies:   mbed MPL3115A2 TSI WiGo_BattCharger

Committer:
monpjc
Date:
Thu May 16 07:31:47 2013 +0000
Revision:
0:17ad5a30ff25
Child:
1:b1921e153d21
Basic test of max and min batt levels

Who changed what in which revision?

UserRevisionLine numberNew contents of line
monpjc 0:17ad5a30ff25 1 #include "mbed.h"
monpjc 0:17ad5a30ff25 2
monpjc 0:17ad5a30ff25 3 //Battery Circuit
monpjc 0:17ad5a30ff25 4 #define BATT_FULL PTB10
monpjc 0:17ad5a30ff25 5 #define BATT_MED PTB9
monpjc 0:17ad5a30ff25 6 #define BATT_LOW PTB8
monpjc 0:17ad5a30ff25 7 #define CHRG_EN1 PTB2
monpjc 0:17ad5a30ff25 8 #define CHRG_EN2 PTB3
monpjc 0:17ad5a30ff25 9 #define CHRG_SNS_EN PTC2
monpjc 0:17ad5a30ff25 10 #define CHRG_SNS PTB1
monpjc 0:17ad5a30ff25 11 #define CHRG_POK PTC6
monpjc 0:17ad5a30ff25 12 #define CHRG_CHG PTA5
monpjc 0:17ad5a30ff25 13 #define POWER_OK 0
monpjc 0:17ad5a30ff25 14 #define CHARGING 0
monpjc 0:17ad5a30ff25 15 #define LED_ON 0
monpjc 0:17ad5a30ff25 16 #define LED_OFF 1
monpjc 0:17ad5a30ff25 17
monpjc 0:17ad5a30ff25 18 #define RGB_LED_ON 0
monpjc 0:17ad5a30ff25 19 #define RGB_LED_OFF 1
monpjc 0:17ad5a30ff25 20
monpjc 0:17ad5a30ff25 21 DigitalOut myled1(LED1);
monpjc 0:17ad5a30ff25 22 DigitalOut myled2(LED2);
monpjc 0:17ad5a30ff25 23 DigitalOut myled3(LED3);
monpjc 0:17ad5a30ff25 24
monpjc 0:17ad5a30ff25 25 Serial pc(USBTX, USBRX);
monpjc 0:17ad5a30ff25 26
monpjc 0:17ad5a30ff25 27 //Battery
monpjc 0:17ad5a30ff25 28 DigitalOut BattFull(BATT_FULL);
monpjc 0:17ad5a30ff25 29 DigitalOut BattMed(BATT_MED);
monpjc 0:17ad5a30ff25 30 DigitalOut BattLow(BATT_LOW);
monpjc 0:17ad5a30ff25 31 DigitalOut ChargeEN1(CHRG_EN1);
monpjc 0:17ad5a30ff25 32 DigitalOut ChargeEN2(CHRG_EN2);
monpjc 0:17ad5a30ff25 33 DigitalOut ChargeSenseEN(CHRG_SNS_EN);
monpjc 0:17ad5a30ff25 34 DigitalIn SupplyOk(CHRG_POK);
monpjc 0:17ad5a30ff25 35 DigitalIn Charging(CHRG_CHG);
monpjc 0:17ad5a30ff25 36 AnalogIn ChargeSense(CHRG_SNS);
monpjc 0:17ad5a30ff25 37
monpjc 0:17ad5a30ff25 38 float max_batt;
monpjc 0:17ad5a30ff25 39 float min_batt;
monpjc 0:17ad5a30ff25 40 float batt_lvl;
monpjc 0:17ad5a30ff25 41
monpjc 0:17ad5a30ff25 42 int main()
monpjc 0:17ad5a30ff25 43 {
monpjc 0:17ad5a30ff25 44
monpjc 0:17ad5a30ff25 45 //100mA Charge
monpjc 0:17ad5a30ff25 46 ChargeEN1 = 0;
monpjc 0:17ad5a30ff25 47 ChargeEN2 = 0;
monpjc 0:17ad5a30ff25 48
monpjc 0:17ad5a30ff25 49 ChargeSenseEN = 0;
monpjc 0:17ad5a30ff25 50 wait(0.5);
monpjc 0:17ad5a30ff25 51 max_batt = ChargeSense;
monpjc 0:17ad5a30ff25 52 min_batt = ChargeSense;
monpjc 0:17ad5a30ff25 53
monpjc 0:17ad5a30ff25 54 while(1) {
monpjc 0:17ad5a30ff25 55
monpjc 0:17ad5a30ff25 56 //If charging then blink Blue led to show we are alive
monpjc 0:17ad5a30ff25 57 if( Charging == CHARGING ) {
monpjc 0:17ad5a30ff25 58 myled2 = RGB_LED_OFF;
monpjc 0:17ad5a30ff25 59 myled3 = RGB_LED_OFF;
monpjc 0:17ad5a30ff25 60
monpjc 0:17ad5a30ff25 61 myled1 = RGB_LED_ON;
monpjc 0:17ad5a30ff25 62 wait(0.1);
monpjc 0:17ad5a30ff25 63 myled1 = RGB_LED_OFF;
monpjc 0:17ad5a30ff25 64 wait(0.9);
monpjc 0:17ad5a30ff25 65 }
monpjc 0:17ad5a30ff25 66
monpjc 0:17ad5a30ff25 67 //If no power applied (via USB) then turn all on, blink Bled led off
monpjc 0:17ad5a30ff25 68 if( SupplyOk != POWER_OK ) {
monpjc 0:17ad5a30ff25 69 myled2 = RGB_LED_ON;
monpjc 0:17ad5a30ff25 70 myled3 = RGB_LED_ON;
monpjc 0:17ad5a30ff25 71
monpjc 0:17ad5a30ff25 72 myled1 = RGB_LED_OFF;
monpjc 0:17ad5a30ff25 73 wait(0.1);
monpjc 0:17ad5a30ff25 74 myled1 = RGB_LED_ON;
monpjc 0:17ad5a30ff25 75 wait(0.9);
monpjc 0:17ad5a30ff25 76 }
monpjc 0:17ad5a30ff25 77
monpjc 0:17ad5a30ff25 78 batt_lvl = ChargeSense;
monpjc 0:17ad5a30ff25 79
monpjc 0:17ad5a30ff25 80 if( batt_lvl <= 0.53 ) {
monpjc 0:17ad5a30ff25 81 BattLow = LED_OFF;
monpjc 0:17ad5a30ff25 82 BattMed = LED_OFF;
monpjc 0:17ad5a30ff25 83 BattFull = LED_OFF;
monpjc 0:17ad5a30ff25 84 }
monpjc 0:17ad5a30ff25 85 if( batt_lvl > 0.53 && batt_lvl <= 0.605 ) {
monpjc 0:17ad5a30ff25 86 BattLow = LED_ON;
monpjc 0:17ad5a30ff25 87 BattMed = LED_OFF;
monpjc 0:17ad5a30ff25 88 BattFull = LED_OFF;
monpjc 0:17ad5a30ff25 89 }
monpjc 0:17ad5a30ff25 90 if( batt_lvl > 0.605 && batt_lvl <= 0.67 ) {
monpjc 0:17ad5a30ff25 91 BattLow = LED_ON;
monpjc 0:17ad5a30ff25 92 BattMed = LED_ON;
monpjc 0:17ad5a30ff25 93 BattFull = LED_OFF;
monpjc 0:17ad5a30ff25 94 }
monpjc 0:17ad5a30ff25 95 if( batt_lvl > 0.67 ) {
monpjc 0:17ad5a30ff25 96 BattLow = LED_ON;
monpjc 0:17ad5a30ff25 97 BattMed = LED_ON;
monpjc 0:17ad5a30ff25 98 BattFull = LED_ON;
monpjc 0:17ad5a30ff25 99 }
monpjc 0:17ad5a30ff25 100
monpjc 0:17ad5a30ff25 101 if( batt_lvl < min_batt ) {
monpjc 0:17ad5a30ff25 102 min_batt = batt_lvl;
monpjc 0:17ad5a30ff25 103 }
monpjc 0:17ad5a30ff25 104
monpjc 0:17ad5a30ff25 105 if( batt_lvl > max_batt ) {
monpjc 0:17ad5a30ff25 106 max_batt = batt_lvl;
monpjc 0:17ad5a30ff25 107 }
monpjc 0:17ad5a30ff25 108
monpjc 0:17ad5a30ff25 109 pc.printf(">%f Min:%f Max:%f\n\r", batt_lvl, min_batt, max_batt);
monpjc 0:17ad5a30ff25 110 }
monpjc 0:17ad5a30ff25 111 }