22 explicit ESP32DAC(uint8_t channel_id = 0,
float init_voltage = 0.0f,
23 float reference_voltage = 3.3f)
24 : channel_id_(channel_id), reference_voltage_(reference_voltage)
27 if ((channel_id_ >= SOC_DAC_CHAN_NUM) || (reference_voltage_ <= 0.0f))
33 dac_ll_power_on(ToChannel(channel_id_));
34 dac_ll_rtc_sync_by_adc(
false);
35 (void)gpio_config_as_analog(
36 static_cast<gpio_num_t
>(dac_periph_signal.dac_channel_io_num[channel_id_]));
37 (void)
Write(init_voltage);
55 else if (voltage > reference_voltage_)
57 voltage = reference_voltage_;
60 constexpr uint32_t MAX_CODE = (1U << SOC_DAC_RESOLUTION) - 1U;
61 const float scale =
static_cast<float>(MAX_CODE) / reference_voltage_;
62 uint32_t code =
static_cast<uint32_t
>((voltage * scale) + 0.5f);
68 dac_ll_update_output_value(ToChannel(channel_id_),
static_cast<uint8_t
>(code));
78 static dac_channel_t ToChannel(uint8_t channel_id)
80 return channel_id == 0 ? DAC_CHAN_0 : DAC_CHAN_1;
85 float reference_voltage_;