23 explicit ESP32DAC(uint8_t channel_id = 0,
float init_voltage = 0.0f,
24 float reference_voltage = 3.3f)
25 : channel_id_(channel_id), reference_voltage_(reference_voltage)
28 if ((channel_id_ >= SOC_DAC_CHAN_NUM) || (reference_voltage_ <= 0.0f))
34 dac_ll_power_on(ToChannel(channel_id_));
35 dac_ll_rtc_sync_by_adc(
false);
36 (void)gpio_config_as_analog(
37 static_cast<gpio_num_t
>(dac_periph_signal.dac_channel_io_num[channel_id_]));
38 (void)
Write(init_voltage);
57 else if (voltage > reference_voltage_)
59 voltage = reference_voltage_;
62 constexpr uint32_t kMaxCode = (1U << SOC_DAC_RESOLUTION) - 1U;
63 const float scale =
static_cast<float>(kMaxCode) / reference_voltage_;
64 uint32_t code =
static_cast<uint32_t
>((voltage * scale) + 0.5f);
70 dac_ll_update_output_value(ToChannel(channel_id_),
static_cast<uint8_t
>(code));
80 static dac_channel_t ToChannel(uint8_t channel_id)
82 return channel_id == 0 ? DAC_CHAN_0 : DAC_CHAN_1;
87 float reference_voltage_;