Files
ModbusThermometer/ads1210.cpp
2014-11-03 22:19:10 +01:00

88 lines
1.8 KiB
C++

/*
* ads1210.cpp
*
* Created on: Nov 2, 2014
* Author: wn
*/
// #include <Arduino.h>
#include <SPI.h>
#include "Streaming.h"
#include "ads1210.h"
ADS1210::ADS1210() {
}
void ADS1210::enableCS() const {
digitalWrite(m_csPin, LOW);
}
void ADS1210::disableCS() const {
digitalWrite(m_csPin, HIGH);
}
void ADS1210::writeCMR () const {
uint8_t instr = INSR_MB1 | INSR_MB0 | ADDR_CMR3;
enableCS();
SPI.transfer(instr);
SPI.transfer(m_cmrWriteShadow[3]);
SPI.transfer(m_cmrWriteShadow[2]);
SPI.transfer(m_cmrWriteShadow[1]);
SPI.transfer(m_cmrWriteShadow[0]);
disableCS();
}
void ADS1210::readCMR () {
uint8_t instr = INSR_MB1 | INSR_MB0 | ADDR_CMR3 | INSR_RW;
enableCS();
SPI.transfer(instr);
m_cmrReadShadow[3] = SPI.transfer(0);
m_cmrReadShadow[2] = SPI.transfer(0);
m_cmrReadShadow[1] = SPI.transfer(0);
m_cmrReadShadow[0] = SPI.transfer(0);
disableCS();
}
void ADS1210::begin(uint8_t csPin) {
static bool onlyOnce = false;
m_csPin = csPin;
// initialization of SPI
pinMode(m_csPin, OUTPUT);
digitalWrite(m_csPin, HIGH);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV16);
SPI.setDataMode(SPI_MODE1);
if (! onlyOnce) {
// initialization of the ADS1210
m_cmrWriteShadow[3] |= CMR_SDL;
m_cmrWriteShadow[2] = 0;
m_cmrWriteShadow[1] = 0;
m_cmrWriteShadow[0] = 0;
writeCMR();
// onlyOnce = true;
}
// static bool toggleRefO = false;
// if (toggleRefO) {
// toggleRefO = false;
// m_cmrWriteShadow[3] |= CMR_REFO;
// } else {
// toggleRefO = true;
// m_cmrWriteShadow[3] &= ~CMR_REFO;
// }
// writeCMR();
readCMR();
Serial << "CMR3: " << _HEX(m_cmrReadShadow[3]) <<
", CMR2: " << _HEX(m_cmrReadShadow[2]) <<
", CMR1: " << _HEX(m_cmrReadShadow[1]) <<
", CMR0: " << _HEX(m_cmrReadShadow[0]) << endl;
}