Skip to content

Commit

Permalink
esp32/DAC: Add DAC deinit() method.
Browse files Browse the repository at this point in the history
esp32/DAC: Add DAC deinit() method.

Signed-off-by: Ihor Nehrutsa <IhorNehrutsa@gmail.com>
  • Loading branch information
IhorNehrutsa committed Nov 13, 2023
1 parent a00c9d5 commit eaf6dac
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 2 deletions.
15 changes: 14 additions & 1 deletion docs/esp32/quickref.rst
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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)
----------------------------------

Expand Down
18 changes: 17 additions & 1 deletion ports/esp32/machine_dac.c
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand Down
3 changes: 3 additions & 0 deletions ports/esp32/main.c
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
3 changes: 3 additions & 0 deletions ports/esp32/modmachine.h
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down

0 comments on commit eaf6dac

Please sign in to comment.