Dual DAC library

Dependents:   elixys

Committer:
henryeherman
Date:
Sun Dec 15 02:42:11 2013 +0000
Revision:
1:277e5be610bc
Working dual DAC library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
henryeherman 1:277e5be610bc 1 #include "mbed.h"
henryeherman 1:277e5be610bc 2 #include "mcp482x.h"
henryeherman 1:277e5be610bc 3
henryeherman 1:277e5be610bc 4 using namespace mbed;
henryeherman 1:277e5be610bc 5
henryeherman 1:277e5be610bc 6 MCP482X::MCP482X(SPI &spi, void(*sel)(void), void(*usel)(void)): _spi(spi) {
henryeherman 1:277e5be610bc 7 gainA = 1;
henryeherman 1:277e5be610bc 8 gainB = 1;
henryeherman 1:277e5be610bc 9 valA = 0;
henryeherman 1:277e5be610bc 10 valB = 0;
henryeherman 1:277e5be610bc 11 selectfxn = sel;
henryeherman 1:277e5be610bc 12 unselectfxn = usel;
henryeherman 1:277e5be610bc 13 enable();
henryeherman 1:277e5be610bc 14 }
henryeherman 1:277e5be610bc 15
henryeherman 1:277e5be610bc 16 MCP482X::~MCP482X() {
henryeherman 1:277e5be610bc 17 }
henryeherman 1:277e5be610bc 18
henryeherman 1:277e5be610bc 19 int MCP482X::writeA(int value){
henryeherman 1:277e5be610bc 20 int tempval = 0;
henryeherman 1:277e5be610bc 21 valA = (value & 0x0FFF);
henryeherman 1:277e5be610bc 22 tempval = SELECTDACA(valA);
henryeherman 1:277e5be610bc 23
henryeherman 1:277e5be610bc 24 if(gainA == 1) {
henryeherman 1:277e5be610bc 25 tempval = SELECT1XGAIN(tempval);
henryeherman 1:277e5be610bc 26 } else {
henryeherman 1:277e5be610bc 27 tempval = SELECT2XGAIN(tempval);
henryeherman 1:277e5be610bc 28 }
henryeherman 1:277e5be610bc 29
henryeherman 1:277e5be610bc 30 if(bshutdown==true) {
henryeherman 1:277e5be610bc 31 tempval = SELECTPWROFF(tempval);
henryeherman 1:277e5be610bc 32 } else {
henryeherman 1:277e5be610bc 33 tempval = SELECTPWRON(tempval);
henryeherman 1:277e5be610bc 34 }
henryeherman 1:277e5be610bc 35
henryeherman 1:277e5be610bc 36 sendValue(tempval);
henryeherman 1:277e5be610bc 37 return tempval;
henryeherman 1:277e5be610bc 38 }
henryeherman 1:277e5be610bc 39
henryeherman 1:277e5be610bc 40 int MCP482X::writeB(int value){
henryeherman 1:277e5be610bc 41
henryeherman 1:277e5be610bc 42 int tempval = 0;
henryeherman 1:277e5be610bc 43 valB = (value & 0x0FFF);
henryeherman 1:277e5be610bc 44 tempval = SELECTDACB(valB);
henryeherman 1:277e5be610bc 45
henryeherman 1:277e5be610bc 46 if(gainB == 1) {
henryeherman 1:277e5be610bc 47 tempval = SELECT1XGAIN(tempval);
henryeherman 1:277e5be610bc 48 } else {
henryeherman 1:277e5be610bc 49 tempval = SELECT2XGAIN(tempval);
henryeherman 1:277e5be610bc 50 }
henryeherman 1:277e5be610bc 51
henryeherman 1:277e5be610bc 52 if(bshutdown==true) {
henryeherman 1:277e5be610bc 53 tempval = SELECTPWROFF(tempval);
henryeherman 1:277e5be610bc 54 } else {
henryeherman 1:277e5be610bc 55 tempval = SELECTPWRON(tempval);
henryeherman 1:277e5be610bc 56 }
henryeherman 1:277e5be610bc 57
henryeherman 1:277e5be610bc 58 sendValue(tempval);
henryeherman 1:277e5be610bc 59 return tempval;
henryeherman 1:277e5be610bc 60 }
henryeherman 1:277e5be610bc 61
henryeherman 1:277e5be610bc 62 void MCP482X::setGainA(int value){
henryeherman 1:277e5be610bc 63 if(value==1 || value == 2)
henryeherman 1:277e5be610bc 64 gainA = value;
henryeherman 1:277e5be610bc 65 else
henryeherman 1:277e5be610bc 66 gainA = 1;
henryeherman 1:277e5be610bc 67 }
henryeherman 1:277e5be610bc 68
henryeherman 1:277e5be610bc 69 void MCP482X::setGainB(int value){
henryeherman 1:277e5be610bc 70 if(value==1 || value == 2)
henryeherman 1:277e5be610bc 71 gainB = value;
henryeherman 1:277e5be610bc 72 else
henryeherman 1:277e5be610bc 73 gainB = 1;
henryeherman 1:277e5be610bc 74 }
henryeherman 1:277e5be610bc 75
henryeherman 1:277e5be610bc 76 void MCP482X::disable() {
henryeherman 1:277e5be610bc 77 bshutdown = true;
henryeherman 1:277e5be610bc 78 writeA(valA);
henryeherman 1:277e5be610bc 79 writeB(valB);
henryeherman 1:277e5be610bc 80 }
henryeherman 1:277e5be610bc 81
henryeherman 1:277e5be610bc 82 void MCP482X::enable() {
henryeherman 1:277e5be610bc 83 bshutdown = false;
henryeherman 1:277e5be610bc 84 writeA(valA);
henryeherman 1:277e5be610bc 85 writeB(valB);
henryeherman 1:277e5be610bc 86 }
henryeherman 1:277e5be610bc 87
henryeherman 1:277e5be610bc 88 void MCP482X::configspi() {
henryeherman 1:277e5be610bc 89 _spi.format(16, 0);
henryeherman 1:277e5be610bc 90 //_spi.frequency();
henryeherman 1:277e5be610bc 91 }
henryeherman 1:277e5be610bc 92
henryeherman 1:277e5be610bc 93 void MCP482X::sendValue(int value) {
henryeherman 1:277e5be610bc 94 select();
henryeherman 1:277e5be610bc 95 _spi.write(value);
henryeherman 1:277e5be610bc 96 deselect();
henryeherman 1:277e5be610bc 97 }
henryeherman 1:277e5be610bc 98
henryeherman 1:277e5be610bc 99 void MCP482X::select() {
henryeherman 1:277e5be610bc 100 //Set CS low to start transmission (interrupts conversion)
henryeherman 1:277e5be610bc 101 configspi();
henryeherman 1:277e5be610bc 102 selectfxn();
henryeherman 1:277e5be610bc 103 }
henryeherman 1:277e5be610bc 104
henryeherman 1:277e5be610bc 105 void MCP482X::deselect() {
henryeherman 1:277e5be610bc 106 //Set CS high to stop transmission (restarts conversion)
henryeherman 1:277e5be610bc 107 unselectfxn();
henryeherman 1:277e5be610bc 108 }