REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
DAC60508.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#pragma once
6
7#include "bus/bus.h"
8#include <bus/functions.h>
9
10namespace functions {
11
17class DAC60508 : public DataFunction {
18public:
19 static constexpr uint8_t REG_NOOP = 0;
20 static constexpr uint8_t REG_DEVICE_ID = 1;
21 static constexpr uint8_t REG_SYNC = 2;
22 static constexpr uint8_t REG_CONFIG = 3;
23 static constexpr uint8_t REG_GAIN = 4;
24 static constexpr uint8_t REG_TRIGGER = 5;
25 static constexpr uint8_t REG_BROADCAST = 6;
26 static constexpr uint8_t REG_STATUS = 7;
27
28 static constexpr uint8_t REG_DAC(const uint8_t i) { return 8 + i; };
29
30 static constexpr uint16_t RAW_ZERO = 0x0;
31 static constexpr uint16_t RAW_MAX = 0x0FFF;
32
33 static const SPISettings DEFAULT_SPI_SETTINGS;
34
36 explicit DAC60508(bus::addr_t address, float reference_voltage = 2.5f);
37
39 uint16_t float_to_raw(float value) const;
40 float raw_to_float(uint16_t value) const;
41
43 bool set_channel_raw(uint8_t idx, uint16_t value) const;
44 bool set_channel(uint8_t idx, float value) const;
45
46 bool init() const;
47
48 bool set_external_reference(bool set = true) const;
49 bool set_double_gain(uint8_t idx, bool set = true) const;
50 bool set_double_gain(bool set = true) const;
51
52private:
53 uint16_t read_register(uint8_t address) const;
54 bool write_register(uint8_t address, uint16_t data) const;
55
56 const float v_ref;
57};
58
59} // namespace functions
The DAC60508 is the 12-Bit 8-channel DAC, used in the MInt-Block for the initial conditions.
Definition DAC60508.h:17
bool set_double_gain(uint8_t idx, bool set=true) const
Definition DAC60508.cpp:77
static constexpr uint8_t REG_NOOP
Definition DAC60508.h:19
static constexpr uint8_t REG_STATUS
Definition DAC60508.h:26
static constexpr uint8_t REG_GAIN
Definition DAC60508.h:23
static constexpr uint8_t REG_BROADCAST
Definition DAC60508.h:25
static constexpr uint8_t REG_DAC(const uint8_t i)
Definition DAC60508.h:28
static constexpr uint8_t REG_TRIGGER
Definition DAC60508.h:24
static constexpr uint8_t REG_CONFIG
Definition DAC60508.h:22
DAC60508(bus::addr_t address, float reference_voltage=2.5f)
Definition DAC60508.cpp:33
static constexpr uint8_t REG_DEVICE_ID
Definition DAC60508.h:20
static constexpr uint8_t REG_SYNC
Definition DAC60508.h:21
bool set_channel(uint8_t idx, float value) const
Definition DAC60508.cpp:54
bool set_channel_raw(uint8_t idx, uint16_t value) const
Raw value can be between RAW_ZERO and RAW_MAX.
Definition DAC60508.cpp:48
bool set_external_reference(bool set=true) const
Definition DAC60508.cpp:68
uint16_t float_to_raw(float value) const
Value gets clamped to min and max values.
Definition DAC60508.cpp:36
static constexpr uint16_t RAW_ZERO
Definition DAC60508.h:30
bool init() const
Definition DAC60508.cpp:58
float raw_to_float(uint16_t value) const
Definition DAC60508.cpp:44
static constexpr uint16_t RAW_MAX
Definition DAC60508.h:31
static const SPISettings DEFAULT_SPI_SETTINGS
Definition DAC60508.h:7
A DataFunction class wraps SPI communication over the digital bus.
Definition functions.h:47
DataFunction(bus::addr_t address, const SPISettings &spiSettings)
Definition functions.cpp:16
const bus::addr_t address
Definition functions.h:23
namespace for internal helpers
Definition icmd.h:6