This commit is contained in:
2025-10-12 10:35:39 +03:00
parent b37586ff1a
commit 0786846040
3 changed files with 68 additions and 62 deletions

View File

@@ -8,9 +8,9 @@
// #define DEBUG // #define DEBUG
#define SYSTEM_SETUP_STACK 173 #define SYSTEM_SETUP_STACK 189
#define ENCODER_STACK 171 #define ENCODER_STACK 165
#define PCF8574_STACK 116 #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_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}; 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 system_setup_task(void *pvParameters);
void component_setup_function(uint8_t component); 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}; TaskHandle_t system_setup_task_handle = {0};
@@ -75,7 +77,7 @@ int main(void)
#ifdef DEBUG #ifdef DEBUG
void vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName) 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()); printf("Free Heap %d.\n", xPortGetFreeHeapSize());
} }
#endif #endif
@@ -153,7 +155,7 @@ void system_setup_task(void *pvParameters)
encoder_init_config.b_gpio_number = PORTC1; encoder_init_config.b_gpio_number = PORTC1;
encoder_init_config.encoder_min_value = 0; encoder_init_config.encoder_min_value = 0;
encoder_init_config.encoder_max_value = 100; 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; encoder_init_config.encoder_number = POWER_ENCODER;
zh_avr_encoder_init(&encoder_init_config, &power_encoder_handle); zh_avr_encoder_init(&encoder_init_config, &power_encoder_handle);
zh_avr_encoder_set(&power_encoder_handle, 100); 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) if (event->gpio_level == LOW)
{ {
is_work = true;
if (is_num1_fixed == true) if (is_num1_fixed == true)
{ {
break; break;
} }
zh_avr_pcf8574_write_gpio(&led1_handle, NUM1_LED_BLUE, LED_OFF); 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(&led1_handle, NUM1_LED_GREEN, LED_ON);
zh_avr_pcf8574_write_gpio(&relay_handle, L1_RELAY, RELAY_ON); relay_on_function(L1_RELAY);
zh_avr_pcf8574_write_gpio(&relay_handle, GROUND_RELAY, RELAY_ON); // Temporary.
vTaskDelay(10); // Temporary.
zh_avr_ac_dimmer_start(); // Temporary.
} }
else else
{ {
// is_work = false;
if (is_fix == true) if (is_fix == true)
{ {
is_num1_fixed = 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_BLUE, LED_ON);
zh_avr_pcf8574_write_gpio(&led1_handle, NUM1_LED_GREEN, LED_OFF); zh_avr_pcf8574_write_gpio(&led1_handle, NUM1_LED_GREEN, LED_OFF);
zh_avr_ac_dimmer_stop(); // Temporary. relay_off_function(L1_RELAY);
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;
is_num1_fixed = false; is_num1_fixed = false;
} }
break; break;
@@ -262,21 +255,16 @@ void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event)
} }
if (event->gpio_level == LOW) if (event->gpio_level == LOW)
{ {
is_work = true;
if (is_num2_fixed == true) if (is_num2_fixed == true)
{ {
break; break;
} }
zh_avr_pcf8574_write_gpio(&led1_handle, NUM2_LED_BLUE, LED_OFF); 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(&led1_handle, NUM2_LED_GREEN, LED_ON);
zh_avr_pcf8574_write_gpio(&relay_handle, L2_RELAY, RELAY_ON); relay_on_function(L2_RELAY);
// zh_avr_pcf8574_write_gpio(&relay_handle, GROUND_RELAY, RELAY_ON); // Temporary.
// vTaskDelay(10); // Temporary.
// zh_avr_ac_dimmer_start(); // Temporary.
} }
else else
{ {
is_work = false;
if (is_fix == true) if (is_fix == true)
{ {
is_num2_fixed = 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_BLUE, LED_ON);
zh_avr_pcf8574_write_gpio(&led1_handle, NUM2_LED_GREEN, LED_OFF); zh_avr_pcf8574_write_gpio(&led1_handle, NUM2_LED_GREEN, LED_OFF);
// zh_avr_ac_dimmer_stop(); // Temporary. relay_off_function(L2_RELAY);
// 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.
is_num2_fixed = false; is_num2_fixed = false;
} }
break; break;
@@ -298,18 +283,16 @@ void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event)
} }
if (event->gpio_level == LOW) if (event->gpio_level == LOW)
{ {
is_work = true;
if (is_num3_fixed == true) if (is_num3_fixed == true)
{ {
break; break;
} }
zh_avr_pcf8574_write_gpio(&led2_handle, NUM3_LED_BLUE, LED_OFF); 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(&led2_handle, NUM3_LED_GREEN, LED_ON);
zh_avr_pcf8574_write_gpio(&relay_handle, L3_RELAY, RELAY_ON); relay_on_function(L3_RELAY);
} }
else else
{ {
is_work = false;
if (is_fix == true) if (is_fix == true)
{ {
is_num3_fixed = 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_BLUE, LED_ON);
zh_avr_pcf8574_write_gpio(&led2_handle, NUM3_LED_GREEN, LED_OFF); 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; is_num3_fixed = false;
} }
break; break;
@@ -328,18 +311,16 @@ void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event)
} }
if (event->gpio_level == LOW) if (event->gpio_level == LOW)
{ {
is_work = true;
if (is_num4_fixed == true) if (is_num4_fixed == true)
{ {
break; break;
} }
zh_avr_pcf8574_write_gpio(&led2_handle, NUM4_LED_BLUE, LED_OFF); 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(&led2_handle, NUM4_LED_GREEN, LED_ON);
zh_avr_pcf8574_write_gpio(&relay_handle, L4_RELAY, RELAY_ON); relay_on_function(L4_RELAY);
} }
else else
{ {
is_work = false;
if (is_fix == true) if (is_fix == true)
{ {
is_num4_fixed = 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_BLUE, LED_ON);
zh_avr_pcf8574_write_gpio(&led2_handle, NUM4_LED_GREEN, LED_OFF); 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; is_num4_fixed = false;
} }
break; break;
@@ -386,24 +367,17 @@ ISR(PCINT1_vect)
{ {
return; return;
} }
// BaseType_t xHigherPriorityTaskWoken = pdFALSE; if (zh_avr_encoder_isr_handler(&power_encoder_handle) == pdTRUE)
zh_avr_encoder_isr_handler(&power_encoder_handle); {
// if (zh_avr_encoder_isr_handler(&power_encoder_handle) == pdTRUE) portYIELD();
// { }
// xHigherPriorityTaskWoken = pdTRUE;
// }
if (is_work == false) if (is_work == false)
{ {
zh_avr_encoder_isr_handler(&component_encoder_handle); if (zh_avr_encoder_isr_handler(&component_encoder_handle) == pdTRUE)
// if (zh_avr_encoder_isr_handler(&component_encoder_handle) == pdTRUE) {
// { portYIELD();
// xHigherPriorityTaskWoken = pdTRUE; }
// }
} }
// if (xHigherPriorityTaskWoken == pdTRUE)
// {
// portYIELD();
// }
} }
ISR(PCINT2_vect) ISR(PCINT2_vect)
@@ -412,18 +386,11 @@ ISR(PCINT2_vect)
{ {
return; return;
} }
// BaseType_t xHigherPriorityTaskWoken = pdFALSE;
zh_avr_pcf8574_isr_handler();
zh_avr_ac_dimmer_isr_handler(); zh_avr_ac_dimmer_isr_handler();
// zh_avr_pcf8574_isr_handler(); if (zh_avr_pcf8574_isr_handler() == pdTRUE)
// if (zh_avr_pcf8574_isr_handler() == pdTRUE) {
// { portYIELD();
// xHigherPriorityTaskWoken = pdTRUE; }
// }
// if (xHigherPriorityTaskWoken == pdTRUE)
// {
// portYIELD();
// }
} }
void component_setup_function(uint8_t component) 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); 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;
}
} }

View File

@@ -63,7 +63,6 @@ extern "C"
const char text_company[] PROGMEM = "LLC AEROTECH"; const char text_company[] PROGMEM = "LLC AEROTECH";
const char text_model[] PROGMEM = "ATE0003.000.000"; const char text_model[] PROGMEM = "ATE0003.000.000";
const char text_firmware[] PROGMEM = "Firmware v1.0.0"; 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_ac_power[] PROGMEM = "A/C POWER: ";
const char text_component[] PROGMEM = "COMPONENT: "; const char text_component[] PROGMEM = "COMPONENT: ";