From d5c3b9a17317ee63b1ae92fe1aaed3beaa1a6afe Mon Sep 17 00:00:00 2001 From: vickash Date: Wed, 24 Jul 2024 22:50:20 -0400 Subject: [PATCH 1/2] Fix IncrementalEncoder overflow on ESP32 --- ports/espressif/common-hal/rotaryio/IncrementalEncoder.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ports/espressif/common-hal/rotaryio/IncrementalEncoder.c b/ports/espressif/common-hal/rotaryio/IncrementalEncoder.c index c8d1556fc68ba..105e3a10d2906 100644 --- a/ports/espressif/common-hal/rotaryio/IncrementalEncoder.c +++ b/ports/espressif/common-hal/rotaryio/IncrementalEncoder.c @@ -23,15 +23,19 @@ void common_hal_rotaryio_incrementalencoder_construct(rotaryio_incrementalencode // in CircuitPython. pcnt_unit_config_t unit_config = { // Set counter limit - .low_limit = -INT16_MAX, + .low_limit = INT16_MIN, .high_limit = INT16_MAX }; - // The pulse count driver automatically counts roll overs. + // Enable PCNT internal accumulator to count overflows. unit_config.flags.accum_count = true; // initialize PCNT CHECK_ESP_RESULT(pcnt_new_unit(&unit_config, &self->unit)); + // Set low and high watchpoints, to auto-accumulate overflows. Reflected in pcnt_unit_get_count(). + pcnt_unit_add_watch_point(self->unit, INT16_MAX); + pcnt_unit_add_watch_point(self->unit, INT16_MIN); + pcnt_chan_config_t channel_a_config = { .edge_gpio_num = pin_a->number, .level_gpio_num = pin_b->number From 260a3d8b853e34496269d0141720321bf84bf5a7 Mon Sep 17 00:00:00 2001 From: vickash Date: Wed, 24 Jul 2024 23:12:57 -0400 Subject: [PATCH 2/2] Fix formatting in espressif IncrementalEncoder --- ports/espressif/common-hal/rotaryio/IncrementalEncoder.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/espressif/common-hal/rotaryio/IncrementalEncoder.c b/ports/espressif/common-hal/rotaryio/IncrementalEncoder.c index 105e3a10d2906..4ae5f019dc8c9 100644 --- a/ports/espressif/common-hal/rotaryio/IncrementalEncoder.c +++ b/ports/espressif/common-hal/rotaryio/IncrementalEncoder.c @@ -23,7 +23,7 @@ void common_hal_rotaryio_incrementalencoder_construct(rotaryio_incrementalencode // in CircuitPython. pcnt_unit_config_t unit_config = { // Set counter limit - .low_limit = INT16_MIN, + .low_limit = INT16_MIN, .high_limit = INT16_MAX }; // Enable PCNT internal accumulator to count overflows.