hello
Fork of MCP4725 by
Diff: mcp4725.cpp
- Revision:
- 7:f5e11acbe221
- Parent:
- 6:35e3e80b804c
--- a/mcp4725.cpp Tue Apr 01 04:45:16 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -#include "mcp4725.h" -#include "mbed.h" - -MCP4725::MCP4725(PinName sda, PinName scl, BusFrequency bus_frequency, int device_address_bits): _i2c_interface(sda, scl) -{ - //Set the frequency - int freq=0; - switch(bus_frequency) - { - case Standard100kHz: - freq = 100000; - break; - case Fast400kHz: - freq = 400000; - break; - case HighSpeed3_4Mhz: - freq = 3400000; - break; - } - _i2c_interface.frequency(freq); - - // Assemble the full I2C device address. - _device_address = 0xC4; // Prime the full device address with the device code. - //_device_address |= (device_address_bits<<1); -} - -int MCP4725::read(enum PowerMode* mode, enum PowerMode* mode_eeprom, int* dac_value, int* dac_value_eeprom, bool* eeprom_write_in_progress) -{ - char data[5]; - int result; - - // Read the raw data from the device. - result = _i2c_interface.read(_device_address, data, sizeof(data)/sizeof(*data), false); - - // Parse the raw data, extracting our fields. Refer to MCP4725 ref manual, section 6.2 - if (result == 0) - { - *eeprom_write_in_progress = (data[0] & 0x80)? false:true; - - *mode = (enum PowerMode) ((data[0] & 0x06)>>1); - - *dac_value = (data[1]<<4) + (data[2]>>4); - - *mode_eeprom = (enum PowerMode)((data[3] & 0x60)>>5); - - *dac_value_eeprom = ((data[3] & 0x0F) <<8) + data[4]; - } - - return result; -} - - - -int MCP4725::write(enum PowerMode mode, int dac_value, bool writeToEeprom) -{ - char data[3]={0}; - int write_command; - - //Which write command are we to use? - if (writeToEeprom == true) - { - //Write DAC Register and EEPROM - write_command = 3; - } - else - { - //Write DAC Register - write_command = 2; - } - - //Assemble our three bytes of data - Refer to MCP4725 ref manual, section 6. - data[0] = (write_command <<5) | ((int)mode<<1); - data[1] = (dac_value>>4); - data[2] = (dac_value<<4); - - // Now write them to the device. - return _i2c_interface.write(_device_address, data, sizeof(data)/sizeof(*data), false); -} \ No newline at end of file