Browse Source

esp32/esp32_rmt: Add RMT.PULSE_MAX constant.

If you have a variable frequency and pulse width, and you want to optimize
pulse resolution, then you must do a calculation beforehand to ensure you
normalize the array to keep all list values within bound.  That calculation
requires RMT.source_freq(), RMT.clock_div(), and this 32767 constant.

Signed-off-by: Mark Blakeney <mark.blakeney@bullet-systems.net>
pull/12784/head
Mark Blakeney 1 year ago
committed by Damien George
parent
commit
2888c5b230
  1. 17
      docs/library/esp32.rst
  2. 3
      ports/esp32/esp32_rmt.c

17
docs/library/esp32.rst

@ -193,7 +193,7 @@ numbers specified in ``write_pulses`` are multiplied by the resolution to
define the pulses. define the pulses.
``clock_div`` is an 8-bit divider (0-255) and each pulse can be defined by ``clock_div`` is an 8-bit divider (0-255) and each pulse can be defined by
multiplying the resolution by a 15-bit (0-32,768) number. There are eight multiplying the resolution by a 15-bit (1-``PULSE_MAX``) number. There are eight
channels (0-7) and each can have a different clock divider. channels (0-7) and each can have a different clock divider.
So, in the example above, the 80MHz clock is divided by 8. Thus the So, in the example above, the 80MHz clock is divided by 8. Thus the
@ -264,10 +264,10 @@ For more details see Espressif's `ESP-IDF RMT documentation.
**Mode 3:** *duration* and *data* are lists or tuples of equal length, **Mode 3:** *duration* and *data* are lists or tuples of equal length,
specifying individual durations and the output level for each. specifying individual durations and the output level for each.
Durations are in integer units of the channel resolution (as described Durations are in integer units of the channel resolution (as
above), between 1 and 32767 units. Output levels are any value that can described above), between 1 and ``PULSE_MAX`` units. Output levels
be converted to a boolean, with ``True`` representing high voltage and are any value that can be converted to a boolean, with ``True``
``False`` representing low. representing high voltage and ``False`` representing low.
If transmission of an earlier sequence is in progress then this method will If transmission of an earlier sequence is in progress then this method will
block until that transmission is complete before beginning the new sequence. block until that transmission is complete before beginning the new sequence.
@ -290,6 +290,13 @@ For more details see Espressif's `ESP-IDF RMT documentation.
Passing in no argument will not change the channel. This function returns Passing in no argument will not change the channel. This function returns
the current channel number. the current channel number.
Constants
---------
.. data:: RMT.PULSE_MAX
Maximum integer that can be set for a pulse duration.
Ultra-Low-Power co-processor Ultra-Low-Power co-processor
---------------------------- ----------------------------

3
ports/esp32/esp32_rmt.c

@ -368,6 +368,9 @@ STATIC const mp_rom_map_elem_t esp32_rmt_locals_dict_table[] = {
// Class methods // Class methods
{ MP_ROM_QSTR(MP_QSTR_source_freq), MP_ROM_PTR(&esp32_rmt_source_obj) }, { MP_ROM_QSTR(MP_QSTR_source_freq), MP_ROM_PTR(&esp32_rmt_source_obj) },
// Constants
{ MP_ROM_QSTR(MP_QSTR_PULSE_MAX), MP_ROM_INT(32767) },
}; };
STATIC MP_DEFINE_CONST_DICT(esp32_rmt_locals_dict, esp32_rmt_locals_dict_table); STATIC MP_DEFINE_CONST_DICT(esp32_rmt_locals_dict, esp32_rmt_locals_dict_table);

Loading…
Cancel
Save