Brody Kellish / ltc2991_lib

Dependents:   ece495_firmware

Fork of ltc2991_test by Logan Rooper

Committer:
bdk9
Date:
Wed Dec 14 05:53:50 2016 +0000
Revision:
6:686dd5d1074d
Parent:
5:8aa0f4e6788c
parameterized methods

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lrdawg99 0:1473318f27b6 1 #include "mbed.h"
lrdawg99 3:34e56211d5b6 2 #include "LTC2991.h"
lrdawg99 0:1473318f27b6 3 #include <stdarg.h>
lrdawg99 0:1473318f27b6 4
lrdawg99 0:1473318f27b6 5 int8_t ack; // 0 == ack, 1 == no ack
lrdawg99 0:1473318f27b6 6 const uint16_t LTC2991_TIMEOUT=1000; //!< Configures the maximum timeout allowed for an LTC2991 read.
lrdawg99 0:1473318f27b6 7 Serial pc(USBTX, USBRX, 9600);
lrdawg99 0:1473318f27b6 8
lrdawg99 3:34e56211d5b6 9 //These pins for the nucleo nucleo f401re
lrdawg99 5:8aa0f4e6788c 10 //LTC2991 *ltc0 = new LTC2991(I2C_SDA, I2C_SCL);
lrdawg99 5:8aa0f4e6788c 11 //LTC2991 *ltc1 = new LTC2991(PB_3, PB_10);
lrdawg99 5:8aa0f4e6788c 12 LTC2991 *ltc2 = new LTC2991(PB_4, PA_8);
lrdawg99 2:c9e727dcd00e 13
lrdawg99 1:4e4194db7cd6 14
lrdawg99 1:4e4194db7cd6 15 //void setup();
lrdawg99 0:1473318f27b6 16 int main();
lrdawg99 0:1473318f27b6 17 void readSingle();
lrdawg99 0:1473318f27b6 18 void readDiff();
lrdawg99 0:1473318f27b6 19 void setup() {
lrdawg99 2:c9e727dcd00e 20 //init lib
lrdawg99 2:c9e727dcd00e 21
lrdawg99 2:c9e727dcd00e 22
lrdawg99 1:4e4194db7cd6 23 ack = 0;
lrdawg99 0:1473318f27b6 24 while (true)
lrdawg99 0:1473318f27b6 25 {
lrdawg99 0:1473318f27b6 26 pc.printf("boot\n");
lrdawg99 4:85017622b676 27 ack |= ltc2->LTC2991_register_write(LTC2991_I2C_ADDRESS, LTC2991_CHANNEL_ENABLE_REG, LTC2991_ENABLE_ALL_CHANNELS); //! Enables all channels
lrdawg99 4:85017622b676 28 ack |= ltc2->LTC2991_register_write(LTC2991_I2C_ADDRESS, LTC2991_CONTROL_V1234_REG, 0x00); //! Sets registers to default starting values.
lrdawg99 4:85017622b676 29 ack |= ltc2->LTC2991_register_write(LTC2991_I2C_ADDRESS, LTC2991_CONTROL_V5678_REG, 0x00);
lrdawg99 4:85017622b676 30 ack |= ltc2->LTC2991_register_write(LTC2991_I2C_ADDRESS, LTC2991_CONTROL_PWM_Tinternal_REG, LTC2991_REPEAT_MODE); //! Configures LTC2991 for Repeated Acquisition mode
lrdawg99 1:4e4194db7cd6 31
lrdawg99 0:1473318f27b6 32 if (ack != 0) {
lrdawg99 0:1473318f27b6 33 pc.printf("Error: No Acknowledge. Check I2C Address.\n");
lrdawg99 0:1473318f27b6 34 wait_ms(500);
lrdawg99 0:1473318f27b6 35 } else {
lrdawg99 0:1473318f27b6 36 break;
lrdawg99 0:1473318f27b6 37 }
lrdawg99 0:1473318f27b6 38 }
lrdawg99 0:1473318f27b6 39 }
lrdawg99 0:1473318f27b6 40
lrdawg99 0:1473318f27b6 41 int main() {
lrdawg99 0:1473318f27b6 42 setup();
lrdawg99 0:1473318f27b6 43 while(1) {
lrdawg99 0:1473318f27b6 44 readDiff();
lrdawg99 1:4e4194db7cd6 45 readSingle();
lrdawg99 0:1473318f27b6 46 wait_ms(750);
lrdawg99 0:1473318f27b6 47 }
lrdawg99 0:1473318f27b6 48 }
lrdawg99 0:1473318f27b6 49
bdk9 6:686dd5d1074d 50 // read single pins 1 - 8
bdk9 6:686dd5d1074d 51 float readSingle(LTC2991 *l, int p) {
bdk9 6:686dd5d1074d 52 int v_control_reg, v_msb;
bdk9 6:686dd5d1074d 53 switch (p) {
bdk9 6:686dd5d1074d 54 case 1:
bdk9 6:686dd5d1074d 55 v_control_reg = LTC2991_CONTROL_V1234_REG;
bdk9 6:686dd5d1074d 56 v_msb = LTC2991_V1_MSB_REG;
bdk9 6:686dd5d1074d 57 break;
bdk9 6:686dd5d1074d 58 case 2:
bdk9 6:686dd5d1074d 59 v_control_reg = LTC2991_CONTROL_V1234_REG;
bdk9 6:686dd5d1074d 60 v_msb = LTC2991_V2_MSB_REG;
bdk9 6:686dd5d1074d 61 break;
bdk9 6:686dd5d1074d 62 case 3:
bdk9 6:686dd5d1074d 63 v_control_reg = LTC2991_CONTROL_V1234_REG;
bdk9 6:686dd5d1074d 64 v_msb = LTC2991_V3_MSB_REG;
bdk9 6:686dd5d1074d 65 break;
bdk9 6:686dd5d1074d 66 case 4:
bdk9 6:686dd5d1074d 67 v_control_reg = LTC2991_CONTROL_V1234_REG;
bdk9 6:686dd5d1074d 68 v_msb = LTC2991_V4_MSB_REG;
bdk9 6:686dd5d1074d 69 break;
bdk9 6:686dd5d1074d 70 case 5:
bdk9 6:686dd5d1074d 71 v_control_reg = LTC2991_CONTROL_V5678_REG;
bdk9 6:686dd5d1074d 72 v_msb = LTC2991_V5_MSB_REG;
bdk9 6:686dd5d1074d 73 break;
bdk9 6:686dd5d1074d 74 case 6:
bdk9 6:686dd5d1074d 75 v_control_reg = LTC2991_CONTROL_V5678_REG;
bdk9 6:686dd5d1074d 76 v_msb = LTC2991_V6_MSB_REG;
bdk9 6:686dd5d1074d 77 break;
bdk9 6:686dd5d1074d 78 case 7:
bdk9 6:686dd5d1074d 79 v_control_reg = LTC2991_CONTROL_V5678_REG;
bdk9 6:686dd5d1074d 80 v_msb = LTC2991_V7_MSB_REG;
bdk9 6:686dd5d1074d 81 break;
bdk9 6:686dd5d1074d 82 case 8:
bdk9 6:686dd5d1074d 83 v_control_reg = LTC2991_CONTROL_V5678_REG;
bdk9 6:686dd5d1074d 84 v_msb = LTC2991_V8_MSB_REG;
bdk9 6:686dd5d1074d 85 break;
bdk9 6:686dd5d1074d 86 }
bdk9 6:686dd5d1074d 87
lrdawg99 0:1473318f27b6 88 int8_t data_valid;
lrdawg99 0:1473318f27b6 89 int16_t code;
lrdawg99 0:1473318f27b6 90 float voltage;
lrdawg99 1:4e4194db7cd6 91 ack = 0;
bdk9 6:686dd5d1074d 92 ack |= l->LTC2991_register_set_clear_bits(LTC2991_I2C_ADDRESS, v_control_reg, 0x00, LTC2991_V1_V2_DIFFERENTIAL_ENABLE | LTC2991_V1_V2_TEMP_ENABLE);
bdk9 6:686dd5d1074d 93 ack |= l->LTC2991_adc_read_new_data(LTC2991_I2C_ADDRESS, v_msb, &code, &data_valid, LTC2991_TIMEOUT);
bdk9 6:686dd5d1074d 94 voltage = l->LTC2991_code_to_single_ended_voltage(code, LTC2991_SINGLE_ENDED_lsb);
lrdawg99 1:4e4194db7cd6 95 if (ack != 0) {
lrdawg99 1:4e4194db7cd6 96 pc.printf("Error: No Acknowledge.\n");
lrdawg99 1:4e4194db7cd6 97 }
bdk9 6:686dd5d1074d 98 return voltage;
lrdawg99 0:1473318f27b6 99 }
lrdawg99 1:4e4194db7cd6 100
bdk9 6:686dd5d1074d 101 float readDiff(LTC2991 *l, int upper_pin) {
bdk9 6:686dd5d1074d 102 int v_control_reg, v_msb;
bdk9 6:686dd5d1074d 103 switch (p) {
bdk9 6:686dd5d1074d 104 case 2:
bdk9 6:686dd5d1074d 105 v_control_reg = LTC2991_CONTROL_V1234_REG;
bdk9 6:686dd5d1074d 106 v_msb = LTC2991_V2_MSB_REG;
bdk9 6:686dd5d1074d 107 break;
bdk9 6:686dd5d1074d 108 case 4:
bdk9 6:686dd5d1074d 109 v_control_reg = LTC2991_CONTROL_V1234_REG;
bdk9 6:686dd5d1074d 110 v_msb = LTC2991_V4_MSB_REG;
bdk9 6:686dd5d1074d 111 break;
bdk9 6:686dd5d1074d 112 case 6:
bdk9 6:686dd5d1074d 113 v_control_reg = LTC2991_CONTROL_V5678_REG;
bdk9 6:686dd5d1074d 114 v_msb = LTC2991_V6_MSB_REG;
bdk9 6:686dd5d1074d 115 break;
bdk9 6:686dd5d1074d 116 case 8:
bdk9 6:686dd5d1074d 117 v_control_reg = LTC2991_CONTROL_V5678_REG;
bdk9 6:686dd5d1074d 118 v_msb = LTC2991_V8_MSB_REG;
bdk9 6:686dd5d1074d 119 break;
bdk9 6:686dd5d1074d 120 }
lrdawg99 0:1473318f27b6 121 int8_t data_valid;
lrdawg99 0:1473318f27b6 122 int16_t code;
lrdawg99 0:1473318f27b6 123 float voltage;
lrdawg99 1:4e4194db7cd6 124 ack = 0;
bdk9 6:686dd5d1074d 125 ack |= l->LTC2991_register_set_clear_bits(LTC2991_I2C_ADDRESS, v_control_reg, LTC2991_V1_V2_DIFFERENTIAL_ENABLE, LTC2991_V1_V2_TEMP_ENABLE);
bdk9 6:686dd5d1074d 126 ack |= l->LTC2991_adc_read_new_data(LTC2991_I2C_ADDRESS, v_msb, &code, &data_valid, LTC2991_TIMEOUT);
bdk9 6:686dd5d1074d 127 voltage = l->LTC2991_code_to_differential_voltage(code, LTC2991_DIFFERENTIAL_lsb);
lrdawg99 1:4e4194db7cd6 128 if (ack != 0) {
lrdawg99 1:4e4194db7cd6 129 pc.printf("Error: No Acknowledge.\n");
bdk9 6:686dd5d1074d 130 }
bdk9 6:686dd5d1074d 131 return voltage;
lrdawg99 0:1473318f27b6 132 }