Software to control a 4-20mA T Click Board over SPI

Committer:
wolfsberger
Date:
Thu Nov 19 12:58:09 2015 +0000
Revision:
0:540e657ddab4
Child:
1:92b1c9d2751e
Created

Who changed what in which revision?

UserRevisionLine numberNew 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 }