working SUS in externally clocked mode

This commit is contained in:
2021-05-09 16:48:55 +02:00
parent 906c813e4c
commit 189bdb7c90
6 changed files with 170 additions and 129 deletions

View File

@ -3,6 +3,12 @@
namespace SUS {
/**
* The MAX1227 in externally clocked mode did not properly work with frequencies higher than
* 1 MHz.
*/
static const uint32_t SUS_MAX_1227_SPEED = 1000000;
static const DeviceCommandId_t NONE = 0x0; // Set when no command is pending
/**
@ -10,9 +16,9 @@ namespace SUS {
* temperature sensor.
*/
static const DeviceCommandId_t WRITE_SETUP = 0x1;
static const DeviceCommandId_t PERFORM_CONVERSIONS = 0x2;
static const DeviceCommandId_t READ_TEMP = 0x3;
static const DeviceCommandId_t RQUEST_TEMP = 0x4;
static const DeviceCommandId_t READ_CHANNELS = 0x2;
static const DeviceCommandId_t READ_TEMPERATURE = 0x3;
static const DeviceCommandId_t REQUEST_TEMPERATURE = 0x4;
/**
* @brief This is the configuration byte which will be written to the setup register after
@ -47,21 +53,28 @@ namespace SUS {
static const uint8_t DUMMY_BYTE = 0x0;
static const uint8_t SUS_DATA_SET_ID = PERFORM_CONVERSIONS;
static const uint8_t SUS_DATA_SET_ID = READ_CHANNELS;
static const uint8_t SIZE_PERFORM_CONVERSIONS = 34;
/** Size of data replies */
static const uint8_t SIZE_READ_CHANNELS = 13;
static const uint8_t SIZE_READ_TEMPERATURE = 25;
static const uint8_t MAX_CMD_SIZE = SIZE_PERFORM_CONVERSIONS;
static const uint8_t MAX_CMD_SIZE = SIZE_READ_TEMPERATURE;
static const uint8_t POOL_ENTRIES = 7;
enum Max1227PoolIds: lp_id_t {
TEMPERATURE_C,
DIFF_SCAN_CHANNEL_0_1,
DIFF_SCAN_CHANNEL_2_3,
DIFF_SCAN_CHANNEL_4_5,
AIN0,
AIN1,
AIN2,
AIN3,
AIN4,
AIN5,
};
class SusDataset: public StaticLocalDataSet<sizeof(float)> {
class SusDataset: public StaticLocalDataSet<POOL_ENTRIES> {
public:
SusDataset(HasLocalDataPoolIF* owner) :
@ -73,9 +86,12 @@ public:
}
lp_var_t<float> temperatureCelcius = lp_var_t<float>(sid.objectId, TEMPERATURE_C, this);
lp_var_t<uint16_t> diffScanChannel0_1 = lp_var_t<uint16_t>(sid.objectId, DIFF_SCAN_CHANNEL_0_1, this);
lp_var_t<uint16_t> diffScanChannel2_3 = lp_var_t<uint16_t>(sid.objectId, DIFF_SCAN_CHANNEL_2_3, this);
lp_var_t<uint16_t> diffScanChannel4_5 = lp_var_t<uint16_t>(sid.objectId, DIFF_SCAN_CHANNEL_4_5, this);
lp_var_t<uint16_t> ain0 = lp_var_t<uint16_t>(sid.objectId, AIN0, this);
lp_var_t<uint16_t> ain1 = lp_var_t<uint16_t>(sid.objectId, AIN1, this);
lp_var_t<uint16_t> ain2 = lp_var_t<uint16_t>(sid.objectId, AIN2, this);
lp_var_t<uint16_t> ain3 = lp_var_t<uint16_t>(sid.objectId, AIN3, this);
lp_var_t<uint16_t> ain4 = lp_var_t<uint16_t>(sid.objectId, AIN4, this);
lp_var_t<uint16_t> ain5 = lp_var_t<uint16_t>(sid.objectId, AIN5, this);
};
}