You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.3 KiB
76 lines
1.3 KiB
#ifndef _MCP4725_HPP_
|
|
#define _MCP4725_HPP_
|
|
|
|
#include <stdint.h>
|
|
#include <functional>
|
|
|
|
class MCP4725
|
|
{
|
|
public:
|
|
// address list
|
|
enum i2c_addr
|
|
{
|
|
addr_0x0 = 0b01100000,
|
|
addr_0x1 = addr_0x0 + 1,
|
|
addr_0x2 = addr_0x0 + 1,
|
|
addr_0x3 = addr_0x0 + 1,
|
|
addr_0x4 = addr_0x0 + 1,
|
|
addr_0x5 = addr_0x0 + 1,
|
|
addr_0x6 = addr_0x0 + 1,
|
|
addr_0x7 = addr_0x0 + 1
|
|
}
|
|
|
|
// power down impedance modes
|
|
enum pwrd_md
|
|
{
|
|
normal = 0x04,
|
|
ohm_1k = 0x01,
|
|
ohm_100k = 0x02,
|
|
ohm_500k = 0x03
|
|
};
|
|
|
|
//using std::functional<uint8_t(uint8_t, uint8_t)> i2c_read_n_t;
|
|
|
|
using i2c_write_n_t = std::functional<void(uint8_t, uint8_t*,uint8_t)>;
|
|
|
|
MCP4725(pwrd_md power_down_mode,
|
|
i2c_addr address,
|
|
i2c_write_n_t i2c_write);
|
|
|
|
MCP4725(i2c_addr address,
|
|
i2c_write_n_t i2c_write);
|
|
|
|
~MCP4725();
|
|
|
|
void operator=(uint16_t dac_value);
|
|
|
|
void operator==(uint16_t dac_and_eeprom_value);
|
|
|
|
void write_dac_and_eeprom(uint16_t value);
|
|
|
|
void set_powerdown_impedance(pwrd_md mode);
|
|
|
|
i2c_addr get_i2c_addr();
|
|
|
|
void set_power
|
|
|
|
|
|
private:
|
|
|
|
enum commands_t
|
|
{
|
|
fast_mode = 0x00,
|
|
write_dac = 0x40,
|
|
write_dac_and_eeprom = 0x60
|
|
};
|
|
|
|
i2c_addr address;
|
|
pwrd_md power_down_mode;
|
|
i2c_write_n_t i2c_write;
|
|
uint16_t dac_value;
|
|
uint16_t eeprom_value;
|
|
|
|
};
|
|
|
|
#endif // _MCP4725_HPP_
|