REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
mblock_mul.h
Go to the documentation of this file.
1// Copyright (c) 2024 anabrid GmbH
2// Contact: https://www.anabrid.com/licensing/
3// SPDX-License-Identifier: MIT OR GPL-2.0-or-later
4
5#include <algorithm>
6#include <bitset>
7
8#include <block/mblock_mul.h>
9
10#include <chips/AD840X.h>
11#include <chips/DAC60508.h>
12#include <chips/SR74HC16X.h>
13#include <chips/SR74HCT595.h>
14#include <entity/hardware.h>
15
16namespace blocks {
17
19
20class MMulBlockHAL_FullAutoCalibration : public MMulBlockHAL {
21public:
22 virtual bool write_calibration_gain(uint8_t idx, uint8_t gain) = 0;
23};
24
26protected:
31
32public:
33 explicit MMulBlockHAL_V_1_0_X(bus::addr_t block_address);
34
35 bool init() override;
36
37public:
38 bool write_calibration_input_offsets(uint8_t idx, uint16_t offset_x, uint16_t offset_y) override;
39 bool write_calibration_output_offset(uint8_t idx, uint16_t offset_z) override;
40
41 static constexpr float MIN_OFFSET = -0.1f;
42 static constexpr float MAX_OFFSET = +0.1f;
43
45 static float raw_to_float_calibration(uint16_t raw) {
46 return map(static_cast<float>(raw), functions::DAC60508::RAW_ZERO, functions::DAC60508::RAW_MAX,
48 }
49
51 static uint16_t float_to_raw_calibration(float value) {
52 return static_cast<uint16_t>(roundf(
54 }
55
56 static constexpr inline uint16_t RAW_ZERO = functions::DAC60508::RAW_ZERO;
57 static constexpr inline uint16_t RAW_MAX = functions::DAC60508::RAW_MAX;
58
59 std::bitset<8> read_overload_flags() override;
60 void reset_overload_flags() override;
61};
62
64protected:
67
68public:
69 explicit MMulBlockHAL_V_1_M1_X(bus::addr_t block_address);
70
71 bool write_calibration_gain(uint8_t idx, uint8_t gain) override;
72
73 std::bitset<8> read_overload_flags() override { return MMulBlockHAL_V_1_0_X::read_overload_flags(); }
74
76
77 bool write_calibration_input_offsets(uint8_t idx, uint16_t offset_x, uint16_t offset_y) override {
78 return MMulBlockHAL_V_1_0_X::write_calibration_input_offsets(idx, offset_x, offset_y);
79 }
80
81 bool write_calibration_output_offset(uint8_t idx, uint16_t offset_z) override {
83 }
84
85 float read_temperature() const override {
87 };
88};
89
91protected:
93
94public:
95 explicit MMulBlockHAL_V_1_1_X(bus::addr_t block_address);
96
97 bool write_calibration_gain(uint8_t idx, uint8_t gain) override;
98
99 std::bitset<8> read_overload_flags() override { return MMulBlockHAL_V_1_0_X::read_overload_flags(); }
100
102
103 bool write_calibration_input_offsets(uint8_t idx, uint16_t offset_x, uint16_t offset_y) override {
104 return MMulBlockHAL_V_1_0_X::write_calibration_input_offsets(idx, offset_x, offset_y);
105 }
106
107 bool write_calibration_output_offset(uint8_t idx, uint16_t offset_z) override {
109 }
110
111 float read_temperature() const override {
113 };
114};
115
116class MMulBlock_FullAutoCalibration : public MMulBlock {
117public:
119
120public:
121 bool calibrate(platform::Cluster *cluster, carrier::Carrier *carrier) override;
122 utils::status write_calibration_to_hardware() override;
123
124protected:
126};
127
128} // namespace blocks
virtual bool write_calibration_gain(uint8_t idx, uint8_t gain)=0
std::bitset< 8 > read_overload_flags() override
const functions::TriggerFunction f_overload_flags_reset
Definition mblock_mul.h:27
bool write_calibration_output_offset(uint8_t idx, uint16_t offset_z) override
MMulBlockHAL_V_1_0_X(bus::addr_t block_address)
static constexpr uint16_t RAW_MAX
Definition mblock_mul.h:57
static constexpr float MIN_OFFSET
Definition mblock_mul.h:41
const functions::SR74HC16X f_overload_flags
Definition mblock_mul.h:28
const functions::DAC60508 f_calibration_dac_0
Definition mblock_mul.h:29
void reset_overload_flags() override
static float raw_to_float_calibration(uint16_t raw)
Takes in DAC raw value, returns voltage recieved by multiplier.
Definition mblock_mul.h:45
bool write_calibration_input_offsets(uint8_t idx, uint16_t offset_x, uint16_t offset_y) override
const functions::DAC60508 f_calibration_dac_1
Definition mblock_mul.h:30
static uint16_t float_to_raw_calibration(float value)
Takes in voltage recieved by multiplier, returns DAC raw value.
Definition mblock_mul.h:51
static constexpr float MAX_OFFSET
Definition mblock_mul.h:42
static constexpr uint16_t RAW_ZERO
Definition mblock_mul.h:56
MMulBlockHAL_V_1_1_X(bus::addr_t block_address)
float read_temperature() const override
Definition mblock_mul.h:111
functions::AD8403 f_gain
Definition mblock_mul.h:92
bool write_calibration_input_offsets(uint8_t idx, uint16_t offset_x, uint16_t offset_y) override
Definition mblock_mul.h:103
bool write_calibration_output_offset(uint8_t idx, uint16_t offset_z) override
Definition mblock_mul.h:107
bool write_calibration_gain(uint8_t idx, uint8_t gain) override
std::bitset< 8 > read_overload_flags() override
Definition mblock_mul.h:99
void reset_overload_flags() override
Definition mblock_mul.h:101
bool write_calibration_input_offsets(uint8_t idx, uint16_t offset_x, uint16_t offset_y) override
Definition mblock_mul.h:77
functions::AD8402 f_gain_ch0_1
Definition mblock_mul.h:65
bool write_calibration_gain(uint8_t idx, uint8_t gain) override
float read_temperature() const override
Definition mblock_mul.h:85
functions::AD8402 f_gain_ch2_3
Definition mblock_mul.h:66
void reset_overload_flags() override
Definition mblock_mul.h:75
MMulBlockHAL_V_1_M1_X(bus::addr_t block_address)
bool write_calibration_output_offset(uint8_t idx, uint16_t offset_z) override
Definition mblock_mul.h:81
std::bitset< 8 > read_overload_flags() override
Definition mblock_mul.h:73
MMulBlock_FullAutoCalibration(SLOT slot, blocks::MMulBlockHAL_FullAutoCalibration *hardware)
bool calibrate(platform::Cluster *cluster, carrier::Carrier *carrier) override
utils::status write_calibration_to_hardware() override
MMulBlockHAL_FullAutoCalibration * hardware
Definition mblock_mul.h:125
float read_temperature() const
Definition hardware.h:31
The AD8403 is a four channel, 8 bit digital potentiometer.
Definition AD840X.h:35
The DAC60508 is the 12-Bit 8-channel DAC, used in the MInt-Block for the initial conditions.
Definition DAC60508.h:17
static constexpr uint16_t RAW_ZERO
Definition DAC60508.h:30
static constexpr uint16_t RAW_MAX
Definition DAC60508.h:31
A trigger function exploits the fact that setting an address on the bus triggers an action (TODO: Is ...
Definition functions.h:33
Definition daq.h:14