Software to control a 4-20mA T Click Board over SPI
CurrentLoop.cpp@2:2ff3e18bc668, 2015-12-09 (annotated)
- Committer:
- wolfsberger
- Date:
- Wed Dec 09 07:58:37 2015 +0000
- Revision:
- 2:2ff3e18bc668
- Parent:
- 1:92b1c9d2751e
Compiler now takes PinNames as parameter.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wolfsberger | 0:540e657ddab4 | 1 | #include "CurrentLoop.h" |
wolfsberger | 0:540e657ddab4 | 2 | |
wolfsberger | 2:2ff3e18bc668 | 3 | CurrentLoop::CurrentLoop(PinName mosi, PinName sck, PinName cs) |
wolfsberger | 2:2ff3e18bc668 | 4 | : spi_(mosi, NC, sck), |
wolfsberger | 0:540e657ddab4 | 5 | cs_(cs) |
wolfsberger | 0:540e657ddab4 | 6 | { |
wolfsberger | 0:540e657ddab4 | 7 | spi_.format(8,3); |
wolfsberger | 0:540e657ddab4 | 8 | spi_.frequency(100000); |
wolfsberger | 0:540e657ddab4 | 9 | cs_=1; |
wolfsberger | 0:540e657ddab4 | 10 | } |
wolfsberger | 0:540e657ddab4 | 11 | |
wolfsberger | 0:540e657ddab4 | 12 | void CurrentLoop::output(float current) |
wolfsberger | 0:540e657ddab4 | 13 | { |
wolfsberger | 0:540e657ddab4 | 14 | float data = (current / 20.0f) * 2000.0f; |
wolfsberger | 0:540e657ddab4 | 15 | uint16_t dataBin = static_cast<uint16_t>(data); |
wolfsberger | 0:540e657ddab4 | 16 | |
wolfsberger | 0:540e657ddab4 | 17 | if (dataBin < 400) |
wolfsberger | 0:540e657ddab4 | 18 | { |
wolfsberger | 0:540e657ddab4 | 19 | dataBin = 400; |
wolfsberger | 0:540e657ddab4 | 20 | } |
wolfsberger | 0:540e657ddab4 | 21 | |
wolfsberger | 0:540e657ddab4 | 22 | if (dataBin > 2000) |
wolfsberger | 0:540e657ddab4 | 23 | { |
wolfsberger | 0:540e657ddab4 | 24 | dataBin = 2000; |
wolfsberger | 0:540e657ddab4 | 25 | } |
wolfsberger | 0:540e657ddab4 | 26 | |
wolfsberger | 1:92b1c9d2751e | 27 | uint8_t highByte = 0x50 | ((dataBin & 0x0F00) >> 8); // Upper 4 bits are for configuration. |
wolfsberger | 0:540e657ddab4 | 28 | uint8_t lowByte = (dataBin & 0x00FF); |
wolfsberger | 0:540e657ddab4 | 29 | |
wolfsberger | 0:540e657ddab4 | 30 | cs_ = 0; |
wolfsberger | 0:540e657ddab4 | 31 | spi_.write(highByte); |
wolfsberger | 0:540e657ddab4 | 32 | spi_.write(lowByte); |
wolfsberger | 0:540e657ddab4 | 33 | cs_ = 1; |
wolfsberger | 0:540e657ddab4 | 34 | } |