From eaf6dac0f831a9c732a0ff27b1ef3769f0abbca3 Mon Sep 17 00:00:00 2001 From: Ihor Nehrutsa Date: Mon, 4 Sep 2023 16:10:11 +0300 Subject: [PATCH] esp32/DAC: Add DAC deinit() method. esp32/DAC: Add DAC deinit() method. Signed-off-by: Ihor Nehrutsa --- docs/esp32/quickref.rst | 15 ++++++++++++++- ports/esp32/machine_dac.c | 18 +++++++++++++++++- ports/esp32/main.c | 3 +++ ports/esp32/modmachine.h | 3 +++ 4 files changed, 37 insertions(+), 2 deletions(-) mode change 100644 => 100755 docs/esp32/quickref.rst mode change 100644 => 100755 ports/esp32/machine_dac.c mode change 100644 => 100755 ports/esp32/main.c mode change 100644 => 100755 ports/esp32/modmachine.h diff --git a/docs/esp32/quickref.rst b/docs/esp32/quickref.rst old mode 100644 new mode 100755 index e03a5ffbc9d24..08df25b0554d0 --- a/docs/esp32/quickref.rst +++ b/docs/esp32/quickref.rst @@ -141,7 +141,7 @@ These are working configurations for LAN interfaces of popular boards:: # Olimex ESP32-GATEWAY: power controlled by Pin(5) # Olimex ESP32 PoE and ESP32-PoE ISO: power controlled by Pin(12) - lan = network.LAN(mdc=machine.Pin(23), mdio=machine.Pin(18), power=machine.Pin(5), + lan = network.LAN(mdc=machine.Pin(23), mdio=machine.Pin(18), power=machine.Pin(5), phy_type=network.PHY_LAN8720, phy_addr=0, ref_clk=machine.Pin(17), ref_clk_mode=machine.Pin.OUT) @@ -330,6 +330,19 @@ possible at the same frequency. See more examples in the :ref:`esp32_pwm` tutorial. +DAC (digital to analog conversion) +---------------------------------- + +On the ESP32, DAC functionality is available on pins 25, 26. +On the ESP32S2, DAC functionality is available on pins 17, 18. + +Use the DAC:: + + from machine import DAC, Pin + + dac = DAC(Pin(25)) # create an DAC object acting on a pin + dac.write(128) # set a raw analog value in the range 0-255, 50% now + ADC (analog to digital conversion) ---------------------------------- diff --git a/ports/esp32/machine_dac.c b/ports/esp32/machine_dac.c old mode 100644 new mode 100755 index 0e85dc9c9bfb2..48478438b367d --- a/ports/esp32/machine_dac.c +++ b/ports/esp32/machine_dac.c @@ -87,7 +87,7 @@ STATIC mp_obj_t mdac_write(mp_obj_t self_in, mp_obj_t value_in) { mdac_obj_t *self = self_in; int value = mp_obj_get_int(value_in); if (value < 0 || value > 255) { - mp_raise_ValueError(MP_ERROR_TEXT("value out of range")); + mp_raise_ValueError(MP_ERROR_TEXT("value out of range [0..255]")); } esp_err_t err = dac_output_voltage(self->dac_id, value); @@ -98,8 +98,24 @@ STATIC mp_obj_t mdac_write(mp_obj_t self_in, mp_obj_t value_in) { } MP_DEFINE_CONST_FUN_OBJ_2(mdac_write_obj, mdac_write); +STATIC mp_obj_t mdac_deinit(mp_obj_t self_in) { + mdac_obj_t *self = self_in; + check_esp_err(dac_output_disable(self->dac_id)); + return mp_const_none; +} +MP_DEFINE_CONST_FUN_OBJ_1(mdac_deinit_obj, mdac_deinit); + +// This called from Ctrl-D soft reboot +void machine_dac_deinit_all(void) { + for (int i = 0; i < MP_ARRAY_SIZE(mdac_obj); i++) { + mdac_deinit((mdac_obj_t *)&mdac_obj[i]); + } +} + STATIC const mp_rom_map_elem_t mdac_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_write), MP_ROM_PTR(&mdac_write_obj) }, + { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&mdac_deinit_obj) }, + { MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&mdac_deinit_obj) }, }; STATIC MP_DEFINE_CONST_DICT(mdac_locals_dict, mdac_locals_dict_table); diff --git a/ports/esp32/main.c b/ports/esp32/main.c old mode 100644 new mode 100755 index 044b43655c66b..c9f6e5347201f --- a/ports/esp32/main.c +++ b/ports/esp32/main.c @@ -182,6 +182,9 @@ void mp_task(void *pvParameter) { // deinitialise peripherals machine_pwm_deinit_all(); + #if MICROPY_PY_MACHINE_DAC + machine_dac_deinit_all(); + #endif // TODO: machine_rmt_deinit_all(); machine_pins_deinit(); machine_deinit(); diff --git a/ports/esp32/modmachine.h b/ports/esp32/modmachine.h old mode 100644 new mode 100755 index 06a1d7b0e2b61..40b0d8c18e60d --- a/ports/esp32/modmachine.h +++ b/ports/esp32/modmachine.h @@ -18,6 +18,9 @@ void machine_deinit(void); void machine_pins_init(void); void machine_pins_deinit(void); void machine_pwm_deinit_all(void); +#if MICROPY_PY_MACHINE_DAC +void machine_dac_deinit_all(void); +#endif // TODO: void machine_rmt_deinit_all(void); void machine_timer_deinit_all(void); void machine_i2s_init0(); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy