mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-10-03 18:09:02 -04:00
160 lines
4.1 KiB
C++
160 lines
4.1 KiB
C++
#pragma once
|
|
//
|
|
// FILE: LTC2991.h
|
|
// AUTHOR: Rob Tillaart
|
|
// VERSION: 0.2.1
|
|
// DATE: 2021-05-10
|
|
// PURPOSE: Library for LTC2991 temperature and voltage control IC
|
|
// URL: https://github.com/RobTillaart/LTC2991
|
|
|
|
|
|
#include "Arduino.h"
|
|
#include "Wire.h"
|
|
|
|
|
|
#define LTC2991_LIB_VERSION (F("0.2.1"))
|
|
|
|
//
|
|
// DEFINES for readability
|
|
//
|
|
#define LTC2991_NEW_DATA 0x01
|
|
#define LTC2991_NO_DATA 0x00
|
|
|
|
#define LTC2991_BUSY 0x01
|
|
#define LTC2991_IDLE 0x00
|
|
|
|
#define LTC2991_TRIGGER_ENABLED 0x01
|
|
#define LTC2991_TRIGGER_DISABLED 0x00
|
|
|
|
#define LTC2991_FILTER_ENABLED 0x01
|
|
#define LTC2991_FILTER_DISABLED 0x00
|
|
|
|
#define LTC2991_VOLTAGE_DIFF 0x01
|
|
#define LTC2991_VOLTAGE_NORMAL 0x00
|
|
|
|
#define LTC2991_PWM_INVERTED 0x01
|
|
#define LTC2991_PWM_NORMAL 0x00
|
|
|
|
#define LTC2991_PWM_ENABLED 0x01
|
|
#define LTC2991_PWM_DISABLED 0x00
|
|
|
|
#define LTC2991_MODE_REPEAT 0x01
|
|
#define LTC2991_MODE_SINGLE 0x00
|
|
|
|
#define LTC2991_TINTERN_ENABLED 0x01
|
|
#define LTC2991_TINTERN_DISABLED 0x00
|
|
|
|
#define LTC2991_TINTERN_FILTER_ENABLED 0x01
|
|
#define LTC2991_TINTERN_FILTER_DISABLED 0x00
|
|
|
|
#define LTC2991_KELVIN 0x01
|
|
#define LTC2991_CELSIUS 0x00
|
|
|
|
|
|
class LTC2991
|
|
{
|
|
public:
|
|
explicit LTC2991(const uint8_t address, TwoWire *wire = &Wire);
|
|
|
|
bool begin();
|
|
bool isConnected();
|
|
uint8_t getAddress();
|
|
|
|
//
|
|
// CORE functions
|
|
//
|
|
// channel = 1..8
|
|
bool new_data(uint8_t channel); // external
|
|
bool new_temperature(); // internal
|
|
bool new_voltage(); // VCC
|
|
bool is_busy();
|
|
|
|
|
|
//
|
|
// EXTERNAL CHANNELS (8 voltage, 4 differentials or 4 temperature)
|
|
//
|
|
// n = 1 ==> V1 V2 T1
|
|
// n = 2 ==> V3 V4 T2
|
|
// n = 3 ==> V5 V6 T3
|
|
// n = 4 ==> V7 V8 T4
|
|
//
|
|
void trigger_conversion(uint8_t n); // wrapper around enable()
|
|
void trigger_conversion_all();
|
|
void enable(uint8_t n, bool enable);
|
|
bool is_enabled(uint8_t n);
|
|
|
|
|
|
// n: 1..4 see above
|
|
void enable_filter(uint8_t n, bool enable);
|
|
bool is_enabled_filter(uint8_t n);
|
|
|
|
void set_Kelvin(uint8_t n); // implicit set_mode_temperature
|
|
void set_Celsius(uint8_t n); // implicit set_mode_temperature
|
|
void set_temp_scale(uint8_t n, bool Kelvin = true);
|
|
char get_temp_scale(uint8_t n); // returns 'C' or 'K'
|
|
void set_mode_temperature(uint8_t n);
|
|
|
|
void set_mode_voltage_differential(uint8_t n);
|
|
void set_mode_voltage_normal(uint8_t n);
|
|
uint8_t get_operational_mode(uint8_t n); // enumeration?
|
|
uint8_t get_differential_mode(uint8_t n);
|
|
float get_value(uint8_t channel); // chan = 1..8
|
|
|
|
|
|
//
|
|
// PWM functions
|
|
//
|
|
// value = 0..511
|
|
void set_PWM(uint16_t value = 0);
|
|
void set_PWM_fast(uint16_t value = 0); // less resolution
|
|
uint16_t get_PWM();
|
|
void invert_PWM(bool invert = false);
|
|
bool is_inverted_PWM();
|
|
void enable_PWM(bool enable);
|
|
bool is_enabled_PWM();
|
|
|
|
|
|
//
|
|
// CONFIGURATION
|
|
//
|
|
void set_acquisition_repeat();
|
|
void set_acquisition_single();
|
|
uint8_t get_acquisition_mode();
|
|
|
|
|
|
//
|
|
// INTERNAL SENSORS
|
|
//
|
|
void enable_Tintern_Vcc(bool enable);
|
|
bool is_enabled_Tintern_Vcc();
|
|
void enable_filter_Tintern(bool enable);
|
|
bool is_enabled_filter_Tintern();
|
|
|
|
void set_Kelvin_Tintern();
|
|
void set_Celsius_Tintern();
|
|
void set_temp_scale_Tintern(bool Kelvin = true);
|
|
char get_temp_scale_Tintern(); // returns 'C' or 'K'
|
|
float get_Tintern();
|
|
float get_VCC();
|
|
|
|
|
|
private:
|
|
|
|
uint8_t _writeRegister(const uint8_t reg, const uint8_t value);
|
|
uint8_t _readRegister(const uint8_t reg);
|
|
uint16_t _readRegister16(const uint8_t reg);
|
|
|
|
|
|
void _setRegisterMask(const uint8_t reg, uint8_t mask);
|
|
void _clrRegisterMask(const uint8_t reg, uint8_t mask);
|
|
uint8_t _getRegisterMask(const uint8_t reg, uint8_t mask);
|
|
|
|
uint8_t _address;
|
|
TwoWire * _wire;
|
|
|
|
};
|
|
|
|
|
|
// -- END OF FILE --
|
|
|