I2C not yet integrated

Dependencies:   mbed

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

Committer:
lrdawg99
Date:
Thu Dec 08 21:42:33 2016 +0000
Revision:
4:85017622b676
Parent:
3:34e56211d5b6
Child:
5:8aa0f4e6788c
scl sda switch issue

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 2:c9e727dcd00e 10 LTC2991 *ltc0 = new LTC2991(I2C_SDA, I2C_SCL);
lrdawg99 2:c9e727dcd00e 11 LTC2991 *ltc1 = new LTC2991(PB_3, PB_10);
lrdawg99 4:85017622b676 12 LTC2991 *ltc2 = new LTC2991(PA_8, PB_4);
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 }