config stuff
This commit is contained in:
54
Config.cpp
Normal file
54
Config.cpp
Normal 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
36
Config.h
Normal 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_
|
@ -5,6 +5,7 @@
|
||||
#include "ads1210.h"
|
||||
#include "led.h"
|
||||
#include "SimpleModbusSlave.h"
|
||||
#include "Config.h"
|
||||
|
||||
const uint8_t LED_PIN = 8;
|
||||
|
||||
@ -61,6 +62,7 @@ struct {
|
||||
|
||||
void setup() {
|
||||
delay(100);
|
||||
Config::initialize();
|
||||
led.begin(LED_PIN);
|
||||
ads1210_1.begin(ADC_1_CS_PIN, ADC_1_RDY_PIN);
|
||||
ads1210_2.begin(ADC_2_CS_PIN, ADC_2_RDY_PIN);
|
||||
|
10
ads1210.cpp
10
ads1210.cpp
@ -77,11 +77,8 @@ void ADS1210::exec() {
|
||||
value = res.out;
|
||||
|
||||
u = (((float)value) / ((float)V_MAX)) * U_REF;
|
||||
r = ((((float)V_MAX) / ((float)value)) - 1.0) * R_REF;
|
||||
|
||||
if (value == 0) {
|
||||
// fatal(2);
|
||||
}
|
||||
rRaw = ((((float)V_MAX) / ((float)value)) - 1.0) * R_REF;
|
||||
r = (rRaw + m_calOffset) * m_calFactor;
|
||||
}
|
||||
}
|
||||
|
||||
@ -133,6 +130,9 @@ void ADS1210::begin(uint8_t csPin, uint8_t drdyPin) {
|
||||
setMode(CMR_MD_SelfCalibration);
|
||||
waitForDRdy();
|
||||
// Serial << "done." << endl;
|
||||
|
||||
m_calOffset = 0.0;
|
||||
m_calFactor = 1.0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -11,11 +11,12 @@
|
||||
class ADS1210 {
|
||||
public:
|
||||
ADS1210() : value(0) {};
|
||||
void begin(uint8_t csPin, uint8_t drdyPin);
|
||||
void begin(uint8_t csPin, uint8_t drdyPin, int eepromAddr);
|
||||
void exec();
|
||||
|
||||
uint32_t value;
|
||||
float u;
|
||||
float rRaw;
|
||||
float r;
|
||||
private:
|
||||
// register addresses
|
||||
@ -77,6 +78,9 @@ private:
|
||||
|
||||
uint8_t m_csPin;
|
||||
uint8_t m_drdyPin;
|
||||
int m_eepromAddr;
|
||||
float m_calFactor;
|
||||
float m_calOffset;
|
||||
|
||||
|
||||
void enableCS() const;
|
||||
|
Reference in New Issue
Block a user