REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
AD9834.h
Go to the documentation of this file.
1// Copyright (c) 2024 anabrid GmbH
2// Contact: https://www.anabrid.com/licensing/
3//
4// SPDX-License-Identifier: MIT OR GPL-2.0-or-later
5
6#pragma once
7
8#include <bus/bus.h>
9#include <bus/functions.h>
10#include <lucidac/wave.h>
11
12namespace functions {
13
14class AD9834 : public DataFunction {
15public:
16 static const SPISettings DEFAULT_SPI_SETTINGS;
17
18 static constexpr uint16_t REG_FREQ_0 = 0x4000;
19 static constexpr uint16_t REG_FREQ_1 = 0x8000;
20 static constexpr uint16_t REG_PHASE_0 = 0xC000;
21 static constexpr uint16_t REG_PHASE_1 = 0xE000;
22
23 static constexpr uint16_t REG_FREQ_MASK = 0x3FFF;
24 static constexpr uint16_t REG_PHASE_MASK = 0x0FFF;
25
26 static constexpr uint16_t CONTROL_B28 = 0x2000;
27 static constexpr uint16_t CONTROL_HLB = 0x1000;
28 static constexpr uint16_t CONTROL_FSEL = 0x0800;
29 static constexpr uint16_t CONTROL_PSEL = 0x0400;
30 static constexpr uint16_t CONTROL_PINSW = 0x0200; // Enables pin control mode
31 static constexpr uint16_t CONTROL_RESET = 0x0100;
32 static constexpr uint16_t CONTROL_SLEEP1 = 0x0080;
33 static constexpr uint16_t CONTROL_SLEEP12 = 0x0040;
34 static constexpr uint16_t CONTROL_OPBITEN = 0x0020; // Enables square wave
35 static constexpr uint16_t CONTROL_SIGNPIB = 0x0010;
36 static constexpr uint16_t CONTROL_DIV2 = 0x0008;
37 static constexpr uint16_t CONTROL_MODE = 0x0002; // Changes output mode to triangle
38
39 static constexpr uint16_t ENABLE_SQUARE_WAVE = CONTROL_OPBITEN;
40 static constexpr uint16_t ENABLE_TRIANGLE_WAVE = CONTROL_MODE;
41
42 static constexpr float MASTER_CLK = 75000000.0f;
43
45 explicit AD9834(bus::addr_t address);
46
48 bool init();
51 void write_frequency(float freq);
53 void write_phase(float phase);
55 void write_wave_form(WaveForm wave_form);
56
58 float get_real_frequency() const;
60 float get_real_phase() const;
61
63 void sleep();
65 void awake();
66
67private:
68 uint16_t control_register = 0;
69 uint32_t freq_register = 0;
70 uint16_t phase_register = 0;
71
72 void _write_control_register() const;
73};
74
75} // namespace functions
static constexpr uint16_t ENABLE_TRIANGLE_WAVE
Definition AD9834.h:40
static constexpr float MASTER_CLK
Definition AD9834.h:42
static constexpr uint16_t CONTROL_FSEL
Definition AD9834.h:28
static constexpr uint16_t REG_PHASE_MASK
Definition AD9834.h:24
static constexpr uint16_t REG_PHASE_1
Definition AD9834.h:21
static constexpr uint16_t CONTROL_MODE
Definition AD9834.h:37
void write_phase(float phase)
Sets the phase of the outputs synchronised to the reset pin. Possible values are mapped to [0,...
Definition AD9834.cpp:69
static constexpr uint16_t CONTROL_SLEEP12
Definition AD9834.h:33
static constexpr uint16_t CONTROL_PINSW
Definition AD9834.h:30
void awake()
Resumes outputs to regular operation, according to the previously specified frequencies.
Definition AD9834.cpp:35
static constexpr uint16_t REG_FREQ_MASK
Definition AD9834.h:23
static constexpr uint16_t CONTROL_PSEL
Definition AD9834.h:29
static constexpr uint16_t CONTROL_SLEEP1
Definition AD9834.h:32
void write_frequency(float freq)
Sets the frequency of the sine / triangle output in Hz.
Definition AD9834.cpp:60
float get_real_phase() const
Returns the actually set phase, containing rounding errors. Possible values are [0,...
Definition AD9834.cpp:81
void write_wave_form(WaveForm wave_form)
Sets the wave form of the function generator output.
Definition AD9834.cpp:42
void sleep()
Sets the sine / triangle output to zero. The square output will stay at high or low level.
Definition AD9834.cpp:28
AD9834(bus::addr_t address)
Definition AD9834.cpp:10
bool init()
Initialises the chip and puts it into sleep mode.
Definition AD9834.cpp:12
static constexpr uint16_t CONTROL_DIV2
Definition AD9834.h:36
static constexpr uint16_t REG_FREQ_1
Definition AD9834.h:19
static constexpr uint16_t CONTROL_OPBITEN
Definition AD9834.h:34
static constexpr uint16_t CONTROL_B28
Definition AD9834.h:26
static constexpr uint16_t REG_FREQ_0
Definition AD9834.h:18
static const SPISettings DEFAULT_SPI_SETTINGS
Definition AD9834.h:8
static constexpr uint16_t ENABLE_SQUARE_WAVE
Definition AD9834.h:39
static constexpr uint16_t CONTROL_HLB
Definition AD9834.h:27
float get_real_frequency() const
Returns the actually set frequency, containing rounding errors.
Definition AD9834.cpp:77
static constexpr uint16_t CONTROL_SIGNPIB
Definition AD9834.h:35
static constexpr uint16_t CONTROL_RESET
Definition AD9834.h:31
static constexpr uint16_t REG_PHASE_0
Definition AD9834.h:20
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
uint32_t
Definition flasher.cpp:195
namespace for internal helpers
Definition icmd.h:6