TI DAC library for DAC5578 (8bit) / DAC6578 (10bit) / DAC7578 (12bit)
DACx578.cpp@0:7ebbac9efdb4, 2018-05-14 (annotated)
- Committer:
- okini3939
- Date:
- Mon May 14 04:23:31 2018 +0000
- Revision:
- 0:7ebbac9efdb4
1st build
Who changed what in which revision?
User | Revision | Line number | New 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 | } |