REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
mblock_mdr.h
Go to the documentation of this file.
1// Copyright (c) 2025 anabrid GmbH
2// Contact: https://www.anabrid.com/licensing/
3// SPDX-License-Identifier: MIT OR GPL-2.0-or-later
4
5#pragma once
6
7#include "block/mblock_mdr.h"
8#include "chips/AD840X.h"
9#include "chips/DAC60508.h"
10#include "chips/SR74HC16X.h"
11#include "chips/SR74HCT595.h"
12#include "entity/hardware.h"
13
14namespace blocks {
15
17
19protected:
27
28public:
29 explicit MMDRBlockHAL_V_1_0_X(bus::addr_t block_address);
30
31 std::bitset<8> read_overload_flags() override;
32 void reset_overload_flags() override;
33
34 bool write_modes(MMDRBlock::CellMode m0, MMDRBlock::CellMode m1, MMDRBlock::CellMode m2,
35 MMDRBlock::CellMode m3) override;
36
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 bool write_calibration_gain(uint8_t idx, uint8_t gain) override;
40
41public:
42 static constexpr float MIN_OFFSET = -0.1f;
43 static constexpr float MAX_OFFSET = +0.1f;
44
46 static float raw_to_float_calibration(uint16_t raw) {
47 return map(static_cast<float>(raw), functions::DAC60508::RAW_ZERO, functions::DAC60508::RAW_MAX,
49 }
50
52 static uint16_t float_to_raw_calibration(float value) {
53 return static_cast<uint16_t>(roundf(
55 }
56
57 static constexpr inline uint16_t RAW_ZERO = functions::DAC60508::RAW_ZERO;
58 static constexpr inline uint16_t RAW_MAX = functions::DAC60508::RAW_MAX;
59};
60
61} // namespace blocks
const functions::SR74HC16X f_overload_flags
Definition mblock_mdr.h:20
functions::AD8403 f_gain
Definition mblock_mdr.h:24
bool write_calibration_gain(uint8_t idx, uint8_t gain) override
static uint16_t float_to_raw_calibration(float value)
Takes in voltage recieved by multiplier, returns DAC raw value.
Definition mblock_mdr.h:52
std::bitset< 8 > read_overload_flags() override
static constexpr float MIN_OFFSET
Definition mblock_mdr.h:42
static constexpr uint16_t RAW_MAX
Definition mblock_mdr.h:58
const functions::SR74HCT595 f_mode_config
Definition mblock_mdr.h:25
const functions::DAC60508 f_calibration_dac_1
Definition mblock_mdr.h:23
static float raw_to_float_calibration(uint16_t raw)
Takes in DAC raw value, returns voltage recieved by multiplier.
Definition mblock_mdr.h:46
void reset_overload_flags() override
const functions::DAC60508 f_calibration_dac_0
Definition mblock_mdr.h:22
bool write_calibration_output_offset(uint8_t idx, uint16_t offset_z) override
static constexpr uint16_t RAW_ZERO
Definition mblock_mdr.h:57
static constexpr float MAX_OFFSET
Definition mblock_mdr.h:43
const functions::TriggerFunction f_mode_config_sync
Definition mblock_mdr.h:26
const functions::TriggerFunction f_overload_flags_reset
Definition mblock_mdr.h:21
bool write_calibration_input_offsets(uint8_t idx, uint16_t offset_x, uint16_t offset_y) override
bool write_modes(MMDRBlock::CellMode m0, MMDRBlock::CellMode m1, MMDRBlock::CellMode m2, MMDRBlock::CellMode m3) override
MMDRBlockHAL_V_1_0_X(bus::addr_t block_address)
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
The SR74HCT595 is an 8-Bit Shift Register with 3-State Output Registers.
Definition SR74HCT595.h:15
A trigger function exploits the fact that setting an address on the bus triggers an action.
Definition functions.h:33
entities::EntitySharedHardware< MMDRBlockHAL > MMDRBlockHAL_Parent
Definition mblock_mdr.h:16