Software to control a 4-20mA T Click Board over SPI
CurrentLoop.cpp@0:540e657ddab4, 2015-11-19 (annotated)
- Committer:
- wolfsberger
- Date:
- Thu Nov 19 12:58:09 2015 +0000
- Revision:
- 0:540e657ddab4
- Child:
- 1:92b1c9d2751e
Created
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 | 0:540e657ddab4 | 3 | CurrentLoop::CurrentLoop(SPI & spi, DigitalOut & cs) |
wolfsberger | 0:540e657ddab4 | 4 | : spi_(spi), |
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 | 0:540e657ddab4 | 27 | uint8_t highByte = 0x50 | ((dataBin & 0xFF00) >> 8); |
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 | } |