diff --git a/zh_avr_ac_dimmer.c b/zh_avr_ac_dimmer.c index 2f0122b..a11fd76 100644 --- a/zh_avr_ac_dimmer.c +++ b/zh_avr_ac_dimmer.c @@ -1,5 +1,5 @@ #include "zh_avr_ac_dimmer.h" - +// https://avr-start.ru/?p=3983 static zh_avr_ac_dimmer_init_config_t _init_config = {0}; volatile static bool _is_dimmer_work = false; volatile static uint8_t _dimmer_value = 0; @@ -48,27 +48,28 @@ avr_err_t zh_avr_ac_dimmer_set(uint8_t value) void zh_avr_ac_dimmer_isr_handler(void) { - uint8_t flag = false; + bool flag = false; switch (_init_config.zero_cross_port) { case AVR_PORTB: - if ((PINB & (1 << _init_config.zero_cross_gpio)) == 0) + if ((PINB & (1 << _init_config.zero_cross_gpio)) == (1 << _init_config.zero_cross_gpio)) { flag = true; } break; case AVR_PORTC: - if ((PINC & (1 << _init_config.zero_cross_gpio)) == 0) + if ((PINC & (1 << _init_config.zero_cross_gpio)) == (1 << _init_config.zero_cross_gpio)) { flag = true; } break; case AVR_PORTD: - if ((PIND & (1 << _init_config.zero_cross_gpio)) == 0) + if ((PIND & (1 << _init_config.zero_cross_gpio)) == (1 << _init_config.zero_cross_gpio)) { flag = true; } break; + default: break; } @@ -101,9 +102,11 @@ void zh_avr_ac_dimmer_isr_handler(void) } else { + cli(); TCNT0 = 0; - TIFR0 = (1 << OCF0A); + // TIFR0 = (1 << OCF0A); TIMSK0 |= (1 << OCIE0A); + sei(); } } } @@ -235,6 +238,7 @@ static avr_err_t _zh_avr_ac_dimmer_timer_init(void) ISR(TIMER0_COMPA_vect) { + ++_dimmer_count; if (_dimmer_count >= (100 - _dimmer_value)) { _dimmer_count = 0; @@ -259,5 +263,5 @@ ISR(TIMER0_COMPA_vect) break; } } - ++_dimmer_count; + // ++_dimmer_count; } \ No newline at end of file