I2C not yet integrated
Tested working with single and differential voltages.
Connect SCL (pin 11) to D15 Connect SDA (pin 10) to D14 Connect pin 16 to +5v Connect pin 9 to gnd
main.cpp@5:8aa0f4e6788c, 2016-12-08 (annotated)
- Committer:
- lrdawg99
- Date:
- Thu Dec 08 21:48:29 2016 +0000
- Revision:
- 5:8aa0f4e6788c
- Parent:
- 4:85017622b676
scl sda switch
Who changed what in which revision?
User | Revision | Line number | New 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 | |
lrdawg99 | 0:1473318f27b6 | 50 | void readSingle() { |
lrdawg99 | 0:1473318f27b6 | 51 | int8_t data_valid; |
lrdawg99 | 0:1473318f27b6 | 52 | int16_t code; |
lrdawg99 | 0:1473318f27b6 | 53 | float voltage; |
lrdawg99 | 1:4e4194db7cd6 | 54 | ack = 0; |
lrdawg99 | 4:85017622b676 | 55 | ack |= ltc2->LTC2991_register_set_clear_bits(LTC2991_I2C_ADDRESS, LTC2991_CONTROL_V1234_REG, 0x00, LTC2991_V1_V2_DIFFERENTIAL_ENABLE | LTC2991_V1_V2_TEMP_ENABLE); |
lrdawg99 | 4:85017622b676 | 56 | ack |= ltc2->LTC2991_adc_read_new_data(LTC2991_I2C_ADDRESS, LTC2991_V1_MSB_REG, &code, &data_valid, LTC2991_TIMEOUT); |
lrdawg99 | 4:85017622b676 | 57 | voltage = ltc2->LTC2991_code_to_single_ended_voltage(code, LTC2991_SINGLE_ENDED_lsb); |
lrdawg99 | 1:4e4194db7cd6 | 58 | if (ack != 0) { |
lrdawg99 | 1:4e4194db7cd6 | 59 | pc.printf("Error: No Acknowledge.\n"); |
lrdawg99 | 1:4e4194db7cd6 | 60 | } else { |
lrdawg99 | 1:4e4194db7cd6 | 61 | pc.printf("V1: %4.2f V\n", voltage); |
lrdawg99 | 1:4e4194db7cd6 | 62 | } |
lrdawg99 | 0:1473318f27b6 | 63 | } |
lrdawg99 | 1:4e4194db7cd6 | 64 | |
lrdawg99 | 0:1473318f27b6 | 65 | void readDiff() { |
lrdawg99 | 0:1473318f27b6 | 66 | int8_t data_valid; |
lrdawg99 | 0:1473318f27b6 | 67 | int16_t code; |
lrdawg99 | 0:1473318f27b6 | 68 | float voltage; |
lrdawg99 | 1:4e4194db7cd6 | 69 | ack = 0; |
lrdawg99 | 4:85017622b676 | 70 | ack |= ltc2->LTC2991_register_set_clear_bits(LTC2991_I2C_ADDRESS, LTC2991_CONTROL_V1234_REG, LTC2991_V1_V2_DIFFERENTIAL_ENABLE, LTC2991_V1_V2_TEMP_ENABLE); |
lrdawg99 | 4:85017622b676 | 71 | ack |= ltc2->LTC2991_adc_read_new_data(LTC2991_I2C_ADDRESS, LTC2991_V2_MSB_REG, &code, &data_valid, LTC2991_TIMEOUT); |
lrdawg99 | 4:85017622b676 | 72 | voltage = ltc2->LTC2991_code_to_differential_voltage(code, LTC2991_DIFFERENTIAL_lsb); |
lrdawg99 | 1:4e4194db7cd6 | 73 | if (ack != 0) { |
lrdawg99 | 1:4e4194db7cd6 | 74 | pc.printf("Error: No Acknowledge.\n"); |
lrdawg99 | 1:4e4194db7cd6 | 75 | } else { |
lrdawg99 | 1:4e4194db7cd6 | 76 | pc.printf("V1-V2: %4.2f V\n", voltage, ack); |
lrdawg99 | 1:4e4194db7cd6 | 77 | } |
lrdawg99 | 0:1473318f27b6 | 78 | } |