config stuff

This commit is contained in:
Wolfgang Hottgenroth
2014-11-15 23:42:31 +01:00
parent c687aff175
commit ca26284cf2
5 changed files with 102 additions and 6 deletions

54
Config.cpp Normal file
View File

@ -0,0 +1,54 @@
#include "Config.h"
float Config::getFloat(int pos) {
u_float u;
for (uint8_t i = 0; i < sizeof(float); i++) {
u.e[i] = EEPROM.read(pos + i);
}
return u.f;
}
void Config::setFloat(int pos, float value) {
u_float u;
u.f = value;
for (uint8_t i = 0; i < sizeof(float); i++) {
EEPROM.write(pos + i, u.e[i]);
}
}
unsigned int Config::getUInt32(int pos) {
u_uint32 u;
for (uint8_t i = 0; i < sizeof(uint32_t); i++) {
u.e[i] = EEPROM.read(pos + i);
}
return u.i;
}
void Config::setUInt32(int pos, uint32_t value) {
u_uint32 u;
u.i = value;
for (uint8_t i = 0; i < sizeof(uint32_t); i++) {
EEPROM.write(pos + i, u.e[i]);
}
}
bool Config::isInitialized() {
uint32_t magic = getUInt32(MAGIC);
return magic == MAGIC_TOKEN;
}
void Config::setMagic() {
setUInt32(MAGIC, MAGIC_TOKEN);
}
void Config::initialize() {
if (! isInitialized()) {
setFloat(ADC1START, 0.0);
setFloat(ADC1START + 4, 1.0);
setFloat(ADC2START, 0.0);
setFloat(ADC2START + 4, 1.0);
setMagic();
}
}

36
Config.h Normal file
View File

@ -0,0 +1,36 @@
#ifndef _config_h_
#define _config_h_
#include <stdint.h>
typedef union {
float f;
uint8_t e[sizeof(float)];
} u_float;
typedef union {
uint32_t i;
uint8_t e[sizeof(uint32_t)];
} u_uint32;
namespace Config {
const uint32_t MAGIC_TOKEN = 0xDEADBEEF;
const int MAGIC = 0;
const int ADC1START = 4;
const int ADC2START = 12;
void initialize();
bool isInitialized();
float getFloat(int pos);
void setFloat(int pos, float value);
uint32_t getUInt32(int pos);
void setUInt32(int pos, uint32_t value);
void setMagic();
}
#endif // _config_h_

View File

@ -5,6 +5,7 @@
#include "ads1210.h" #include "ads1210.h"
#include "led.h" #include "led.h"
#include "SimpleModbusSlave.h" #include "SimpleModbusSlave.h"
#include "Config.h"
const uint8_t LED_PIN = 8; const uint8_t LED_PIN = 8;
@ -61,6 +62,7 @@ struct {
void setup() { void setup() {
delay(100); delay(100);
Config::initialize();
led.begin(LED_PIN); led.begin(LED_PIN);
ads1210_1.begin(ADC_1_CS_PIN, ADC_1_RDY_PIN); ads1210_1.begin(ADC_1_CS_PIN, ADC_1_RDY_PIN);
ads1210_2.begin(ADC_2_CS_PIN, ADC_2_RDY_PIN); ads1210_2.begin(ADC_2_CS_PIN, ADC_2_RDY_PIN);

View File

@ -77,11 +77,8 @@ void ADS1210::exec() {
value = res.out; value = res.out;
u = (((float)value) / ((float)V_MAX)) * U_REF; u = (((float)value) / ((float)V_MAX)) * U_REF;
r = ((((float)V_MAX) / ((float)value)) - 1.0) * R_REF; rRaw = ((((float)V_MAX) / ((float)value)) - 1.0) * R_REF;
r = (rRaw + m_calOffset) * m_calFactor;
if (value == 0) {
// fatal(2);
}
} }
} }
@ -133,6 +130,9 @@ void ADS1210::begin(uint8_t csPin, uint8_t drdyPin) {
setMode(CMR_MD_SelfCalibration); setMode(CMR_MD_SelfCalibration);
waitForDRdy(); waitForDRdy();
// Serial << "done." << endl; // Serial << "done." << endl;
m_calOffset = 0.0;
m_calFactor = 1.0;
} }

View File

@ -11,11 +11,12 @@
class ADS1210 { class ADS1210 {
public: public:
ADS1210() : value(0) {}; ADS1210() : value(0) {};
void begin(uint8_t csPin, uint8_t drdyPin); void begin(uint8_t csPin, uint8_t drdyPin, int eepromAddr);
void exec(); void exec();
uint32_t value; uint32_t value;
float u; float u;
float rRaw;
float r; float r;
private: private:
// register addresses // register addresses
@ -77,6 +78,9 @@ private:
uint8_t m_csPin; uint8_t m_csPin;
uint8_t m_drdyPin; uint8_t m_drdyPin;
int m_eepromAddr;
float m_calFactor;
float m_calOffset;
void enableCS() const; void enableCS() const;