AD5668 Digital to Analog Converter
ad5668.h@1:b54ba779d19a, 2017-04-06 (annotated)
- Committer:
- jonebuckman
- Date:
- Thu Apr 06 12:25:45 2017 +0000
- Revision:
- 1:b54ba779d19a
- Parent:
- 0:55d636c5638a
- Child:
- 2:25d6955d0d38
Update doxy and added methods.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jonebuckman | 0:55d636c5638a | 1 | /** |
jonebuckman | 0:55d636c5638a | 2 | * @file AD5668.h |
jonebuckman | 0:55d636c5638a | 3 | * |
jonebuckman | 0:55d636c5638a | 4 | * @author Jon Buckman |
jonebuckman | 0:55d636c5638a | 5 | * |
jonebuckman | 0:55d636c5638a | 6 | * @section LICENSE |
jonebuckman | 0:55d636c5638a | 7 | * |
jonebuckman | 0:55d636c5638a | 8 | * Copyright (c) 2017 Jon Buckman |
jonebuckman | 0:55d636c5638a | 9 | * |
jonebuckman | 0:55d636c5638a | 10 | * This program is free software: you can redistribute it and/or modify |
jonebuckman | 0:55d636c5638a | 11 | * it under the terms of the GNU General Public License as published by |
jonebuckman | 0:55d636c5638a | 12 | * the Free Software Foundation, either version 3 of the License, or |
jonebuckman | 0:55d636c5638a | 13 | * (at your option) any later version. |
jonebuckman | 0:55d636c5638a | 14 | * |
jonebuckman | 0:55d636c5638a | 15 | * This program is distributed in the hope that it will be useful, |
jonebuckman | 0:55d636c5638a | 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
jonebuckman | 0:55d636c5638a | 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
jonebuckman | 0:55d636c5638a | 18 | * GNU General Public License for more details. |
jonebuckman | 0:55d636c5638a | 19 | * |
jonebuckman | 0:55d636c5638a | 20 | * You should have received a copy of the GNU General Public License |
jonebuckman | 0:55d636c5638a | 21 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
jonebuckman | 0:55d636c5638a | 22 | * |
jonebuckman | 0:55d636c5638a | 23 | * The above copyright notice and this permission notice shall be included in |
jonebuckman | 0:55d636c5638a | 24 | * all copies or substantial portions of the Software. |
jonebuckman | 0:55d636c5638a | 25 | * |
jonebuckman | 0:55d636c5638a | 26 | * @section DESCRIPTION |
jonebuckman | 0:55d636c5638a | 27 | * |
jonebuckman | 0:55d636c5638a | 28 | * AD5668 Digital to Analog Converter from Analog Devices. |
jonebuckman | 0:55d636c5638a | 29 | * |
jonebuckman | 0:55d636c5638a | 30 | * Datasheet: |
jonebuckman | 0:55d636c5638a | 31 | * |
jonebuckman | 0:55d636c5638a | 32 | * http://www.analog.com/media/en/technical-documentation/data-sheets/AD5668.pdf |
jonebuckman | 0:55d636c5638a | 33 | * |
jonebuckman | 1:b54ba779d19a | 34 | * Tie LDAC and CLR pins to VDD if not being used. |
jonebuckman | 1:b54ba779d19a | 35 | * |
jonebuckman | 0:55d636c5638a | 36 | * Example: |
jonebuckman | 0:55d636c5638a | 37 | * @code |
jonebuckman | 0:55d636c5638a | 38 | * #include "mbed.h" |
jonebuckman | 0:55d636c5638a | 39 | * #include "AD5668.h" |
jonebuckman | 0:55d636c5638a | 40 | * |
jonebuckman | 0:55d636c5638a | 41 | * Serial pc(USBTX, USBRX); // tx, rx |
jonebuckman | 0:55d636c5638a | 42 | * |
jonebuckman | 0:55d636c5638a | 43 | * AD5668 dac(D11, D12, D13, D10); // mosi, miso, sck, cs |
jonebuckman | 0:55d636c5638a | 44 | * |
jonebuckman | 0:55d636c5638a | 45 | * int main() { |
jonebuckman | 0:55d636c5638a | 46 | * while (1) { |
jonebuckman | 0:55d636c5638a | 47 | * for (int i = 0; i < 65536; i+=10) { |
jonebuckman | 0:55d636c5638a | 48 | * dac.AD5668_WRITE_INPUT_N_UPDATE_N(AD5668_ADDR_DAC_A, i); |
jonebuckman | 0:55d636c5638a | 49 | * pc.printf("%d,", i); |
jonebuckman | 0:55d636c5638a | 50 | * wait(.01); |
jonebuckman | 0:55d636c5638a | 51 | * } |
jonebuckman | 0:55d636c5638a | 52 | * } |
jonebuckman | 0:55d636c5638a | 53 | * } |
jonebuckman | 0:55d636c5638a | 54 | * @endcode |
jonebuckman | 0:55d636c5638a | 55 | */ |
jonebuckman | 0:55d636c5638a | 56 | |
jonebuckman | 0:55d636c5638a | 57 | #ifndef __AD5668_H__ |
jonebuckman | 0:55d636c5638a | 58 | #define __AD5668_H__ |
jonebuckman | 0:55d636c5638a | 59 | |
jonebuckman | 0:55d636c5638a | 60 | /** |
jonebuckman | 0:55d636c5638a | 61 | * Includes |
jonebuckman | 0:55d636c5638a | 62 | */ |
jonebuckman | 0:55d636c5638a | 63 | #include "mbed.h" |
jonebuckman | 0:55d636c5638a | 64 | |
jonebuckman | 0:55d636c5638a | 65 | /** |
jonebuckman | 0:55d636c5638a | 66 | * Defines |
jonebuckman | 0:55d636c5638a | 67 | */ |
jonebuckman | 0:55d636c5638a | 68 | /* AD5668 Input Register */ |
jonebuckman | 0:55d636c5638a | 69 | #define AD5668_CMD(x) ((0x0000000F & (unsigned int)(x)) << 24) |
jonebuckman | 0:55d636c5638a | 70 | #define AD5668_ADDR(x) ((0x0000000F & (unsigned int)(x)) << 20) |
jonebuckman | 0:55d636c5638a | 71 | #define AD5628_DATA_BITS(x) ((0x000FFFFF & (unsigned int)(x)) << 8) |
jonebuckman | 0:55d636c5638a | 72 | #define AD5648_DATA_BITS(x) ((0x000FFFFF & (unsigned int)(x)) << 6) |
jonebuckman | 0:55d636c5638a | 73 | #define AD5668_DATA_BITS(x) ((0x000FFFFF & (unsigned int)(x)) << 4) |
jonebuckman | 0:55d636c5638a | 74 | |
jonebuckman | 0:55d636c5638a | 75 | /* Command Definitions (AD5668_COMMAND(x) options) */ |
jonebuckman | 0:55d636c5638a | 76 | #define AD5668_CMD_WRITE_INPUT_N 0 // Write to Input Register n. |
jonebuckman | 0:55d636c5638a | 77 | #define AD5668_CMD_UPDATE_DAC_N 1 // Update DAC Register n. |
jonebuckman | 0:55d636c5638a | 78 | #define AD5668_CMD_WRITE_INPUT_N_UPDATE_ALL 2 // Write to Input Register n, update all. |
jonebuckman | 0:55d636c5638a | 79 | #define AD5668_CMD_WRITE_INPUT_N_UPDATE_N 3 // Write to and update DAC Channel n. |
jonebuckman | 0:55d636c5638a | 80 | #define AD5668_CMD_POWERDOWN 4 // Power down/power up DAC. |
jonebuckman | 0:55d636c5638a | 81 | #define AD5668_CMD_LOAD_CLEAR_CODE 5 // Load clear code register. |
jonebuckman | 0:55d636c5638a | 82 | #define AD5668_CMD_LOAD_LDAC_REG 6 // Load LDAC register. |
jonebuckman | 0:55d636c5638a | 83 | #define AD5668_CMD_RESET 7 // Reset (power-on reset) |
jonebuckman | 0:55d636c5638a | 84 | #define AD5668_CMD_SET_INT_REF 8 // Set up internal REF register. |
jonebuckman | 0:55d636c5638a | 85 | |
jonebuckman | 0:55d636c5638a | 86 | /* Address Commands (AD5668_ADDRESS(x) options) */ |
jonebuckman | 0:55d636c5638a | 87 | #define AD5668_ADDR_DAC_A 0x00 //DAC A |
jonebuckman | 0:55d636c5638a | 88 | #define AD5668_ADDR_DAC_B 0x01 //DAC B |
jonebuckman | 0:55d636c5638a | 89 | #define AD5668_ADDR_DAC_C 0x02 //DAC C |
jonebuckman | 0:55d636c5638a | 90 | #define AD5668_ADDR_DAC_D 0x03 //DAC D |
jonebuckman | 0:55d636c5638a | 91 | #define AD5668_ADDR_DAC_E 0x04 //DAC E |
jonebuckman | 0:55d636c5638a | 92 | #define AD5668_ADDR_DAC_F 0x05 //DAC F |
jonebuckman | 0:55d636c5638a | 93 | #define AD5668_ADDR_DAC_G 0x06 //DAC G |
jonebuckman | 0:55d636c5638a | 94 | #define AD5668_ADDR_DAC_H 0x07 //DAC H |
jonebuckman | 0:55d636c5638a | 95 | #define AD5668_ADDR_DAC_ALL 0x0F //All DACs |
jonebuckman | 0:55d636c5638a | 96 | |
jonebuckman | 0:55d636c5638a | 97 | /* Internal Reference Register */ |
jonebuckman | 0:55d636c5638a | 98 | #define AD5668_INT_REF_OFF 0 |
jonebuckman | 0:55d636c5638a | 99 | #define AD5668_INT_REF_ON 1 |
jonebuckman | 0:55d636c5638a | 100 | |
jonebuckman | 0:55d636c5638a | 101 | /* Power-Down Modes of Operation */ |
jonebuckman | 0:55d636c5638a | 102 | #define AD5668_POWER_MODE(x) ((0x03 & (unsigned short) (x)) << 8) |
jonebuckman | 0:55d636c5638a | 103 | |
jonebuckman | 0:55d636c5638a | 104 | #define AD5668_PWRDN_NONE 0 // Normal operation |
jonebuckman | 0:55d636c5638a | 105 | #define AD5668_PWRDN_1K 1 // 1 KOhm to GND (Power-down mode) |
jonebuckman | 0:55d636c5638a | 106 | #define AD5668_PWRDN_100K 2 // 100 KOhm to GND (Power-down mode) |
jonebuckman | 0:55d636c5638a | 107 | #define AD5668_PWRDN_3STATE 3 // Three-state (Power-down mode) |
jonebuckman | 0:55d636c5638a | 108 | |
jonebuckman | 0:55d636c5638a | 109 | /* Clear Code Function */ |
jonebuckman | 0:55d636c5638a | 110 | #define AD5668_CODE_0X0000 0 |
jonebuckman | 0:55d636c5638a | 111 | #define AD5668_CODE_0X8000 1 |
jonebuckman | 0:55d636c5638a | 112 | #define AD5668_CODE_0XFFFF 2 |
jonebuckman | 0:55d636c5638a | 113 | #define AD5668_CODE_NOP 3 |
jonebuckman | 0:55d636c5638a | 114 | |
jonebuckman | 0:55d636c5638a | 115 | /* SPI */ |
jonebuckman | 0:55d636c5638a | 116 | #define AD5668_SPI_MAX_DATA_RATE 50000000 |
jonebuckman | 0:55d636c5638a | 117 | |
jonebuckman | 0:55d636c5638a | 118 | /** |
jonebuckman | 0:55d636c5638a | 119 | * AD5668 Digital to Analog Converter from Analog Devices. |
jonebuckman | 0:55d636c5638a | 120 | */ |
jonebuckman | 0:55d636c5638a | 121 | class AD5668 { |
jonebuckman | 0:55d636c5638a | 122 | |
jonebuckman | 0:55d636c5638a | 123 | public: |
jonebuckman | 0:55d636c5638a | 124 | |
jonebuckman | 0:55d636c5638a | 125 | /** |
jonebuckman | 0:55d636c5638a | 126 | * Constructor. |
jonebuckman | 0:55d636c5638a | 127 | * |
jonebuckman | 0:55d636c5638a | 128 | * @param mosi mbed pin to use for MOSI line of SPI interface. |
jonebuckman | 0:55d636c5638a | 129 | * @param miso mbed pin to use for MISO line of SPI interface. |
jonebuckman | 0:55d636c5638a | 130 | * @param sck mbed pin to use for SCK line of SPI interface. |
jonebuckman | 0:55d636c5638a | 131 | * @param csn mbed pin to use for not chip select line of SPI interface. |
jonebuckman | 0:55d636c5638a | 132 | */ |
jonebuckman | 0:55d636c5638a | 133 | AD5668(PinName mosi, PinName miso, PinName sck, PinName csn); |
jonebuckman | 0:55d636c5638a | 134 | |
jonebuckman | 0:55d636c5638a | 135 | /** |
jonebuckman | 0:55d636c5638a | 136 | * Set power mode for each channnel. |
jonebuckman | 0:55d636c5638a | 137 | * |
jonebuckman | 1:b54ba779d19a | 138 | * @param pwrMode power mode of the device. |
jonebuckman | 1:b54ba779d19a | 139 | * @param channel the channel or channels that are being configured. |
jonebuckman | 0:55d636c5638a | 140 | */ |
jonebuckman | 0:55d636c5638a | 141 | void AD5668_PowerMode(unsigned char pwrMode, unsigned char channel); |
jonebuckman | 0:55d636c5638a | 142 | |
jonebuckman | 0:55d636c5638a | 143 | /** |
jonebuckman | 0:55d636c5638a | 144 | * Reset the device. |
jonebuckman | 0:55d636c5638a | 145 | * |
jonebuckman | 0:55d636c5638a | 146 | * @param none. |
jonebuckman | 0:55d636c5638a | 147 | */ |
jonebuckman | 0:55d636c5638a | 148 | void AD5668_Reset(void); |
jonebuckman | 0:55d636c5638a | 149 | |
jonebuckman | 0:55d636c5638a | 150 | /** |
jonebuckman | 0:55d636c5638a | 151 | * Write a data word to a channel. |
jonebuckman | 0:55d636c5638a | 152 | * |
jonebuckman | 1:b54ba779d19a | 153 | * @param channel the channel or channels that are being configured. |
jonebuckman | 1:b54ba779d19a | 154 | * @param data the DAC data word. |
jonebuckman | 0:55d636c5638a | 155 | */ |
jonebuckman | 0:55d636c5638a | 156 | void AD5668_WRITE_INPUT_N(uint8_t channel, uint16_t data); |
jonebuckman | 0:55d636c5638a | 157 | |
jonebuckman | 0:55d636c5638a | 158 | /** |
jonebuckman | 0:55d636c5638a | 159 | * Latch a data word to a channel. |
jonebuckman | 0:55d636c5638a | 160 | * |
jonebuckman | 1:b54ba779d19a | 161 | * @param channel the channel or channels that are being configured. |
jonebuckman | 1:b54ba779d19a | 162 | * @param data the DAC data word. |
jonebuckman | 0:55d636c5638a | 163 | */ |
jonebuckman | 0:55d636c5638a | 164 | void AD5668_UPDATE_DAC_N(uint8_t channel, uint16_t data); |
jonebuckman | 0:55d636c5638a | 165 | |
jonebuckman | 0:55d636c5638a | 166 | /** |
jonebuckman | 0:55d636c5638a | 167 | * Write a data word to a channel and latch all channels. |
jonebuckman | 0:55d636c5638a | 168 | * |
jonebuckman | 1:b54ba779d19a | 169 | * @param channel the channel or channels that are being configured. |
jonebuckman | 1:b54ba779d19a | 170 | * @param data the DAC data word. |
jonebuckman | 0:55d636c5638a | 171 | */ |
jonebuckman | 0:55d636c5638a | 172 | void AD5668_WRITE_INPUT_N_UPDATE_ALL(uint8_t channel, uint16_t data); |
jonebuckman | 0:55d636c5638a | 173 | |
jonebuckman | 0:55d636c5638a | 174 | /** |
jonebuckman | 0:55d636c5638a | 175 | * Write a data word to a channel and latch the same channel. |
jonebuckman | 0:55d636c5638a | 176 | * |
jonebuckman | 1:b54ba779d19a | 177 | * @param channel the channel or channels that are being configured. |
jonebuckman | 1:b54ba779d19a | 178 | * @param data the DAC data word. |
jonebuckman | 0:55d636c5638a | 179 | */ |
jonebuckman | 0:55d636c5638a | 180 | void AD5668_WRITE_INPUT_N_UPDATE_N(uint8_t channel, uint16_t data); |
jonebuckman | 0:55d636c5638a | 181 | |
jonebuckman | 1:b54ba779d19a | 182 | /** |
jonebuckman | 1:b54ba779d19a | 183 | * Set the internal voltage reference on or off. |
jonebuckman | 1:b54ba779d19a | 184 | * |
jonebuckman | 1:b54ba779d19a | 185 | * @param val set internal voltage reference. |
jonebuckman | 1:b54ba779d19a | 186 | */ |
jonebuckman | 1:b54ba779d19a | 187 | void AD5668_InternalReference(uint8_t val); |
jonebuckman | 1:b54ba779d19a | 188 | |
jonebuckman | 1:b54ba779d19a | 189 | /** |
jonebuckman | 1:b54ba779d19a | 190 | * Set the internal voltage reference on or off. |
jonebuckman | 1:b54ba779d19a | 191 | * |
jonebuckman | 1:b54ba779d19a | 192 | * @param val clear mode of the device. |
jonebuckman | 1:b54ba779d19a | 193 | */ |
jonebuckman | 1:b54ba779d19a | 194 | void AD5668_ClearCode(uint8_t val); |
jonebuckman | 1:b54ba779d19a | 195 | |
jonebuckman | 0:55d636c5638a | 196 | private: |
jonebuckman | 0:55d636c5638a | 197 | |
jonebuckman | 0:55d636c5638a | 198 | /** |
jonebuckman | 0:55d636c5638a | 199 | * Writes a 32-bit data-word to the Input Register of the device. |
jonebuckman | 0:55d636c5638a | 200 | * |
jonebuckman | 1:b54ba779d19a | 201 | * @param registerValue value of the register. |
jonebuckman | 0:55d636c5638a | 202 | */ |
jonebuckman | 0:55d636c5638a | 203 | void AD5668_SetInputRegister(unsigned int registerValue); |
jonebuckman | 0:55d636c5638a | 204 | |
jonebuckman | 0:55d636c5638a | 205 | /** |
jonebuckman | 0:55d636c5638a | 206 | * Write array values to the SPI. |
jonebuckman | 0:55d636c5638a | 207 | * |
jonebuckman | 1:b54ba779d19a | 208 | * @param reg pointer to the array |
jonebuckman | 0:55d636c5638a | 209 | */ |
jonebuckman | 0:55d636c5638a | 210 | void SPI_Write(unsigned char *reg); |
jonebuckman | 0:55d636c5638a | 211 | |
jonebuckman | 0:55d636c5638a | 212 | SPI spi_; |
jonebuckman | 0:55d636c5638a | 213 | DigitalOut nCS_; |
jonebuckman | 0:55d636c5638a | 214 | |
jonebuckman | 0:55d636c5638a | 215 | }; |
jonebuckman | 0:55d636c5638a | 216 | |
jonebuckman | 0:55d636c5638a | 217 | #endif /* __AD5668_H__ */ |