From 1f6866e915a5f3cae2aa2348576fc45b479f8c00 Mon Sep 17 00:00:00 2001 From: Alexey Zholtikov Date: Sun, 5 Oct 2025 10:01:00 +0300 Subject: [PATCH] wip: --- src/ate0003.c | 75 +++++++++++++++++++++++++++------------------------ src/ate0003.h | 4 +-- 2 files changed, 42 insertions(+), 37 deletions(-) diff --git a/src/ate0003.c b/src/ate0003.c index 6b34ab3..b822ce1 100644 --- a/src/ate0003.c +++ b/src/ate0003.c @@ -7,7 +7,6 @@ #include "ate0003.h" // Must set to #define configMINIMAL_STACK_SIZE 70 -// Must set to #define configCHECK_FOR_STACK_OVERFLOW 1 #define DEBUG @@ -51,12 +50,14 @@ volatile static bool is_fix = false; // FIX button status. volatile static uint8_t used_channels = 0; // Permitted channels. Depends of the selected component. volatile static bool is_initialized = false; // Normal loading status. +volatile static bool is_num1_fixed = false; // NUM 1 button FIX status. + int main(void) { //** Encoders init **/ zh_avr_encoder_init_config_t encoder_init_config = ZH_AVR_ENCODER_INIT_CONFIG_DEFAULT(); - encoder_init_config.stack_size = 150; // Check. - encoder_init_config.queue_size = 10; // Check. + encoder_init_config.stack_size = 181; // Check. + // encoder_init_config.queue_size = 10; // Check. encoder_init_config.gpio_port = AVR_PORTC; encoder_init_config.a_gpio_number = PORTC0; encoder_init_config.b_gpio_number = PORTC1; @@ -89,7 +90,7 @@ int main(void) UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); stdout = &uart; #endif - xTaskCreate(system_setup_task, "system_setup", 120, NULL, tskIDLE_PRIORITY, &system_setup_task_handle); + xTaskCreate(system_setup_task, "system_setup", 164, NULL, tskIDLE_PRIORITY, &system_setup_task_handle); vTaskStartScheduler(); return 0; } @@ -99,7 +100,7 @@ void system_setup_task(void *pvParameters) char text_buffer[LCD_TEXT_BUFFER]; zh_avr_i2c_master_init(false); zh_avr_pcf8574_init_config_t pcf8574_init_config = ZH_AVR_PCF8574_INIT_CONFIG_DEFAULT(); - pcf8574_init_config.stack_size = 150; // Check. + // pcf8574_init_config.stack_size = 150; // Check. //** LED 1 extender init. All LED off. DMM red on. FIX blue on. **/ pcf8574_init_config.i2c_address = LED1_I2C_ADDRESS; zh_avr_pcf8574_init(&pcf8574_init_config, &led1_handle); @@ -107,11 +108,10 @@ void system_setup_task(void *pvParameters) //** LED 2 extender init. All LED off. **/ pcf8574_init_config.i2c_address = LED2_I2C_ADDRESS; zh_avr_pcf8574_init(&pcf8574_init_config, &led2_handle); - zh_avr_pcf8574_write(&led2_handle, 0xFF); //** RELAY extender init. All relay off. DMM relay on. **/ pcf8574_init_config.i2c_address = RELAY_I2C_ADDRESS; zh_avr_pcf8574_init(&pcf8574_init_config, &relay_handle); - zh_avr_pcf8574_write(&relay_handle, 0xFD); + zh_avr_pcf8574_write(&relay_handle, 0x02); //** LCD init. **/ pcf8574_init_config.i2c_address = LCD_I2C_ADDRESS; zh_avr_pcf8574_init(&pcf8574_init_config, &lcd_handle); @@ -137,20 +137,10 @@ void system_setup_task(void *pvParameters) zh_avr_160x_set_cursor(&lcd_handle, 2, 0); strcpy_P(text_buffer, text_firmware); zh_avr_160x_print_char(&lcd_handle, text_buffer); - // zh_avr_160x_set_cursor(&lcd_handle, 3, 0); - // strcpy_P(text_buffer, text_loading); - // zh_avr_160x_print_char(&lcd_handle, text_buffer); - // for (uint8_t i = 0; i <= 100; ++i) - // { - // zh_avr_160x_set_cursor(&lcd_handle, 3, 9); - // zh_avr_160x_print_int(&lcd_handle, i); - // zh_avr_160x_print_char(&lcd_handle, "%"); - // vTaskDelay(50 / portTICK_PERIOD_MS); - // } - for (uint8_t i = 0; i <= 100; ++i) + for (uint8_t i = 0; i <= 100; i += 10) { zh_avr_160x_print_progress_bar(&lcd_handle, 3, i); - vTaskDelay(50 / portTICK_PERIOD_MS); + vTaskDelay(100 / portTICK_PERIOD_MS); } //** LCD default text print. **/ zh_avr_160x_lcd_clear(&lcd_handle); @@ -166,16 +156,13 @@ void system_setup_task(void *pvParameters) //**"ANY" component setup after loading. **/ component_setup_function(0); is_initialized = true; +#ifdef DEBUG + printf("System Setup Task Remaining Stack Size %d.\n", uxTaskGetStackHighWaterMark(NULL)); + printf("Free Heap %d.\n", xPortGetFreeHeapSize()); +#endif vTaskDelete(NULL); } -#ifdef DEBUG -void vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName) -{ - printf("Task %s Stack Overflow.\n", pcTaskName); -} -#endif - void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event) { switch (event->gpio_number) @@ -187,16 +174,14 @@ void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event) { zh_avr_pcf8574_write_gpio(&led1_handle, DMM_LED_RED, LED_ON); zh_avr_pcf8574_write_gpio(&led1_handle, DMM_LED_GREEN, LED_OFF); - // zh_avr_pcf8574_write_gpio(&relay_handle, DMM_RELAY, RELAY_ON); - // zh_avr_pcf8574_write(&relay_handle, 0xFF); + zh_avr_pcf8574_write_gpio(&relay_handle, DMM_RELAY, RELAY_ON); is_dmm = false; } else { zh_avr_pcf8574_write_gpio(&led1_handle, DMM_LED_RED, LED_OFF); zh_avr_pcf8574_write_gpio(&led1_handle, DMM_LED_GREEN, LED_ON); - // zh_avr_pcf8574_write_gpio(&relay_handle, DMM_RELAY, RELAY_OFF); - // zh_avr_pcf8574_write(&relay_handle, 0x00); + zh_avr_pcf8574_write_gpio(&relay_handle, DMM_RELAY, RELAY_OFF); is_dmm = true; } } @@ -222,15 +207,27 @@ 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); } else { + is_work = false; + if (is_fix == true) + { + is_num1_fixed = true; + break; + } 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_pcf8574_write_gpio(&relay_handle, L1_RELAY, RELAY_OFF); + is_num1_fixed = false; } break; case NUM2_BUTTON: @@ -290,6 +287,10 @@ void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event) default: break; } +#ifdef DEBUG + printf("PCF8574 Interrupt Task Remaining Stack Size %d.\n", uxTaskGetStackHighWaterMark(NULL)); + printf("Free Heap %d.\n", xPortGetFreeHeapSize()); +#endif } void zh_avr_encoder_event_handler(zh_avr_encoder_event_on_isr_t *event) @@ -308,6 +309,10 @@ void zh_avr_encoder_event_handler(zh_avr_encoder_event_on_isr_t *event) default: break; } +#ifdef DEBUG + printf("Encoder Interrupt Task Remaining Stack Size %d.\n", uxTaskGetStackHighWaterMark(NULL)); + printf("Free Heap %d.\n", xPortGetFreeHeapSize()); +#endif } ISR(PCINT1_vect) @@ -365,21 +370,21 @@ void component_setup_function(uint8_t component) zh_avr_160x_set_cursor(&lcd_handle, 3, 0); strcpy_P(text_buffer, component_line_2[component]); zh_avr_160x_print_char(&lcd_handle, text_buffer); - zh_avr_pcf8574_write(&led1_handle, (is_dmm == true) ? (0xF8 & (1 << DMM_LED_GREEN)) : 0xF8 & (1 << DMM_LED_RED)); + zh_avr_pcf8574_write(&led1_handle, is_dmm == true ? 0xF9 : 0xFA); zh_avr_pcf8574_write(&led2_handle, 0x0F); - if ((used_channels & (1 << CHANNEL1)) == CHANNEL1) + if ((used_channels & CHANNEL1) == CHANNEL1) { zh_avr_pcf8574_write_gpio(&led1_handle, NUM1_LED_BLUE, LED_ON); } - if ((used_channels & (1 << CHANNEL2)) == CHANNEL2) + if ((used_channels & CHANNEL2) == CHANNEL2) { zh_avr_pcf8574_write_gpio(&led1_handle, NUM2_LED_BLUE, LED_ON); } - if ((used_channels & (1 << CHANNEL3)) == CHANNEL3) + if ((used_channels & CHANNEL3) == CHANNEL3) { zh_avr_pcf8574_write_gpio(&led2_handle, NUM3_LED_BLUE, LED_ON); } - if ((used_channels & (1 << CHANNEL4)) == CHANNEL4) + if ((used_channels & CHANNEL4) == CHANNEL4) { zh_avr_pcf8574_write_gpio(&led2_handle, NUM4_LED_BLUE, LED_ON); } diff --git a/src/ate0003.h b/src/ate0003.h index cf5b4b6..f467baf 100644 --- a/src/ate0003.h +++ b/src/ate0003.h @@ -8,8 +8,8 @@ #define LED_OFF HIGH #define LED_ON LOW -#define RELAY_OFF HIGH -#define RELAY_ON LOW +#define RELAY_OFF LOW +#define RELAY_ON HIGH #define LCD_TEXT_BUFFER 16