Dual DAC library
mcp482x.cpp@1:277e5be610bc, 2013-12-15 (annotated)
- Committer:
- henryeherman
- Date:
- Sun Dec 15 02:42:11 2013 +0000
- Revision:
- 1:277e5be610bc
Working dual DAC library
Who changed what in which revision?
User | Revision | Line number | New 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 | } |