TI DAC library for DAC5578 (8bit) / DAC6578 (10bit) / DAC7578 (12bit)

Committer:
okini3939
Date:
Mon May 14 04:23:31 2018 +0000
Revision:
0:7ebbac9efdb4
1st build

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:7ebbac9efdb4 1 /*
okini3939 0:7ebbac9efdb4 2 * DAC5578 (8bit)
okini3939 0:7ebbac9efdb4 3 * DAC6578 (10bit)
okini3939 0:7ebbac9efdb4 4 * DAC7578 (12bit)
okini3939 0:7ebbac9efdb4 5 */
okini3939 0:7ebbac9efdb4 6
okini3939 0:7ebbac9efdb4 7 #include "DACx578.h"
okini3939 0:7ebbac9efdb4 8
okini3939 0:7ebbac9efdb4 9 DACx578::DACx578 (PinName sda, PinName scl, int addr, enum DEVICE device) : _i2c(sda, scl) {
okini3939 0:7ebbac9efdb4 10 _addr = addr;
okini3939 0:7ebbac9efdb4 11 _device = device;
okini3939 0:7ebbac9efdb4 12 init();
okini3939 0:7ebbac9efdb4 13 }
okini3939 0:7ebbac9efdb4 14
okini3939 0:7ebbac9efdb4 15 DACx578::DACx578 (I2C &i2c, int addr, enum DEVICE device) : _i2c(i2c) {
okini3939 0:7ebbac9efdb4 16 _addr = addr;
okini3939 0:7ebbac9efdb4 17 _device = device;
okini3939 0:7ebbac9efdb4 18 init();
okini3939 0:7ebbac9efdb4 19 }
okini3939 0:7ebbac9efdb4 20
okini3939 0:7ebbac9efdb4 21 int DACx578::init () {
okini3939 0:7ebbac9efdb4 22 char buf[3];
okini3939 0:7ebbac9efdb4 23
okini3939 0:7ebbac9efdb4 24 buf[0] = 0x70; // reset
okini3939 0:7ebbac9efdb4 25 buf[1] = 0x00;
okini3939 0:7ebbac9efdb4 26 buf[2] = 0x00;
okini3939 0:7ebbac9efdb4 27 if (_i2c.write(_addr, buf, 3)) return -1;
okini3939 0:7ebbac9efdb4 28 wait_ms(10);
okini3939 0:7ebbac9efdb4 29
okini3939 0:7ebbac9efdb4 30 buf[0] = 0x40; // power on
okini3939 0:7ebbac9efdb4 31 buf[1] = 0x1f;
okini3939 0:7ebbac9efdb4 32 buf[2] = 0xe0;
okini3939 0:7ebbac9efdb4 33 if (_i2c.write(_addr, buf, 3)) return -1;
okini3939 0:7ebbac9efdb4 34 /*
okini3939 0:7ebbac9efdb4 35 buf[0] = 0x60; // ignore LDAC
okini3939 0:7ebbac9efdb4 36 buf[1] = 0xff;
okini3939 0:7ebbac9efdb4 37 buf[2] = 0x00;
okini3939 0:7ebbac9efdb4 38 if (_i2c.write(_addr, buf, 3)) return -1;
okini3939 0:7ebbac9efdb4 39 */
okini3939 0:7ebbac9efdb4 40 return 0;
okini3939 0:7ebbac9efdb4 41 }
okini3939 0:7ebbac9efdb4 42
okini3939 0:7ebbac9efdb4 43 int DACx578::write (int channel, int value, int ldac) {
okini3939 0:7ebbac9efdb4 44 char buf[3];
okini3939 0:7ebbac9efdb4 45
okini3939 0:7ebbac9efdb4 46 buf[0] = (ldac ? 0x30 : 0x00) | (channel & 0x0f); // Individual Software LDAC / Input Register
okini3939 0:7ebbac9efdb4 47 buf[1] = (value >> _device) & 0xff;
okini3939 0:7ebbac9efdb4 48 buf[2] = ((8 - value) << _device) & 0xff;
okini3939 0:7ebbac9efdb4 49 return _i2c.write(_addr, buf, 3);
okini3939 0:7ebbac9efdb4 50 }
okini3939 0:7ebbac9efdb4 51
okini3939 0:7ebbac9efdb4 52 int DACx578::ldacWrite (int channel, int value) {
okini3939 0:7ebbac9efdb4 53 char buf[3];
okini3939 0:7ebbac9efdb4 54
okini3939 0:7ebbac9efdb4 55 buf[0] = 0x20 | (channel & 0x0f); // Global Software LDAC
okini3939 0:7ebbac9efdb4 56 buf[1] = (value >> _device) & 0xff;
okini3939 0:7ebbac9efdb4 57 buf[2] = ((8 - value) << _device) & 0xff;
okini3939 0:7ebbac9efdb4 58 return _i2c.write(_addr, buf, 3);
okini3939 0:7ebbac9efdb4 59 }
okini3939 0:7ebbac9efdb4 60
okini3939 0:7ebbac9efdb4 61 int DACx578::update (int channel) {
okini3939 0:7ebbac9efdb4 62 char buf[3];
okini3939 0:7ebbac9efdb4 63
okini3939 0:7ebbac9efdb4 64 buf[0] = 0x10 | (channel & 0x0f); // Register Update
okini3939 0:7ebbac9efdb4 65 buf[1] = 0;
okini3939 0:7ebbac9efdb4 66 buf[2] = 0;
okini3939 0:7ebbac9efdb4 67 return _i2c.write(_addr, buf, 3);
okini3939 0:7ebbac9efdb4 68 }