12-Bit DAC with internal Vref and SPI interface

Committer:
stjo2809
Date:
Mon Mar 23 07:53:55 2015 +0000
Revision:
0:929babff65b1
revision 0.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
stjo2809 0:929babff65b1 1 /* mbed MCP4822 Library, for driving the 12-Bit DAC with internal Vref and SPI interface
stjo2809 0:929babff65b1 2 * Copyright (c) 2015, Created by Steen Joergensen (stjo2809)
stjo2809 0:929babff65b1 3 *
stjo2809 0:929babff65b1 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
stjo2809 0:929babff65b1 5 * of this software and associated documentation files (the "Software"), to deal
stjo2809 0:929babff65b1 6 * in the Software without restriction, including without limitation the rights
stjo2809 0:929babff65b1 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
stjo2809 0:929babff65b1 8 * copies of the Software, and to permit persons to whom the Software is
stjo2809 0:929babff65b1 9 * furnished to do so, subject to the following conditions:
stjo2809 0:929babff65b1 10 *
stjo2809 0:929babff65b1 11 * The above copyright notice and this permission notice shall be included in
stjo2809 0:929babff65b1 12 * all copies or substantial portions of the Software.
stjo2809 0:929babff65b1 13 *
stjo2809 0:929babff65b1 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
stjo2809 0:929babff65b1 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
stjo2809 0:929babff65b1 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
stjo2809 0:929babff65b1 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
stjo2809 0:929babff65b1 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
stjo2809 0:929babff65b1 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
stjo2809 0:929babff65b1 20 * THE SOFTWARE.
stjo2809 0:929babff65b1 21 */
stjo2809 0:929babff65b1 22
stjo2809 0:929babff65b1 23 #include "mbed.h"
stjo2809 0:929babff65b1 24 #include "MCP4822.h"
stjo2809 0:929babff65b1 25
stjo2809 0:929babff65b1 26 //=============================================================================
stjo2809 0:929babff65b1 27 // Public functions
stjo2809 0:929babff65b1 28 //=============================================================================
stjo2809 0:929babff65b1 29
stjo2809 0:929babff65b1 30 MCP4822::MCP4822(SPI& spi, PinName nLDAC, PinName nCs) : _spi(spi), _nLDAC(nLDAC), _nCs(nCs)
stjo2809 0:929babff65b1 31 {
stjo2809 0:929babff65b1 32
stjo2809 0:929babff65b1 33 }
stjo2809 0:929babff65b1 34
stjo2809 0:929babff65b1 35
stjo2809 0:929babff65b1 36 MCP4822::MCP4822(PinName nLDAC, PinName mosi, PinName miso,PinName sck, PinName nCs) : _nLDAC(nLDAC), _mosi(mosi), _miso(miso), _sck(sck), _nCs(nCs)
stjo2809 0:929babff65b1 37 {
stjo2809 0:929babff65b1 38 SPI _spi(_mosi,_miso,_sck);
stjo2809 0:929babff65b1 39 }
stjo2809 0:929babff65b1 40
stjo2809 0:929babff65b1 41 void MCP4822::a(bool gain, int data)
stjo2809 0:929babff65b1 42 {
stjo2809 0:929babff65b1 43 _write(0, gain, 1, data);
stjo2809 0:929babff65b1 44 }
stjo2809 0:929babff65b1 45
stjo2809 0:929babff65b1 46 void MCP4822::b(bool gain, int data)
stjo2809 0:929babff65b1 47 {
stjo2809 0:929babff65b1 48 _write(1, gain, 1, data);
stjo2809 0:929babff65b1 49 }
stjo2809 0:929babff65b1 50
stjo2809 0:929babff65b1 51 void MCP4822::ldac(bool act)
stjo2809 0:929babff65b1 52 {
stjo2809 0:929babff65b1 53 _nLDAC = ~act;
stjo2809 0:929babff65b1 54 }
stjo2809 0:929babff65b1 55
stjo2809 0:929babff65b1 56 void MCP4822::shdn(bool output, bool act)
stjo2809 0:929babff65b1 57 {
stjo2809 0:929babff65b1 58 _write(output, 1, ~act, 0x00);
stjo2809 0:929babff65b1 59 }
stjo2809 0:929babff65b1 60
stjo2809 0:929babff65b1 61 //=============================================================================
stjo2809 0:929babff65b1 62 // Private functions
stjo2809 0:929babff65b1 63 //=============================================================================
stjo2809 0:929babff65b1 64
stjo2809 0:929babff65b1 65 char MCP4822::_make_upper_half(bool output, bool gain, bool shdn, int data)
stjo2809 0:929babff65b1 66 {
stjo2809 0:929babff65b1 67 char responce = 0;
stjo2809 0:929babff65b1 68
stjo2809 0:929babff65b1 69 if(output == '0')
stjo2809 0:929babff65b1 70 {
stjo2809 0:929babff65b1 71 responce = responce | CB_OUTPUT_A;
stjo2809 0:929babff65b1 72 }
stjo2809 0:929babff65b1 73 else
stjo2809 0:929babff65b1 74 {
stjo2809 0:929babff65b1 75 responce = responce | CB_OUTPUT_B;
stjo2809 0:929babff65b1 76 }
stjo2809 0:929babff65b1 77
stjo2809 0:929babff65b1 78 if(gain == '0')
stjo2809 0:929babff65b1 79 {
stjo2809 0:929babff65b1 80 responce = responce | CB_GAIN_2X;
stjo2809 0:929babff65b1 81 }
stjo2809 0:929babff65b1 82 else
stjo2809 0:929babff65b1 83 {
stjo2809 0:929babff65b1 84 responce = responce | CB_GAIN_1X;
stjo2809 0:929babff65b1 85 }
stjo2809 0:929babff65b1 86
stjo2809 0:929babff65b1 87 if(shdn == '0')
stjo2809 0:929babff65b1 88 {
stjo2809 0:929babff65b1 89 responce = responce | CB_NSHDN;
stjo2809 0:929babff65b1 90 }
stjo2809 0:929babff65b1 91 else
stjo2809 0:929babff65b1 92 {
stjo2809 0:929babff65b1 93 responce = responce | CB_SHDN;
stjo2809 0:929babff65b1 94 }
stjo2809 0:929babff65b1 95
stjo2809 0:929babff65b1 96 if(data > 0xff && data < 0xfff)
stjo2809 0:929babff65b1 97 {
stjo2809 0:929babff65b1 98 responce = responce | (data >> 8);
stjo2809 0:929babff65b1 99 }
stjo2809 0:929babff65b1 100
stjo2809 0:929babff65b1 101 return responce;
stjo2809 0:929babff65b1 102 }
stjo2809 0:929babff65b1 103
stjo2809 0:929babff65b1 104 char MCP4822::_make_lower_half(int data)
stjo2809 0:929babff65b1 105 {
stjo2809 0:929babff65b1 106 return (data & 0xff);
stjo2809 0:929babff65b1 107 }
stjo2809 0:929babff65b1 108
stjo2809 0:929babff65b1 109 void MCP4822::_write(bool output, bool gain, bool shdn, int data)
stjo2809 0:929babff65b1 110 {
stjo2809 0:929babff65b1 111
stjo2809 0:929babff65b1 112 _upper_half = _make_upper_half(output, gain, shdn, data);
stjo2809 0:929babff65b1 113 _lower_half = _make_lower_half(data);
stjo2809 0:929babff65b1 114
stjo2809 0:929babff65b1 115 _nCs = 0;
stjo2809 0:929babff65b1 116 _spi.write(_upper_half);
stjo2809 0:929babff65b1 117 _spi.write(_lower_half);
stjo2809 0:929babff65b1 118 _nCs = 1;
stjo2809 0:929babff65b1 119 }