LTC2945 ported

Dependencies:   mbed

Revision:
0:6be57f391716
Child:
2:7e390bcce297
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Aug 23 10:49:21 2017 +0000
@@ -0,0 +1,53 @@
+#include "mbed.h"
+#include <I2C.h>
+#include "LT_I2C.h"
+#include "LTC2945.h"
+
+I2C i2c(p28, p27);
+// sda, scl
+
+Serial pc(USBTX, USBRX);
+
+#define LTC2945_I2C_ADDRESS 0xD4
+
+#define ASSERT(x) if (! (x)) { pc.printf("%s:%d %s failed!\n", __FILE__, __LINE__, #x); }
+
+int main() {
+    ASSERT(lt_i2c_init_attach(&i2c) == 0);
+
+    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) {
+        adc_command = LTC2945_SENSE_MONITOR | LTC2945_CONTINUOUS_MODE; // Builds commands to set LTC2945 to continuous mode
+        ack |= LTC2945_write(LTC2945_I2C_ADDRESS, LTC2945_CONTROL_REG, adc_command);   // Sets the LTC2945 to continuous mode
+        ASSERT(ack == 0);
+        resistor = .01; // Resistor Value On Demo Board
+    
+        ack |= LTC2945_read_24_bits(LTC2945_I2C_ADDRESS, 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_I2C_ADDRESS, 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_I2C_ADDRESS, 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
+        
+        pc.printf("power: %f, current: %f, Vin: %f\n", power, current, VIN);
+        wait_ms(500);
+    }
+}