Classes to interact with our Mbed.
Dependents: MCP4725I2Ctest MCP4725Translator
Fork of MCP4728 by
mcp4725.h@7:05ccdd6cebf8, 2016-06-15 (annotated)
- Committer:
- katrijnverhasselt
- Date:
- Wed Jun 15 10:52:43 2016 +0000
- Revision:
- 7:05ccdd6cebf8
- Parent:
- 5:fa31978934fd
This is now unused.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
katrijnverhasselt | 5:fa31978934fd | 1 | #ifndef MCP_4725_H |
katrijnverhasselt | 5:fa31978934fd | 2 | #define MCP_4725_H |
katrijnverhasselt | 5:fa31978934fd | 3 | |
katrijnverhasselt | 5:fa31978934fd | 4 | |
katrijnverhasselt | 5:fa31978934fd | 5 | #include "stdbool.h" |
katrijnverhasselt | 5:fa31978934fd | 6 | |
katrijnverhasselt | 5:fa31978934fd | 7 | #include "I2CInterface.h" |
katrijnverhasselt | 5:fa31978934fd | 8 | #include "DACInterface.h" |
katrijnverhasselt | 5:fa31978934fd | 9 | |
katrijnverhasselt | 5:fa31978934fd | 10 | #define VERSION_MCP4725_HDR "0.20" |
katrijnverhasselt | 5:fa31978934fd | 11 | |
katrijnverhasselt | 5:fa31978934fd | 12 | /** MCP4725 class. |
katrijnverhasselt | 5:fa31978934fd | 13 | * Used for interfacing with a mcp4725 12-Bit Digital-to-Analog Converter. |
katrijnverhasselt | 5:fa31978934fd | 14 | * To convert between the 12bit dac_value and Vout, use the following formula: dac_value = (Vout*4096/Vref), where Vout is |
katrijnverhasselt | 5:fa31978934fd | 15 | * the desired output analog voltage, Vref is the voltage connected to the Vdd pin of the device. Typically Vdd will be 3.3volts. |
katrijnverhasselt | 5:fa31978934fd | 16 | * |
katrijnverhasselt | 5:fa31978934fd | 17 | * Note: There is an accompanying test suite program "MCP_4725_Library_Test" that can be used to test this library. |
katrijnverhasselt | 5:fa31978934fd | 18 | |
katrijnverhasselt | 5:fa31978934fd | 19 | * WB copied from Users » donalm » Code » |
katrijnverhasselt | 5:fa31978934fd | 20 | * removed the I2C settings etc. replaced to pointer to I2CInterface class. |
katrijnverhasselt | 5:fa31978934fd | 21 | * for read by value instead of by pointer |
katrijnverhasselt | 5:fa31978934fd | 22 | * ver 0.1 : setDAC , get DAC working |
katrijnverhasselt | 5:fa31978934fd | 23 | * ver 0.2 : implemented setVoltage, getVoltage |
katrijnverhasselt | 5:fa31978934fd | 24 | * (C) Wim Beaumont Universiteit Antwerpen 2015 |
katrijnverhasselt | 5:fa31978934fd | 25 | * |
katrijnverhasselt | 5:fa31978934fd | 26 | */ |
katrijnverhasselt | 5:fa31978934fd | 27 | class MCP4725 : public DACInterface { |
katrijnverhasselt | 5:fa31978934fd | 28 | |
katrijnverhasselt | 5:fa31978934fd | 29 | public: |
katrijnverhasselt | 5:fa31978934fd | 30 | /** The device supports two types of power modes: normal and power-down. In normal mode the device |
katrijnverhasselt | 5:fa31978934fd | 31 | * operates a normal digital to analog conversion. In power-down mode all digitial to analog |
katrijnverhasselt | 5:fa31978934fd | 32 | * conversion is stopped, resulting in the device using less power (typically 60nA). Also, in power |
katrijnverhasselt | 5:fa31978934fd | 33 | * down mode Vout will be pulled to ground using either a 1k, 100k or 500k ohm internal resistors. */ |
katrijnverhasselt | 5:fa31978934fd | 34 | enum PowerMode { |
katrijnverhasselt | 5:fa31978934fd | 35 | /** In normal mode the device operates a normal D2A conversion. */ |
katrijnverhasselt | 5:fa31978934fd | 36 | Normal=0, |
katrijnverhasselt | 5:fa31978934fd | 37 | /** Enter the device into a power down mode, and pull Vout to ground using an internal 1k resistor. */ |
katrijnverhasselt | 5:fa31978934fd | 38 | PowerDown1k=1, |
katrijnverhasselt | 5:fa31978934fd | 39 | /** Enter the device into a power down mode, and pull Vout to ground using an internal 100k resistor. */ |
katrijnverhasselt | 5:fa31978934fd | 40 | PowerDown100k=2, |
katrijnverhasselt | 5:fa31978934fd | 41 | /** Enter the device into a power down mode, and pull Vout to ground using an internal 500k resistor. */ |
katrijnverhasselt | 5:fa31978934fd | 42 | PowerDown500k=3 |
katrijnverhasselt | 5:fa31978934fd | 43 | }; |
katrijnverhasselt | 5:fa31978934fd | 44 | |
katrijnverhasselt | 5:fa31978934fd | 45 | /** The device supports 3 different I2C bus frequencies.*/ |
katrijnverhasselt | 5:fa31978934fd | 46 | enum BusFrequency { |
katrijnverhasselt | 5:fa31978934fd | 47 | /** Standard 100kHz bus. */ |
katrijnverhasselt | 5:fa31978934fd | 48 | Standard100kHz, |
katrijnverhasselt | 5:fa31978934fd | 49 | /** Fast 400kHz bus. */ |
katrijnverhasselt | 5:fa31978934fd | 50 | Fast400kHz, |
katrijnverhasselt | 5:fa31978934fd | 51 | /** High Speed 3.4Mhz bus. WARNING: the test suite fails for the mbed LPC1768 when this frequency is selected - not tested on other platforms.*/ |
katrijnverhasselt | 5:fa31978934fd | 52 | HighSpeed3_4Mhz |
katrijnverhasselt | 5:fa31978934fd | 53 | }; |
katrijnverhasselt | 5:fa31978934fd | 54 | |
katrijnverhasselt | 5:fa31978934fd | 55 | /** Create an mcp4725 I2C interface |
katrijnverhasselt | 5:fa31978934fd | 56 | * |
katrijnverhasselt | 5:fa31978934fd | 57 | * @param i2cinterface pointer to the MBED I2C interface |
katrijnverhasselt | 5:fa31978934fd | 58 | * @param scl I2C clock line pin |
katrijnverhasselt | 5:fa31978934fd | 59 | * @param bus_frequency the frequency at which the I2C bus is running. |
katrijnverhasselt | 5:fa31978934fd | 60 | * @param device_address_bits The 3bit address bits of the device. |
katrijnverhasselt | 5:fa31978934fd | 61 | */ |
katrijnverhasselt | 5:fa31978934fd | 62 | MCP4725(I2CInterface* i2cinterface, int device_address_bits, float Vdd_); |
katrijnverhasselt | 5:fa31978934fd | 63 | |
katrijnverhasselt | 5:fa31978934fd | 64 | |
katrijnverhasselt | 5:fa31978934fd | 65 | /* Update the power mode and DAC value. |
katrijnverhasselt | 5:fa31978934fd | 66 | * |
katrijnverhasselt | 5:fa31978934fd | 67 | * @param mode The Power mode to set the device into. |
katrijnverhasselt | 5:fa31978934fd | 68 | * @param dac_value The 12bit dac register data value. |
katrijnverhasselt | 5:fa31978934fd | 69 | * @param writeToEeprom True if the config is to be stored |
katrijnverhasselt | 5:fa31978934fd | 70 | * in eeprom, otherwise false |
katrijnverhasselt | 5:fa31978934fd | 71 | * |
katrijnverhasselt | 5:fa31978934fd | 72 | * @returns |
katrijnverhasselt | 5:fa31978934fd | 73 | * 0 on success, |
katrijnverhasselt | 5:fa31978934fd | 74 | * non-0 on failure |
katrijnverhasselt | 5:fa31978934fd | 75 | */ |
katrijnverhasselt | 5:fa31978934fd | 76 | int write(enum PowerMode mode, int dac_value, bool writeToEeprom); |
katrijnverhasselt | 5:fa31978934fd | 77 | |
katrijnverhasselt | 5:fa31978934fd | 78 | |
katrijnverhasselt | 5:fa31978934fd | 79 | /** Read the contents of the dac register, the contents of eeprom, and if an eeprom write is currently active. |
katrijnverhasselt | 5:fa31978934fd | 80 | * |
katrijnverhasselt | 5:fa31978934fd | 81 | * @param mode Pointer to variable to store the current power mode. |
katrijnverhasselt | 5:fa31978934fd | 82 | * @param mode_eeprom Pointer to variable to store the power mode as is stored in eeprom. |
katrijnverhasselt | 5:fa31978934fd | 83 | * @param dac_value Pointer to variable to store the current dac value. |
katrijnverhasselt | 5:fa31978934fd | 84 | * @param dac_value_eeprom Pointer to variable to store the dac value as is stored in eeprom. |
katrijnverhasselt | 5:fa31978934fd | 85 | * @param eeprom_write_in_progress Pointer to variable to store the current eeprom write status. |
katrijnverhasselt | 5:fa31978934fd | 86 | * |
katrijnverhasselt | 5:fa31978934fd | 87 | * @returns |
katrijnverhasselt | 5:fa31978934fd | 88 | * 0 on success, |
katrijnverhasselt | 5:fa31978934fd | 89 | * non-0 on failure |
katrijnverhasselt | 5:fa31978934fd | 90 | */ |
katrijnverhasselt | 5:fa31978934fd | 91 | int read(enum PowerMode& mode, enum PowerMode& mode_eeprom, int& dac_value, int& dac_value_eeprom, bool& eeprom_write_in_progress); |
katrijnverhasselt | 5:fa31978934fd | 92 | |
katrijnverhasselt | 5:fa31978934fd | 93 | |
katrijnverhasselt | 5:fa31978934fd | 94 | /** no action as read always read from the device so returns always 0 */ |
katrijnverhasselt | 5:fa31978934fd | 95 | virtual int update() { return 0;} |
katrijnverhasselt | 5:fa31978934fd | 96 | virtual int getDACvalue(int &value, int ch=0); |
katrijnverhasselt | 5:fa31978934fd | 97 | virtual int setVoltage (float voltage, int ch=0); |
katrijnverhasselt | 5:fa31978934fd | 98 | virtual int setDACvalue( int value, int ch=0); |
katrijnverhasselt | 5:fa31978934fd | 99 | virtual int getVoltage(float &voltage, int ch=0); |
katrijnverhasselt | 5:fa31978934fd | 100 | |
katrijnverhasselt | 5:fa31978934fd | 101 | protected: |
katrijnverhasselt | 5:fa31978934fd | 102 | /** mbed I2C interface driver. */ |
katrijnverhasselt | 5:fa31978934fd | 103 | I2CInterface* _i2c_interface; |
katrijnverhasselt | 5:fa31978934fd | 104 | /** The full i2c device address. */ |
katrijnverhasselt | 5:fa31978934fd | 105 | int _device_address; |
katrijnverhasselt | 5:fa31978934fd | 106 | float Vdd; |
katrijnverhasselt | 5:fa31978934fd | 107 | }; |
katrijnverhasselt | 5:fa31978934fd | 108 | |
katrijnverhasselt | 5:fa31978934fd | 109 | #endif |