LTC2945 ported

Dependencies:   mbed

main.cpp

Committer:
odtulumbedder
Date:
2017-08-25
Revision:
2:7e390bcce297
Parent:
0:6be57f391716
Child:
3:2ab78e7e8518

File content as of revision 2:7e390bcce297:

#include "mbed.h"
#include <I2C.h>
#include "LT_I2C.h"
#include "LTC2945.h"

I2C i2c(p9, p10);
// sda, scl

extern I2C* i2c_object;

Serial pc(USBTX, USBRX);

const int ltc2945_addr = 0xDE>>1;

int test_write(int byte) {
    return i2c_object->write(byte);
}

#define ASSERT(x) if (! (x)) { printf("%s:%d %s failed!\n", __FILE__, __LINE__, #x); }
#define DEBUG_LINE printf("DEBUG: %s:%d\n", __FILE__, __LINE__);

int main() {
    ASSERT(lt_i2c_init_attach(&i2c) == LT_I2C_INIT_FINE);
    i2c.frequency(10000);

    const float LTC2945_DELTA_SENSE_lsb = 2.5006105E-05;        //!< Typical Delta lsb weight in volts
    const float LTC2945_VIN_lsb = 2.5006105E-02;                //!< Typical VIN lsb weight in volts
    const float LTC2945_Power_lsb = 6.25305E-07;                //!< Typical POWER lsb weight in V^2

    int32_t power_code;
    uint16_t current_code;
    uint16_t VIN_code; 
    uint8_t adc_command;
    int8_t ack;
    float resistor;
    float power;
    float current;
    float VIN;
    
    while (true) {
        ack = 0;
        adc_command = LTC2945_SENSE_MONITOR | LTC2945_CONTINUOUS_MODE; // Builds commands to set LTC2945 to continuous mode
        ack |= LTC2945_write(ltc2945_addr, LTC2945_CONTROL_REG, adc_command);   // Sets the LTC2945 to continuous mode
        ASSERT(ack == 0);
        resistor = .0182445; // Resistor Value On Demo Board

        ack |= LTC2945_read_24_bits(ltc2945_addr, LTC2945_POWER_MSB2_REG, &power_code);  // Reads the ADC registers that contains V^2
        ASSERT(ack == 0);
        power = LTC2945_code_to_power(power_code, resistor, LTC2945_Power_lsb); // Calculates power from power code, resistor value and power lsb

        ack |= LTC2945_read_12_bits(ltc2945_addr, LTC2945_DELTA_SENSE_MSB_REG, &current_code); // Reads the voltage code across sense resistor
        ASSERT(ack == 0);
        current = LTC2945_code_to_current(current_code, resistor, LTC2945_DELTA_SENSE_lsb); // Calculates current from current code, resistor value and current lsb
    
        ack |= LTC2945_read_12_bits(ltc2945_addr, LTC2945_VIN_MSB_REG, &VIN_code);   // Reads VIN voltage code
        ASSERT(ack == 0);
        VIN = LTC2945_VIN_code_to_voltage(VIN_code, LTC2945_VIN_lsb);  // Calculates VIN voltage from VIN code and lsb


        printf("power: %f, current: %f, Vin: %f\n", power, current, VIN);
        wait_ms(500);        
    }
}