Dual DAC library
Diff: mcp482x.cpp
- Revision:
- 1:277e5be610bc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mcp482x.cpp Sun Dec 15 02:42:11 2013 +0000 @@ -0,0 +1,108 @@ +#include "mbed.h" +#include "mcp482x.h" + +using namespace mbed; + +MCP482X::MCP482X(SPI &spi, void(*sel)(void), void(*usel)(void)): _spi(spi) { + gainA = 1; + gainB = 1; + valA = 0; + valB = 0; + selectfxn = sel; + unselectfxn = usel; + enable(); +} + +MCP482X::~MCP482X() { +} + +int MCP482X::writeA(int value){ + int tempval = 0; + valA = (value & 0x0FFF); + tempval = SELECTDACA(valA); + + if(gainA == 1) { + tempval = SELECT1XGAIN(tempval); + } else { + tempval = SELECT2XGAIN(tempval); + } + + if(bshutdown==true) { + tempval = SELECTPWROFF(tempval); + } else { + tempval = SELECTPWRON(tempval); + } + + sendValue(tempval); + return tempval; +} + +int MCP482X::writeB(int value){ + + int tempval = 0; + valB = (value & 0x0FFF); + tempval = SELECTDACB(valB); + + if(gainB == 1) { + tempval = SELECT1XGAIN(tempval); + } else { + tempval = SELECT2XGAIN(tempval); + } + + if(bshutdown==true) { + tempval = SELECTPWROFF(tempval); + } else { + tempval = SELECTPWRON(tempval); + } + + sendValue(tempval); + return tempval; +} + +void MCP482X::setGainA(int value){ + if(value==1 || value == 2) + gainA = value; + else + gainA = 1; +} + +void MCP482X::setGainB(int value){ + if(value==1 || value == 2) + gainB = value; + else + gainB = 1; +} + +void MCP482X::disable() { + bshutdown = true; + writeA(valA); + writeB(valB); +} + +void MCP482X::enable() { + bshutdown = false; + writeA(valA); + writeB(valB); +} + +void MCP482X::configspi() { + _spi.format(16, 0); + //_spi.frequency(); +} + +void MCP482X::sendValue(int value) { + select(); + _spi.write(value); + deselect(); +} + +void MCP482X::select() { + //Set CS low to start transmission (interrupts conversion) + configspi(); + selectfxn(); +} + +void MCP482X::deselect() { + //Set CS high to stop transmission (restarts conversion) + unselectfxn(); +} \ No newline at end of file