Maxim Integrated 7-bit Sink/Source Current DAC. Driver/library for DS4424, DS4422
Diff: DS4424.cpp
- Revision:
- 1:cdaea8ff359c
- Parent:
- 0:a010119890ed
- Child:
- 3:c40703da0faf
--- a/DS4424.cpp Thu May 10 22:57:25 2018 +0000 +++ b/DS4424.cpp Fri May 11 23:52:54 2018 +0000 @@ -52,11 +52,22 @@ //****************************************************************************** -DS4424::DS4424(I2C &i2c_bus, DS4424_i2c_adrs_t slaveAddress): +DS4424::DS4424(I2C &i2c_bus, DS4424_i2c_adrs_t slaveAddress, DS4424_ic_t ic_variant): m_i2c(i2c_bus), m_writeAddress(slaveAddress <<1), m_readAddress ((slaveAddress << 1) | 1) { + switch(ic_variant) { + case DS4424_IC: + m_max_ch_reg_addr = REG_OUT3; + break; + case DS4422_IC: + m_max_ch_reg_addr = REG_OUT1; + break; + default: + m_max_ch_reg_addr = REG_OUT3; + break; + } } @@ -68,17 +79,17 @@ //****************************************************************************** -int DS4424::readRaw(int32_t &result, ChannelReg_e channel) +int DS4424::readRaw(int32_t &result, ChannelRegAddr_e chan_addr) { uint8_t value; int ret = DS4424_ERROR; union ds4424_raw_data raw; - if (channel >= REG_OUT0 && channel <= REG_OUT3) - ret = readRegister(channel, value); - + if (chan_addr >= REG_OUT0 && chan_addr <= m_max_ch_reg_addr) + ret = readRegister(chan_addr, value); if (ret != 0) return DS4424_ERROR; + raw.bits = value; result = raw.dx; @@ -88,8 +99,9 @@ } + //****************************************************************************** -int DS4424::writeRaw(int32_t value, ChannelReg_e channel) +int DS4424::writeRaw(int32_t value, ChannelRegAddr_e chan_addr) { #define U8_MAX ((uint8_t)~0U) #define S8_MAX ((int8_t)(U8_MAX>>1)) @@ -97,7 +109,7 @@ int ret = DS4424_ERROR; union ds4424_raw_data raw; - if ((channel >= REG_OUT0 && channel <= REG_OUT3) && + if ((chan_addr >= REG_OUT0 && chan_addr <= m_max_ch_reg_addr) && (value >= S8_MIN && value <= S8_MAX)) { if (value > 0) { raw.source_bit = DS4424_SOURCE_I; @@ -106,7 +118,7 @@ raw.source_bit = DS4424_SINK_I; raw.dx = -value; } - ret = writeRegister(channel, raw.bits); + ret = writeRegister(chan_addr, raw.bits); if (ret != 0) return DS4424_ERROR; @@ -118,45 +130,7 @@ //****************************************************************************** -int DS4424::printRawRegs() -{ - uint8_t value, i; - ChannelReg_e channel; - int ret = DS4424_ERROR; - - for (i = (uint8_t)REG_OUT0; i <= (uint8_t)REG_OUT3; i++) { - channel = (ChannelReg_e)(i); - ret = readRegister(channel, value); - if (ret != 0) - return DS4424_ERROR; - printf("read raw reg[0x%X]=0x%X \r\n", (uint8_t)channel, value); - wait(0.1); - } - return DS4424_NO_ERROR; -} - - -//****************************************************************************** -int DS4424::printRegs() -{ - uint8_t i; - int32_t value; - ChannelReg_e channel; - int ret = DS4424_ERROR; - - for (i = (uint8_t)REG_OUT0; i <= (uint8_t)REG_OUT3; i++) { - channel = (ChannelReg_e)(i); - ret = readRaw(value, channel); - if (ret != 0) - return DS4424_ERROR; - printf("read reg[0x%X]=0x%d \r\n", (uint8_t)channel, value); - } - return DS4424_NO_ERROR; -} - - -//****************************************************************************** -int DS4424::readRegister(ChannelReg_e reg, uint8_t &value) +int DS4424::readRegister(ChannelRegAddr_e reg, uint8_t &value) { int32_t ret; @@ -181,7 +155,7 @@ //****************************************************************************** -int DS4424::writeRegister(ChannelReg_e reg, uint8_t value) +int DS4424::writeRegister(ChannelRegAddr_e reg, uint8_t value) { int32_t ret;