test00

Dependencies:   MCP4725 mbed

Fork of test01 by Four Squared

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?

UserRevisionLine numberNew 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 }