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

CurrentLoop.cpp

Committer:
wolfsberger
Date:
2015-12-09
Revision:
1:92b1c9d2751e
Parent:
0:540e657ddab4
Child:
2:2ff3e18bc668

File content as of revision 1:92b1c9d2751e:

#include "CurrentLoop.h"

CurrentLoop::CurrentLoop(SPI & spi, DigitalOut & cs)
    : spi_(spi),
      cs_(cs)
{
    spi_.format(8,3);
    spi_.frequency(100000);
    cs_=1;
}

void CurrentLoop::output(float current)
{
    float data = (current / 20.0f) * 2000.0f;
    uint16_t dataBin = static_cast<uint16_t>(data);
    
    if (dataBin < 400)
    {
        dataBin = 400;
    }
    
    if (dataBin > 2000)
    {
        dataBin = 2000;
    }
    
    uint8_t highByte = 0x50 | ((dataBin & 0x0F00) >> 8);    // Upper 4 bits are for configuration.
    uint8_t lowByte = (dataBin & 0x00FF);
    
    cs_ = 0;
    spi_.write(highByte);
    spi_.write(lowByte);
    cs_ = 1;
}