From 438bb3b11b2aeaea10acdebf6abeb39f4bbc4eda Mon Sep 17 00:00:00 2001 From: Alexey Zholtikov Date: Thu, 11 Sep 2025 16:17:34 +0300 Subject: [PATCH] wip: --- src/main.c | 64 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 18 deletions(-) diff --git a/src/main.c b/src/main.c index 1610ae0..1ab01f0 100644 --- a/src/main.c +++ b/src/main.c @@ -10,22 +10,47 @@ #define HIGH true #define LOW false +#define LED_OFF true +#define LED_ON false + #define BUTTON_I2C_ADDRESS 0x00 #define LED1_I2C_ADDRESS 0x00 #define LED2_I2C_ADDRESS 0x00 #define RELAY_I2C_ADDRESS 0x00 #define LCD_I2C_ADDRESS 0x00 +#define GROUND_RELAY 1 +#define DMM_RELAY 1 + #define POWER_ENCODER 1 #define COMPONENT_ENCODER 2 -#define DMM_BUTTON 0 -#define FIX_BUTTON 1 +#define DMM_BUTTON 0 // Connector BT1. +#define FIX_BUTTON 1 // Connector BT2. #define NUM1_BUTTON 2 #define NUM2_BUTTON 3 #define NUM3_BUTTON 4 #define NUM4_BUTTON 5 +#define DMM_LED_RED 0 // Connector LE1. 2 PIN. +#define DMM_LED_GRN 1 // Connector LE1. 1 PIN. +#define FIX_LED_BLUE 2 // Connector LE2. 2 PIN. +#define FIX_LED_GRN 3 // Connector LE2. 1 PIN. + +typedef struct +{ + char *cmm; + uint8_t channel_1; + uint8_t channel_2; + uint8_t channel_3; + uint8_t channel_4; +} component_t; + +const component_t component[] = { + {"ANY", 1, 1, 1, 1}, + {"252525", 1, 0, 0, 0}, +}; + #ifdef DEBUG #define BAUD_RATE 9600 #define BAUD_PRESCALE (F_CPU / 16 / BAUD_RATE - 1) @@ -59,6 +84,7 @@ zh_avr_encoder_handle_t component_encoder_handle = {0}; volatile bool is_work = false; volatile bool is_dmm = false; volatile bool is_fix = false; +volatile uint8_t component_num = 0; int main(void) { @@ -74,18 +100,18 @@ int main(void) zh_avr_encoder_set(&power_encoder_handle, 100); encoder_init_config.a_gpio_number = PORTC2; encoder_init_config.b_gpio_number = PORTC3; - encoder_init_config.encoder_min_value = 1; - encoder_init_config.encoder_max_value = 100; // Check. + encoder_init_config.encoder_min_value = 0; + encoder_init_config.encoder_max_value = (sizeof(component) / sizeof(component[0])) - 1; encoder_init_config.encoder_number = COMPONENT_ENCODER; zh_avr_encoder_init(&encoder_init_config, &component_encoder_handle); - zh_avr_encoder_set(&component_encoder_handle, 1); + zh_avr_encoder_set(&component_encoder_handle, 0); //** AC dimmer init **/ zh_avr_ac_dimmer_init_config_t ac_dimmer_init_config = ZH_AVR_AC_DIMMER_INIT_CONFIG_DEFAULT(); ac_dimmer_init_config.ac_dimmer_frequency = ZH_50HZ; ac_dimmer_init_config.zero_cross_port = AVR_PORTD; - ac_dimmer_init_config.zero_cross_gpio = PORTD2; + ac_dimmer_init_config.zero_cross_gpio = PORTD3; ac_dimmer_init_config.triac_port = AVR_PORTD; - ac_dimmer_init_config.triac_gpio = PORTD3; + ac_dimmer_init_config.triac_gpio = PORTD4; zh_avr_ac_dimmer_init(&ac_dimmer_init_config); #ifdef DEBUG UBRR0H = (BAUD_PRESCALE >> 8); @@ -95,7 +121,7 @@ int main(void) stdout = &uart; xTaskCreate(system_setup_task, "system_setup", 107, NULL, tskIDLE_PRIORITY, &system_setup_task_handle); #else - xTaskCreate(system_setup_task, NULL, 107, NULL, tskIDLE_PRIORITY, NULL); + xTaskCreate(system_setup_task, NULL, 150, NULL, tskIDLE_PRIORITY, NULL); #endif vTaskStartScheduler(); return 0; @@ -105,6 +131,7 @@ void system_setup_task(void *pvParameters) { 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 = 255; pcf8574_init_config.i2c_address = LED1_I2C_ADDRESS; zh_avr_pcf8574_init(&pcf8574_init_config, &led1_handle); zh_avr_pcf8574_write(&led1_handle, 0xFF); @@ -165,16 +192,16 @@ void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event) { if (is_dmm == true) { - // DMM Bypas Relay ON. - // DMM LED Red ON. - // DMM LED Green OFF. + zh_avr_pcf8574_write_gpio(&relay_handle, DMM_RELAY, HIGH); + zh_avr_pcf8574_write_gpio(&led1_handle, DMM_LED_RED, LED_ON); + zh_avr_pcf8574_write_gpio(&led1_handle, DMM_LED_GRN, LED_OFF); is_dmm = false; } else { - // DMM Bypas Relay OFF. - // DMM LED Red OFF. - // DMM LED Green ON. + zh_avr_pcf8574_write_gpio(&relay_handle, DMM_RELAY, LOW); + zh_avr_pcf8574_write_gpio(&led1_handle, DMM_LED_RED, LED_OFF); + zh_avr_pcf8574_write_gpio(&led1_handle, DMM_LED_GRN, LED_ON); is_dmm = true; } } @@ -182,14 +209,14 @@ void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event) case FIX_BUTTON: if (event->gpio_level == LOW) { - // Fix LED Red OFF. - // Fix LED Green ON. + zh_avr_pcf8574_write_gpio(&led1_handle, FIX_LED_BLUE, LED_OFF); + zh_avr_pcf8574_write_gpio(&led1_handle, FIX_LED_GRN, LED_ON); is_fix = true; } else { - // Fix LED Red ON. - // Fix LED Green OFF. + zh_avr_pcf8574_write_gpio(&led1_handle, FIX_LED_BLUE, LED_ON); + zh_avr_pcf8574_write_gpio(&led1_handle, FIX_LED_GRN, LED_OFF); is_fix = false; } break; @@ -254,6 +281,7 @@ ISR(PCINT1_vect) ISR(PCINT2_vect) { BaseType_t xHigherPriorityTaskWoken = pdFALSE; + zh_avr_ac_dimmer_isr_handler(); if (zh_avr_pcf8574_isr_handler() == pdTRUE) { xHigherPriorityTaskWoken = pdTRUE;