DAC Lib
Dependents: Cube_Mini_Solution Cube_Mini_Solution
mcp4725.h
- Committer:
- donalm
- Date:
- 2013-11-07
- Revision:
- 5:3e6ffce1eea2
- Parent:
- 4:e0d667c9b23b
- Child:
- 6:0e58d3068eb8
File content as of revision 5:3e6ffce1eea2:
#ifndef MCP_4725_H #define MCP_4725_H #include "stdbool.h" #include "mbed.h" #include "I2C.h" /** MCP4725 class. * Used for interfacing with a mcp4725 12-Bit 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. * * Note: There is an accompanying test suite program "MCP_4725_Library_Test" that can be used to test this library. * */ class MCP4725 { 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 }; /** 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 sda I2C data line pin * @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. */ MCP4725(PinName sda, PinName scl, BusFrequency bus_frequency, 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); protected: /** mbed I2C interface driver. */ I2C _i2c_interface; /** The full i2c device address. */ int _device_address; }; #endif