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
Diff: LTC2991.cpp
- Revision:
- 2:c9e727dcd00e
- Parent:
- 1:4e4194db7cd6
- Child:
- 4:85017622b676
--- a/LTC2991.cpp Tue Nov 29 03:20:35 2016 +0000 +++ b/LTC2991.cpp Tue Dec 06 18:34:46 2016 +0000 @@ -65,7 +65,6 @@ Library for LTC2991: 14-bit Octal I2C Voltage, Current, and Temperature Monitor */ -//#include <Arduino.h> #include <stdint.h> #include "Linduino.h" #include "LT_I2C.h" @@ -74,14 +73,20 @@ Serial pc2(USBTX, USBRX, 9600); -//#include <Wire.h> +LTC2991::LTC2991() { + lti2c = new LT_I2C(); +} + +LTC2991::LTC2991(PinName i2c_scl_, PinName i2c_sda_) { + lti2c = new LT_I2C(i2c_scl_, i2c_sda_); +} // Reads a 14-bit adc_code from LTC2991. -int8_t LTC2991_adc_read(uint8_t i2c_address, uint8_t msb_register_address, int16_t *adc_code, int8_t *data_valid) +int8_t LTC2991::LTC2991_adc_read(uint8_t i2c_address, uint8_t msb_register_address, int16_t *adc_code, int8_t *data_valid) { int8_t ack = 0; uint16_t code; - ack = i2c_read_word_data(i2c_address, msb_register_address, &code); + ack = lti2c->i2c_read_word_data(i2c_address, msb_register_address, &code); *data_valid = (code >> 15) & 0x01; // Place Data Valid Bit in *data_valid @@ -97,7 +102,7 @@ // Similar to LTC2991_adc_read except it repeats until the data_valid bit is set, it fails to receive an I2C acknowledge, or the timeout (in milliseconds) // expires. It keeps trying to read from the LTC2991 every millisecond until the data_valid bit is set (indicating new data since the previous // time this register was read) or until it fails to receive an I2C acknowledge (indicating an error on the I2C bus). -int8_t LTC2991_adc_read_timeout(uint8_t i2c_address, uint8_t msb_register_address, int16_t *adc_code, int8_t *data_valid, uint16_t timeout, uint8_t status_bit) +int8_t LTC2991::LTC2991_adc_read_timeout(uint8_t i2c_address, uint8_t msb_register_address, int16_t *adc_code, int8_t *data_valid, uint16_t timeout, uint8_t status_bit) { int8_t ack = 0; uint8_t reg_data; @@ -147,7 +152,7 @@ // to differential voltage mode, the data in the register may still correspond to the temperature reading immediately // after the mode change. Flushing one reading and waiting for a new reading guarantees fresh data is received. // If the timeout is reached without valid data (*data_valid=1) the function exits. -int8_t LTC2991_adc_read_new_data(uint8_t i2c_address, uint8_t msb_register_address, int16_t *adc_code, int8_t *data_valid, uint16_t timeout) +int8_t LTC2991::LTC2991_adc_read_new_data(uint8_t i2c_address, uint8_t msb_register_address, int16_t *adc_code, int8_t *data_valid, uint16_t timeout) { int8_t ack = 0; @@ -158,25 +163,25 @@ } // Reads an 8-bit register from the LTC2991 using the standard repeated start format. -int8_t LTC2991_register_read(uint8_t i2c_address, uint8_t register_address, uint8_t *register_data) +int8_t LTC2991::LTC2991_register_read(uint8_t i2c_address, uint8_t register_address, uint8_t *register_data) { int8_t ack = 0; - ack = i2c_read_byte_data(i2c_address, register_address, register_data); + ack = lti2c->i2c_read_byte_data(i2c_address, register_address, register_data); return(ack); } // Write one byte to an LTC2991 register. // Writes to an 8-bit register inside the LTC2991 using the standard I2C repeated start format. -int8_t LTC2991_register_write(uint8_t i2c_address, uint8_t register_address, uint8_t register_data) +int8_t LTC2991::LTC2991_register_write(uint8_t i2c_address, uint8_t register_address, uint8_t register_data) { int8_t ack = 0; - ack = i2c_write_byte_data(i2c_address, register_address, register_data); + ack = lti2c->i2c_write_byte_data(i2c_address, register_address, register_data); return(ack); } // Used to set and clear bits in a control register. bits_to_set will be bitwise OR'd with the register. // bits_to_clear will be inverted and bitwise AND'd with the register so that every location with a 1 will result in a 0 in the register. -int8_t LTC2991_register_set_clear_bits(uint8_t i2c_address, uint8_t register_address, uint8_t bits_to_set, uint8_t bits_to_clear) +int8_t LTC2991::LTC2991_register_set_clear_bits(uint8_t i2c_address, uint8_t register_address, uint8_t bits_to_set, uint8_t bits_to_clear) { uint8_t register_data; int8_t ack = 0; @@ -189,7 +194,7 @@ } // Calculates the LTC2991 single-ended input voltages -float LTC2991_code_to_single_ended_voltage(int16_t adc_code, float LTC2991_single_ended_lsb) +float LTC2991::LTC2991_code_to_single_ended_voltage(int16_t adc_code, float LTC2991_single_ended_lsb) { float voltage; int16_t sign = 1; @@ -204,7 +209,7 @@ } // Calculates the LTC2991 Vcc voltage -float LTC2991_code_to_vcc_voltage(int16_t adc_code, float LTC2991_single_ended_lsb) +float LTC2991::LTC2991_code_to_vcc_voltage(int16_t adc_code, float LTC2991_single_ended_lsb) { float voltage; int16_t sign = 1; @@ -219,7 +224,7 @@ } // Calculates the LTC2991 differential input voltage. -float LTC2991_code_to_differential_voltage(int16_t adc_code, float LTC2991_differential_lsb) +float LTC2991::LTC2991_code_to_differential_voltage(int16_t adc_code, float LTC2991_differential_lsb) { float voltage; int16_t sign = 1; @@ -233,7 +238,7 @@ } // Calculates the LTC2991 temperature -float LTC2991_temperature(int16_t adc_code, float LTC2991_temperature_lsb, boolean unit) +float LTC2991::LTC2991_temperature(int16_t adc_code, float LTC2991_temperature_lsb, boolean unit) { float temperature; adc_code = (adc_code & 0x1FFF); //! 1) Removes first 3 bits @@ -250,7 +255,7 @@ } // Calculates the LTC2991 diode voltage -float LTC2991_code_to_diode_voltage(int16_t adc_code, float LTC2991_diode_voltage_lsb) +float LTC2991::LTC2991_code_to_diode_voltage(int16_t adc_code, float LTC2991_diode_voltage_lsb) { float voltage; adc_code = (adc_code & 0x1FFF); //! 1) Removes first 3 bits