REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
AD5452.cpp
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 "AD5452.h"
6
7const SPISettings functions::AD5452::DEFAULT_SPI_SETTINGS{4'000'000, MSBFIRST, SPI_MODE1};
8
9functions::AD5452::AD5452(bus::addr_t address, uint8_t alt_function_idx)
10 : DataFunction(address, alt_function_idx, DEFAULT_SPI_SETTINGS) {}
11
12functions::AD5452::AD5452(bus::addr_t base_addr, uint8_t func_addr_shift, uint8_t alt_function_idx)
13 : AD5452(bus::increase_function_idx(base_addr, func_addr_shift), alt_function_idx) {}
14
15uint16_t functions::AD5452::float_to_raw(float scale) {
16 if (scale <= MIN_FACTOR)
17 return RAW_MIN;
18 if (scale >= MAX_FACTOR)
19 return RAW_MAX;
20
21 return static_cast<uint16_t>(roundf(map(scale, MIN_FACTOR, MAX_FACTOR, RAW_MIN, RAW_MAX)));
22}
23
25 return map(static_cast<float>(raw), RAW_MIN, RAW_MAX, MIN_FACTOR, MAX_FACTOR);
26}
27
28void functions::AD5452::set_scale(uint16_t scale_raw) {
30 // AD5452 expects at least 13ns delay between chip select and data
31 delayNanoseconds(15);
32 bus::spi.transfer16(scale_raw << 2);
34}
35
36void functions::AD5452::set_scale(float scale) { return set_scale(float_to_raw(scale)); }
static constexpr uint16_t RAW_MAX
Definition AD5452.h:24
void set_scale(float scale)
Value gets clamped to min and max values.
Definition AD5452.cpp:36
static uint16_t float_to_raw(float scale)
Definition AD5452.cpp:15
AD5452(bus::addr_t address, uint8_t alt_function_idx)
Definition AD5452.cpp:9
static const SPISettings DEFAULT_SPI_SETTINGS
Definition AD5452.h:7
static constexpr float MAX_FACTOR
Definition AD5452.h:21
static float raw_to_float(uint16_t raw)
Definition AD5452.cpp:24
static constexpr uint16_t RAW_MIN
Definition AD5452.h:23
DataFunction(bus::addr_t address, uint8_t alt_function_idx, const SPISettings &spiSettings)
Definition functions.cpp:24
static constexpr float MIN_FACTOR
Definition AD5452.h:20
void end_communication() const
Definition functions.cpp:60
void begin_communication() const
Definition functions.cpp:31
const bus::addr_t address
Definition functions.h:23
Definition bus.h:21
SPIClass & spi
Definition bus.cpp:10