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#pragma once
5
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 <entity/hardware.h>
14
15namespace blocks {
16
18
19class MMulBlockHAL_FullAutoCalibration : public MMulBlockHAL {
20public:
21 virtual bool write_calibration_gain(uint8_t idx, uint8_t gain) = 0;
22};
23
25protected:
30
31public:
32 explicit MMulBlockHAL_V_1_0_X(bus::addr_t block_address);
33
34 bool init() override;
35
36public:
37 bool write_calibration_input_offsets(uint8_t idx, uint16_t offset_x, uint16_t offset_y) override;
38 bool write_calibration_output_offset(uint8_t idx, uint16_t offset_z) override;
39
40 static constexpr float MIN_OFFSET = -0.1f;
41 static constexpr float MAX_OFFSET = +0.1f;
42
44 static float raw_to_float_calibration(uint16_t raw) {
45 return map(static_cast<float>(raw), functions::DAC60508::RAW_ZERO, functions::DAC60508::RAW_MAX,
47 }
48
50 static uint16_t float_to_raw_calibration(float value) {
51 return static_cast<uint16_t>(roundf(
53 }
54
55 static constexpr inline uint16_t RAW_ZERO = functions::DAC60508::RAW_ZERO;
56 static constexpr inline uint16_t RAW_MAX = functions::DAC60508::RAW_MAX;
57
58 std::bitset<8> read_overload_flags() override;
59 void reset_overload_flags() override;
60};
61
63protected:
66
67public:
68 explicit MMulBlockHAL_V_1_M1_X(bus::addr_t block_address);
69
70 bool write_calibration_gain(uint8_t idx, uint8_t gain) override;
71
72 std::bitset<8> read_overload_flags() override { return MMulBlockHAL_V_1_0_X::read_overload_flags(); }
73
75
76 bool write_calibration_input_offsets(uint8_t idx, uint16_t offset_x, uint16_t offset_y) override {
77 return MMulBlockHAL_V_1_0_X::write_calibration_input_offsets(idx, offset_x, offset_y);
78 }
79
80 bool write_calibration_output_offset(uint8_t idx, uint16_t offset_z) override {
82 }
83
84 float read_temperature() const override { return MMulBlockHAL_V_1_0_X::read_temperature(); };
85};
86
88protected:
90
91public:
92 explicit MMulBlockHAL_V_1_1_X(bus::addr_t block_address);
93
94 bool write_calibration_gain(uint8_t idx, uint8_t gain) override;
95
96 std::bitset<8> read_overload_flags() override { return MMulBlockHAL_V_1_0_X::read_overload_flags(); }
97
99
100 bool write_calibration_input_offsets(uint8_t idx, uint16_t offset_x, uint16_t offset_y) override {
101 return MMulBlockHAL_V_1_0_X::write_calibration_input_offsets(idx, offset_x, offset_y);
102 }
103
104 bool write_calibration_output_offset(uint8_t idx, uint16_t offset_z) override {
106 }
107
108 float read_temperature() const override { return MMulBlockHAL_V_1_0_X::read_temperature(); };
109};
110
111class MMulBlock_FullAutoCalibration : public MMulBlock {
112public:
114
115public:
116 status calibrate(platform::Cluster *cluster, carrier::Carrier *carrier) override;
118
119protected:
121};
122
123} // namespace blocks
virtual bool write_calibration_gain(uint8_t idx, uint8_t gain)=0
bool write_calibration_output_offset(uint8_t idx, uint16_t offset_z) override
const functions::TriggerFunction f_overload_flags_reset
Definition mblock_mul.h:26
std::bitset< 8 > read_overload_flags() override
static constexpr uint16_t RAW_MAX
Definition mblock_mul.h:56
static constexpr float MIN_OFFSET
Definition mblock_mul.h:40
void reset_overload_flags() override
const functions::SR74HC16X f_overload_flags
Definition mblock_mul.h:27
MMulBlockHAL_V_1_0_X(bus::addr_t block_address)
const functions::DAC60508 f_calibration_dac_0
Definition mblock_mul.h:28
static float raw_to_float_calibration(uint16_t raw)
Takes in DAC raw value, returns voltage recieved by multiplier.
Definition mblock_mul.h:44
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:29
static uint16_t float_to_raw_calibration(float value)
Takes in voltage recieved by multiplier, returns DAC raw value.
Definition mblock_mul.h:50
static constexpr float MAX_OFFSET
Definition mblock_mul.h:41
static constexpr uint16_t RAW_ZERO
Definition mblock_mul.h:55
MMulBlockHAL_V_1_1_X(bus::addr_t block_address)
bool write_calibration_gain(uint8_t idx, uint8_t gain) override
float read_temperature() const override
Definition mblock_mul.h:108
functions::AD8403 f_gain
Definition mblock_mul.h:89
bool write_calibration_input_offsets(uint8_t idx, uint16_t offset_x, uint16_t offset_y) override
Definition mblock_mul.h:100
bool write_calibration_output_offset(uint8_t idx, uint16_t offset_z) override
Definition mblock_mul.h:104
std::bitset< 8 > read_overload_flags() override
Definition mblock_mul.h:96
void reset_overload_flags() override
Definition mblock_mul.h:98
bool write_calibration_input_offsets(uint8_t idx, uint16_t offset_x, uint16_t offset_y) override
Definition mblock_mul.h:76
functions::AD8402 f_gain_ch0_1
Definition mblock_mul.h:64
float read_temperature() const override
Definition mblock_mul.h:84
functions::AD8402 f_gain_ch2_3
Definition mblock_mul.h:65
void reset_overload_flags() override
Definition mblock_mul.h:74
bool write_calibration_output_offset(uint8_t idx, uint16_t offset_z) override
Definition mblock_mul.h:80
std::bitset< 8 > read_overload_flags() override
Definition mblock_mul.h:72
MMulBlockHAL_V_1_M1_X(bus::addr_t block_address)
bool write_calibration_gain(uint8_t idx, uint8_t gain) override
MMulBlock_FullAutoCalibration(SLOT slot, blocks::MMulBlockHAL_FullAutoCalibration *hardware)
MMulBlockHAL_FullAutoCalibration * hardware
Definition mblock_mul.h:120
status calibrate(platform::Cluster *cluster, carrier::Carrier *carrier) override
status write_calibration_to_hardware() override
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 and for c...
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.
Definition functions.h:33
utils::status status
Definition daq.h:21
entities::EntitySharedHardware< MMulBlockHAL > MMulBlockHAL_Parent
Definition mblock_mul.h:17
Definition daq.h:14