From d73c64a2a55a7051e19b65a07a4fd3545e833d9f Mon Sep 17 00:00:00 2001 From: Alexey Zholtikov Date: Mon, 8 Dec 2025 09:46:40 +0300 Subject: [PATCH] wip: --- zh_ac_dimmer.c | 61 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 21 deletions(-) diff --git a/zh_ac_dimmer.c b/zh_ac_dimmer.c index 53b72e8..1b06e96 100755 --- a/zh_ac_dimmer.c +++ b/zh_ac_dimmer.c @@ -25,7 +25,7 @@ static volatile uint8_t _dimmer_value = 0; static volatile bool _is_dimmer_work = false; static bool _is_initialized = false; static bool _is_prev_gpio_isr_handler = false; -// static bool _is_zero_crossing = false; +static bool _is_zero_crossing = false; static esp_err_t _zh_ac_dimmer_validate_config(const zh_ac_dimmer_init_config_t *config); static esp_err_t _zh_ac_dimmer_gpio_init(const zh_ac_dimmer_init_config_t *config); @@ -148,7 +148,7 @@ static esp_err_t _zh_ac_dimmer_gpio_init(const zh_ac_dimmer_init_config_t *confi .intr_type = GPIO_INTR_POSEDGE, .mode = GPIO_MODE_INPUT, .pin_bit_mask = (1ULL << config->zero_cross_gpio), - .pull_down_en = GPIO_PULLDOWN_DISABLE, + .pull_down_en = GPIO_PULLDOWN_ENABLE, .pull_up_en = GPIO_PULLUP_DISABLE, }; err = gpio_config(&zero_cross_gpio_config); @@ -197,18 +197,36 @@ static void IRAM_ATTR _zh_ac_dimmer_isr_handler(void *arg) return; } uint64_t _current_us = esp_timer_get_time(); - if (_current_us - _prev_us <= _init_config.glitch_filter) + if (_current_us - _prev_us <= 1000) { - _prev_us = _current_us; + // _prev_us = _current_us; return; } - gpio_set_level(_init_config.triac_gpio, 0); - _current_period_us = _current_us - _prev_us; - _prev_us = _current_us; // if (_is_zero_crossing == false) // { + // _is_zero_crossing = true; + gpio_set_level(_init_config.triac_gpio, 0); + // _current_period_us = _current_us - _prev_us; + _prev_us = _current_us; + if (_dimmer_value != 0) + { + if (_dimmer_value == 100) + { + gpio_set_level(_init_config.triac_gpio, 1); + return; + } + // _alarm_config.alarm_count = (uint64_t)(((_current_period_us / 110) * (100 - _dimmer_value)) + _zero_cross_us); + _alarm_config.alarm_count = (uint64_t)((1000000 / (_init_config.ac_frequency * 200)) * (100 - _dimmer_value)); + // _alarm_config.alarm_count = (uint64_t)((_current_period_us / 100) * (100 - _dimmer_value)); + _alarm_config.flags.auto_reload_on_alarm = false; + gptimer_set_alarm_action(_dimmer_timer, &_alarm_config); + gptimer_start(_dimmer_timer); + } // } // gpio_set_level(_init_config.triac_gpio, 0); + // _current_period_us = _current_us - _prev_us; + // _prev_us = _current_us; + // gpio_set_level(_init_config.triac_gpio, 0); // uint64_t _current_us = esp_timer_get_time(); // _current_period_us = (uint32_t)(_current_us - _prev_us); // _prev_us = _current_us; @@ -221,20 +239,20 @@ static void IRAM_ATTR _zh_ac_dimmer_isr_handler(void *arg) // _current_period_us = _prev_period_us; // } // _prev_period_us = _current_period_us; - if (_dimmer_value != 0) - { - if (_dimmer_value == 100) - { - gpio_set_level(_init_config.triac_gpio, 1); - return; - } - // _alarm_config.alarm_count = (uint64_t)(((_current_period_us / 110) * (100 - _dimmer_value)) + _zero_cross_us); - // _alarm_config.alarm_count = (uint64_t)((1 / (_init_config.ac_frequency * 200)) * (100 - _dimmer_value)); - _alarm_config.alarm_count = (uint64_t)((_current_period_us / 100) * (100 - _dimmer_value)); - _alarm_config.flags.auto_reload_on_alarm = false; - gptimer_set_alarm_action(_dimmer_timer, &_alarm_config); - gptimer_start(_dimmer_timer); - } + // if (_dimmer_value != 0) + // { + // if (_dimmer_value == 100) + // { + // gpio_set_level(_init_config.triac_gpio, 1); + // return; + // } + // // _alarm_config.alarm_count = (uint64_t)(((_current_period_us / 110) * (100 - _dimmer_value)) + _zero_cross_us); + // _alarm_config.alarm_count = (uint64_t)((1 / (_init_config.ac_frequency * 200)) * (100 - _dimmer_value)); + // // _alarm_config.alarm_count = (uint64_t)((_current_period_us / 100) * (100 - _dimmer_value)); + // _alarm_config.flags.auto_reload_on_alarm = false; + // gptimer_set_alarm_action(_dimmer_timer, &_alarm_config); + // gptimer_start(_dimmer_timer); + // } } static bool IRAM_ATTR _zh_ac_dimmer_timer_on_alarm_cb(gptimer_handle_t timer, const gptimer_alarm_event_data_t *edata, void *user_ctx) @@ -242,5 +260,6 @@ static bool IRAM_ATTR _zh_ac_dimmer_timer_on_alarm_cb(gptimer_handle_t timer, co gpio_set_level(_init_config.triac_gpio, 1); gptimer_stop(_dimmer_timer); gptimer_set_raw_count(_dimmer_timer, 0); + // _is_zero_crossing = false; return true; } \ No newline at end of file