General usable MCP4728 quad DAC implementation only limited function has to be used together with the DevInterface lib
Dependents: mbedSerialInterface_talkback2 MCP4728test mbedSerialInterface_sequencer
mcp4728.h
- Committer:
- wbeaumont
- Date:
- 2015-10-23
- Revision:
- 0:7a0ebc527fb9
- Child:
- 1:cd7c70a46739
File content as of revision 0:7a0ebc527fb9:
#ifndef MCP_4728_H #define MCP_4728_H #include "stdbool.h" #include "dev_interface_def.h" #include "I2CInterface.h" #include "DACInterface.h" #define VERSION_MCP4728_HDR "0.01" /** MCP4728 class. * Used for interfacing with a mcp4728 12-Bit QUAD Digital-to-Analog Converter. * To convert between the 12bit dac_value and Vout, use the following formula: dac_value = (Vout*4096/Vref), where Vout is * the desired output analog voltage, Vref is the voltage connected to the Vdd pin of the device. Typically Vdd will be 3.3volts. * * (C) Wim Beaumont Universiteit Antwerpen 2015 * */ class MCP4728 : public DACInterface { float vref ; public: /** The device supports two types of power modes: normal and power-down. In normal mode the device * operates a normal digital to analog conversion. In power-down mode all digitial to analog * conversion is stopped, resulting in the device using less power (typically 60nA). Also, in power * down mode Vout will be pulled to ground using either a 1k, 100k or 500k ohm internal resistors. */ enum PowerMode { /** In normal mode the device operates a normal D2A conversion. */ Normal=0, /** Enter the device into a power down mode, and pull Vout to ground using an internal 1k resistor. */ PowerDown1k=1, /** Enter the device into a power down mode, and pull Vout to ground using an internal 100k resistor. */ PowerDown100k=2, /** Enter the device into a power down mode, and pull Vout to ground using an internal 500k resistor. */ PowerDown500k=3 }; enum VrefMode { ExternRef=0, // == VDD InternRef=1 }; enum GainMode { GainX1=0, GainX2=1 }; typedef struct MCP4728ChCfg{ GainMode gain; VrefMode vref; PowerMode pwr; } MCP4728ChCfgdummy; MCP4728ChCfg ChCfg[4]; /** The device supports 3 different I2C bus frequencies.*/ enum BusFrequency { /** Standard 100kHz bus. */ Standard100kHz, /** Fast 400kHz bus. */ Fast400kHz, /** High Speed 3.4Mhz bus. WARNING: the test suite fails for the mbed LPC1768 when this frequency is selected - not tested on other platforms.*/ HighSpeed3_4Mhz }; /** Create an mcp4725 I2C interface * * @param i2cinterface pointer to the MBED I2C interface * @param scl I2C clock line pin * @param bus_frequency the frequency at which the I2C bus is running. * @param device_address_bits The 3bit address bits of the device. */ MCP4728(I2CInterface* i2cinterface, int device_address_bits); /* Update the power mode and DAC value. * * @param mode The Power mode to set the device into. * @param dac_value The 12bit dac register data value. * @param writeToEeprom True if the config is to be stored * in eeprom, otherwise false * * @returns * 0 on success, * non-0 on failure */ int write(enum PowerMode mode, int dac_value, bool writeToEeprom); /** Read the contents of the dac register, the contents of eeprom, and if an eeprom write is currently active. * * @param mode Pointer to variable to store the current power mode. * @param mode_eeprom Pointer to variable to store the power mode as is stored in eeprom. * @param dac_value Pointer to variable to store the current dac value. * @param dac_value_eeprom Pointer to variable to store the dac value as is stored in eeprom. * @param eeprom_write_in_progress Pointer to variable to store the current eeprom write status. * * @returns * 0 on success, * non-0 on failure */ int read(enum PowerMode& mode, enum PowerMode& mode_eeprom, int& dac_value, int& dac_value_eeprom, bool& eeprom_write_in_progress); virtual int getDACvalue(int &value, int ch=0); virtual int setDACvalue( int value, int ch=0); protected: /** mbed I2C interface driver. */ I2CInterface* _i2c_interface; /** The full i2c device address. */ int _device_address; }; #endif