Four Squared
/
SinWave
test00
Fork of test01 by
mcp4725.cpp@2:76f0ff8c3068, 2016-11-09 (annotated)
- Committer:
- zzl5143
- Date:
- Wed Nov 09 17:17:07 2016 +0000
- Revision:
- 2:76f0ff8c3068
- Parent:
- 0:77006df50c28
Sin wave test;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
xWhitfordx | 0:77006df50c28 | 1 | #include "mcp4725.h" |
xWhitfordx | 0:77006df50c28 | 2 | #include "mbed.h" |
xWhitfordx | 0:77006df50c28 | 3 | |
xWhitfordx | 0:77006df50c28 | 4 | MCP4725::MCP4725(PinName sda, PinName scl, BusFrequency bus_frequency, int device_address_bits): _i2c_interface(sda, scl) |
xWhitfordx | 0:77006df50c28 | 5 | { |
xWhitfordx | 0:77006df50c28 | 6 | //Set the frequency |
xWhitfordx | 0:77006df50c28 | 7 | int freq=0; |
xWhitfordx | 0:77006df50c28 | 8 | switch(bus_frequency) |
xWhitfordx | 0:77006df50c28 | 9 | { |
xWhitfordx | 0:77006df50c28 | 10 | case Standard100kHz: |
xWhitfordx | 0:77006df50c28 | 11 | freq = 100000; |
xWhitfordx | 0:77006df50c28 | 12 | break; |
xWhitfordx | 0:77006df50c28 | 13 | case Fast400kHz: |
xWhitfordx | 0:77006df50c28 | 14 | freq = 400000; |
xWhitfordx | 0:77006df50c28 | 15 | break; |
xWhitfordx | 0:77006df50c28 | 16 | case HighSpeed3_4Mhz: |
xWhitfordx | 0:77006df50c28 | 17 | freq = 3400000; |
xWhitfordx | 0:77006df50c28 | 18 | break; |
xWhitfordx | 0:77006df50c28 | 19 | } |
xWhitfordx | 0:77006df50c28 | 20 | _i2c_interface.frequency(freq); |
xWhitfordx | 0:77006df50c28 | 21 | |
xWhitfordx | 0:77006df50c28 | 22 | // Assemble the full I2C device address. |
xWhitfordx | 0:77006df50c28 | 23 | _device_address = 0xC4; // Prime the full device address with the device code. |
xWhitfordx | 0:77006df50c28 | 24 | // _device_address |= (device_address_bits<<1); |
xWhitfordx | 0:77006df50c28 | 25 | } |
xWhitfordx | 0:77006df50c28 | 26 | |
xWhitfordx | 0:77006df50c28 | 27 | int MCP4725::read(enum PowerMode* mode, enum PowerMode* mode_eeprom, int* dac_value, int* dac_value_eeprom, bool* eeprom_write_in_progress) |
xWhitfordx | 0:77006df50c28 | 28 | { |
xWhitfordx | 0:77006df50c28 | 29 | char data[5]; |
xWhitfordx | 0:77006df50c28 | 30 | int result; |
xWhitfordx | 0:77006df50c28 | 31 | |
xWhitfordx | 0:77006df50c28 | 32 | // Read the raw data from the device. |
xWhitfordx | 0:77006df50c28 | 33 | result = _i2c_interface.read(_device_address, data, sizeof(data)/sizeof(*data), false); |
xWhitfordx | 0:77006df50c28 | 34 | |
xWhitfordx | 0:77006df50c28 | 35 | // Parse the raw data, extracting our fields. Refer to MCP4725 ref manual, section 6.2 |
xWhitfordx | 0:77006df50c28 | 36 | if (result == 0) |
xWhitfordx | 0:77006df50c28 | 37 | { |
xWhitfordx | 0:77006df50c28 | 38 | *eeprom_write_in_progress = (data[0] & 0x80)? false:true; |
xWhitfordx | 0:77006df50c28 | 39 | |
xWhitfordx | 0:77006df50c28 | 40 | *mode = (enum PowerMode) ((data[0] & 0x06)>>1); |
xWhitfordx | 0:77006df50c28 | 41 | |
xWhitfordx | 0:77006df50c28 | 42 | *dac_value = (data[1]<<4) + (data[2]>>4); |
xWhitfordx | 0:77006df50c28 | 43 | |
xWhitfordx | 0:77006df50c28 | 44 | *mode_eeprom = (enum PowerMode)((data[3] & 0x60)>>5); |
xWhitfordx | 0:77006df50c28 | 45 | |
xWhitfordx | 0:77006df50c28 | 46 | *dac_value_eeprom = ((data[3] & 0x0F) <<8) + data[4]; |
xWhitfordx | 0:77006df50c28 | 47 | } |
xWhitfordx | 0:77006df50c28 | 48 | |
xWhitfordx | 0:77006df50c28 | 49 | return result; |
xWhitfordx | 0:77006df50c28 | 50 | } |
xWhitfordx | 0:77006df50c28 | 51 | |
xWhitfordx | 0:77006df50c28 | 52 | |
xWhitfordx | 0:77006df50c28 | 53 | |
xWhitfordx | 0:77006df50c28 | 54 | int MCP4725::write(enum PowerMode mode, int dac_value, bool writeToEeprom) |
xWhitfordx | 0:77006df50c28 | 55 | { |
xWhitfordx | 0:77006df50c28 | 56 | char data[3]={0}; |
xWhitfordx | 0:77006df50c28 | 57 | int write_command; |
xWhitfordx | 0:77006df50c28 | 58 | |
xWhitfordx | 0:77006df50c28 | 59 | //Which write command are we to use? |
xWhitfordx | 0:77006df50c28 | 60 | if (writeToEeprom == true) |
xWhitfordx | 0:77006df50c28 | 61 | { |
xWhitfordx | 0:77006df50c28 | 62 | //Write DAC Register and EEPROM |
xWhitfordx | 0:77006df50c28 | 63 | write_command = 3; |
xWhitfordx | 0:77006df50c28 | 64 | } |
xWhitfordx | 0:77006df50c28 | 65 | else |
xWhitfordx | 0:77006df50c28 | 66 | { |
xWhitfordx | 0:77006df50c28 | 67 | //Write DAC Register |
xWhitfordx | 0:77006df50c28 | 68 | write_command = 2; |
xWhitfordx | 0:77006df50c28 | 69 | } |
xWhitfordx | 0:77006df50c28 | 70 | |
xWhitfordx | 0:77006df50c28 | 71 | //Assemble our three bytes of data - Refer to MCP4725 ref manual, section 6. |
xWhitfordx | 0:77006df50c28 | 72 | data[0] = (write_command <<5) | ((int)mode<<1); |
xWhitfordx | 0:77006df50c28 | 73 | data[1] = (dac_value>>4); |
xWhitfordx | 0:77006df50c28 | 74 | data[2] = (dac_value<<4); |
xWhitfordx | 0:77006df50c28 | 75 | |
xWhitfordx | 0:77006df50c28 | 76 | // Now write them to the device. |
xWhitfordx | 0:77006df50c28 | 77 | return _i2c_interface.write(_device_address, data, sizeof(data)/sizeof(*data), false); |
xWhitfordx | 0:77006df50c28 | 78 | } |