From 07868460402077bc025f7b19068e5421273e514b Mon Sep 17 00:00:00 2001 From: Alexey Zholtikov Date: Sun, 12 Oct 2025 10:35:39 +0300 Subject: [PATCH] wip: --- lib/zh_avr_ac_dimmer | 2 +- src/ate0003.c | 127 +++++++++++++++++++++++-------------------- src/ate0003.h | 1 - 3 files changed, 68 insertions(+), 62 deletions(-) diff --git a/lib/zh_avr_ac_dimmer b/lib/zh_avr_ac_dimmer index 4bad258..41c2373 160000 --- a/lib/zh_avr_ac_dimmer +++ b/lib/zh_avr_ac_dimmer @@ -1 +1 @@ -Subproject commit 4bad25892a7bb6b3649d3962f5b723ad740f32dc +Subproject commit 41c23732f297d311a586dec2e457d3b1aa530fdd diff --git a/src/ate0003.c b/src/ate0003.c index b1fd0bd..0278ed1 100644 --- a/src/ate0003.c +++ b/src/ate0003.c @@ -8,9 +8,9 @@ // #define DEBUG -#define SYSTEM_SETUP_STACK 173 -#define ENCODER_STACK 171 -#define PCF8574_STACK 116 +#define SYSTEM_SETUP_STACK 189 +#define ENCODER_STACK 165 +#define PCF8574_STACK 105 const char *component_cmm[] = {component_1_cmm, component_2_cmm, component_3_cmm, component_4_cmm, component_5_cmm}; const char *component_line_1[] = {component_1_line_1, component_2_line_1, component_3_line_1, component_4_line_1, component_5_line_1}; @@ -34,6 +34,8 @@ FILE uart = FDEV_SETUP_STREAM(usart, NULL, _FDEV_SETUP_WRITE); void system_setup_task(void *pvParameters); void component_setup_function(uint8_t component); +void relay_on_function(uint8_t relay_number); +void relay_off_function(uint8_t relay_number); TaskHandle_t system_setup_task_handle = {0}; @@ -75,7 +77,7 @@ int main(void) #ifdef DEBUG void vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName) { - printf("Task %s Stack Owerflow %d.\n", pcTaskName); + printf("Task %s Stack Owerflow.\n", pcTaskName); printf("Free Heap %d.\n", xPortGetFreeHeapSize()); } #endif @@ -153,7 +155,7 @@ void system_setup_task(void *pvParameters) encoder_init_config.b_gpio_number = PORTC1; encoder_init_config.encoder_min_value = 0; encoder_init_config.encoder_max_value = 100; - encoder_init_config.encoder_step = 1; + encoder_init_config.encoder_step = 5; encoder_init_config.encoder_number = POWER_ENCODER; zh_avr_encoder_init(&encoder_init_config, &power_encoder_handle); zh_avr_encoder_set(&power_encoder_handle, 100); @@ -225,21 +227,16 @@ void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event) } if (event->gpio_level == LOW) { - is_work = true; if (is_num1_fixed == true) { break; } zh_avr_pcf8574_write_gpio(&led1_handle, NUM1_LED_BLUE, LED_OFF); zh_avr_pcf8574_write_gpio(&led1_handle, NUM1_LED_GREEN, LED_ON); - zh_avr_pcf8574_write_gpio(&relay_handle, L1_RELAY, RELAY_ON); - zh_avr_pcf8574_write_gpio(&relay_handle, GROUND_RELAY, RELAY_ON); // Temporary. - vTaskDelay(10); // Temporary. - zh_avr_ac_dimmer_start(); // Temporary. + relay_on_function(L1_RELAY); } else { - // is_work = false; if (is_fix == true) { is_num1_fixed = true; @@ -247,11 +244,7 @@ void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event) } zh_avr_pcf8574_write_gpio(&led1_handle, NUM1_LED_BLUE, LED_ON); zh_avr_pcf8574_write_gpio(&led1_handle, NUM1_LED_GREEN, LED_OFF); - zh_avr_ac_dimmer_stop(); // Temporary. - vTaskDelay(1); // Temporary. - zh_avr_pcf8574_write_gpio(&relay_handle, L1_RELAY, RELAY_OFF); - zh_avr_pcf8574_write_gpio(&relay_handle, GROUND_RELAY, RELAY_OFF); // Temporary. - is_work = false; + relay_off_function(L1_RELAY); is_num1_fixed = false; } break; @@ -262,21 +255,16 @@ void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event) } if (event->gpio_level == LOW) { - is_work = true; if (is_num2_fixed == true) { break; } zh_avr_pcf8574_write_gpio(&led1_handle, NUM2_LED_BLUE, LED_OFF); zh_avr_pcf8574_write_gpio(&led1_handle, NUM2_LED_GREEN, LED_ON); - zh_avr_pcf8574_write_gpio(&relay_handle, L2_RELAY, RELAY_ON); - // zh_avr_pcf8574_write_gpio(&relay_handle, GROUND_RELAY, RELAY_ON); // Temporary. - // vTaskDelay(10); // Temporary. - // zh_avr_ac_dimmer_start(); // Temporary. + relay_on_function(L2_RELAY); } else { - is_work = false; if (is_fix == true) { is_num2_fixed = true; @@ -284,10 +272,7 @@ void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event) } zh_avr_pcf8574_write_gpio(&led1_handle, NUM2_LED_BLUE, LED_ON); zh_avr_pcf8574_write_gpio(&led1_handle, NUM2_LED_GREEN, LED_OFF); - // zh_avr_ac_dimmer_stop(); // Temporary. - // vTaskDelay(1); // Temporary. - zh_avr_pcf8574_write_gpio(&relay_handle, L2_RELAY, RELAY_OFF); - // zh_avr_pcf8574_write_gpio(&relay_handle, GROUND_RELAY, RELAY_OFF); // Temporary. + relay_off_function(L2_RELAY); is_num2_fixed = false; } break; @@ -298,18 +283,16 @@ void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event) } if (event->gpio_level == LOW) { - is_work = true; if (is_num3_fixed == true) { break; } zh_avr_pcf8574_write_gpio(&led2_handle, NUM3_LED_BLUE, LED_OFF); zh_avr_pcf8574_write_gpio(&led2_handle, NUM3_LED_GREEN, LED_ON); - zh_avr_pcf8574_write_gpio(&relay_handle, L3_RELAY, RELAY_ON); + relay_on_function(L3_RELAY); } else { - is_work = false; if (is_fix == true) { is_num3_fixed = true; @@ -317,7 +300,7 @@ void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event) } zh_avr_pcf8574_write_gpio(&led2_handle, NUM3_LED_BLUE, LED_ON); zh_avr_pcf8574_write_gpio(&led2_handle, NUM3_LED_GREEN, LED_OFF); - zh_avr_pcf8574_write_gpio(&relay_handle, L3_RELAY, RELAY_OFF); + relay_off_function(L3_RELAY); is_num3_fixed = false; } break; @@ -328,18 +311,16 @@ void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event) } if (event->gpio_level == LOW) { - is_work = true; if (is_num4_fixed == true) { break; } zh_avr_pcf8574_write_gpio(&led2_handle, NUM4_LED_BLUE, LED_OFF); zh_avr_pcf8574_write_gpio(&led2_handle, NUM4_LED_GREEN, LED_ON); - zh_avr_pcf8574_write_gpio(&relay_handle, L4_RELAY, RELAY_ON); + relay_on_function(L4_RELAY); } else { - is_work = false; if (is_fix == true) { is_num4_fixed = true; @@ -347,7 +328,7 @@ void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event) } zh_avr_pcf8574_write_gpio(&led2_handle, NUM4_LED_BLUE, LED_ON); zh_avr_pcf8574_write_gpio(&led2_handle, NUM4_LED_GREEN, LED_OFF); - zh_avr_pcf8574_write_gpio(&relay_handle, L4_RELAY, RELAY_OFF); + relay_off_function(L4_RELAY); is_num4_fixed = false; } break; @@ -386,24 +367,17 @@ ISR(PCINT1_vect) { return; } - // BaseType_t xHigherPriorityTaskWoken = pdFALSE; - zh_avr_encoder_isr_handler(&power_encoder_handle); - // if (zh_avr_encoder_isr_handler(&power_encoder_handle) == pdTRUE) - // { - // xHigherPriorityTaskWoken = pdTRUE; - // } + if (zh_avr_encoder_isr_handler(&power_encoder_handle) == pdTRUE) + { + portYIELD(); + } if (is_work == false) { - zh_avr_encoder_isr_handler(&component_encoder_handle); - // if (zh_avr_encoder_isr_handler(&component_encoder_handle) == pdTRUE) - // { - // xHigherPriorityTaskWoken = pdTRUE; - // } + if (zh_avr_encoder_isr_handler(&component_encoder_handle) == pdTRUE) + { + portYIELD(); + } } - // if (xHigherPriorityTaskWoken == pdTRUE) - // { - // portYIELD(); - // } } ISR(PCINT2_vect) @@ -412,18 +386,11 @@ ISR(PCINT2_vect) { return; } - // BaseType_t xHigherPriorityTaskWoken = pdFALSE; - zh_avr_pcf8574_isr_handler(); zh_avr_ac_dimmer_isr_handler(); - // zh_avr_pcf8574_isr_handler(); - // if (zh_avr_pcf8574_isr_handler() == pdTRUE) - // { - // xHigherPriorityTaskWoken = pdTRUE; - // } - // if (xHigherPriorityTaskWoken == pdTRUE) - // { - // portYIELD(); - // } + if (zh_avr_pcf8574_isr_handler() == pdTRUE) + { + portYIELD(); + } } void component_setup_function(uint8_t component) @@ -457,4 +424,44 @@ void component_setup_function(uint8_t component) { zh_avr_pcf8574_write_gpio(&led2_handle, NUM4_LED_BLUE, LED_ON); } +} + +void relay_on_function(uint8_t relay_number) +{ + if (++used_channels > 1) // If any other channel already work. + { + zh_avr_ac_dimmer_stop(); + vTaskDelay(1); + zh_avr_pcf8574_write_gpio(&relay_handle, relay_number, RELAY_ON); + vTaskDelay(10); + zh_avr_ac_dimmer_start(); + } + else + { + is_work = true; + zh_avr_pcf8574_write_gpio(&relay_handle, relay_number, RELAY_ON); + zh_avr_pcf8574_write_gpio(&relay_handle, GROUND_RELAY, RELAY_ON); + vTaskDelay(10); + zh_avr_ac_dimmer_start(); + } +} + +void relay_off_function(uint8_t relay_number) +{ + if (--used_channels > 0) // If any other channel already work. + { + zh_avr_ac_dimmer_stop(); + vTaskDelay(1); + zh_avr_pcf8574_write_gpio(&relay_handle, relay_number, RELAY_OFF); + vTaskDelay(10); + zh_avr_ac_dimmer_start(); + } + else + { + zh_avr_ac_dimmer_stop(); + vTaskDelay(1); + zh_avr_pcf8574_write_gpio(&relay_handle, relay_number, RELAY_OFF); + zh_avr_pcf8574_write_gpio(&relay_handle, GROUND_RELAY, RELAY_OFF); + is_work = false; + } } \ No newline at end of file diff --git a/src/ate0003.h b/src/ate0003.h index f467baf..ebf0844 100644 --- a/src/ate0003.h +++ b/src/ate0003.h @@ -63,7 +63,6 @@ extern "C" const char text_company[] PROGMEM = "LLC AEROTECH"; const char text_model[] PROGMEM = "ATE0003.000.000"; const char text_firmware[] PROGMEM = "Firmware v1.0.0"; - // const char text_loading[] PROGMEM = "Loading:"; const char text_ac_power[] PROGMEM = "A/C POWER: "; const char text_component[] PROGMEM = "COMPONENT: ";