This commit is contained in:
2025-09-11 16:17:34 +03:00
parent 251d86940b
commit 438bb3b11b

View File

@@ -10,22 +10,47 @@
#define HIGH true #define HIGH true
#define LOW false #define LOW false
#define LED_OFF true
#define LED_ON false
#define BUTTON_I2C_ADDRESS 0x00 #define BUTTON_I2C_ADDRESS 0x00
#define LED1_I2C_ADDRESS 0x00 #define LED1_I2C_ADDRESS 0x00
#define LED2_I2C_ADDRESS 0x00 #define LED2_I2C_ADDRESS 0x00
#define RELAY_I2C_ADDRESS 0x00 #define RELAY_I2C_ADDRESS 0x00
#define LCD_I2C_ADDRESS 0x00 #define LCD_I2C_ADDRESS 0x00
#define GROUND_RELAY 1
#define DMM_RELAY 1
#define POWER_ENCODER 1 #define POWER_ENCODER 1
#define COMPONENT_ENCODER 2 #define COMPONENT_ENCODER 2
#define DMM_BUTTON 0 #define DMM_BUTTON 0 // Connector BT1.
#define FIX_BUTTON 1 #define FIX_BUTTON 1 // Connector BT2.
#define NUM1_BUTTON 2 #define NUM1_BUTTON 2
#define NUM2_BUTTON 3 #define NUM2_BUTTON 3
#define NUM3_BUTTON 4 #define NUM3_BUTTON 4
#define NUM4_BUTTON 5 #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 #ifdef DEBUG
#define BAUD_RATE 9600 #define BAUD_RATE 9600
#define BAUD_PRESCALE (F_CPU / 16 / BAUD_RATE - 1) #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_work = false;
volatile bool is_dmm = false; volatile bool is_dmm = false;
volatile bool is_fix = false; volatile bool is_fix = false;
volatile uint8_t component_num = 0;
int main(void) int main(void)
{ {
@@ -74,18 +100,18 @@ int main(void)
zh_avr_encoder_set(&power_encoder_handle, 100); zh_avr_encoder_set(&power_encoder_handle, 100);
encoder_init_config.a_gpio_number = PORTC2; encoder_init_config.a_gpio_number = PORTC2;
encoder_init_config.b_gpio_number = PORTC3; encoder_init_config.b_gpio_number = PORTC3;
encoder_init_config.encoder_min_value = 1; encoder_init_config.encoder_min_value = 0;
encoder_init_config.encoder_max_value = 100; // Check. encoder_init_config.encoder_max_value = (sizeof(component) / sizeof(component[0])) - 1;
encoder_init_config.encoder_number = COMPONENT_ENCODER; encoder_init_config.encoder_number = COMPONENT_ENCODER;
zh_avr_encoder_init(&encoder_init_config, &component_encoder_handle); 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 **/ //** AC dimmer init **/
zh_avr_ac_dimmer_init_config_t ac_dimmer_init_config = ZH_AVR_AC_DIMMER_INIT_CONFIG_DEFAULT(); 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.ac_dimmer_frequency = ZH_50HZ;
ac_dimmer_init_config.zero_cross_port = AVR_PORTD; 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_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); zh_avr_ac_dimmer_init(&ac_dimmer_init_config);
#ifdef DEBUG #ifdef DEBUG
UBRR0H = (BAUD_PRESCALE >> 8); UBRR0H = (BAUD_PRESCALE >> 8);
@@ -95,7 +121,7 @@ int main(void)
stdout = &uart; stdout = &uart;
xTaskCreate(system_setup_task, "system_setup", 107, NULL, tskIDLE_PRIORITY, &system_setup_task_handle); xTaskCreate(system_setup_task, "system_setup", 107, NULL, tskIDLE_PRIORITY, &system_setup_task_handle);
#else #else
xTaskCreate(system_setup_task, NULL, 107, NULL, tskIDLE_PRIORITY, NULL); xTaskCreate(system_setup_task, NULL, 150, NULL, tskIDLE_PRIORITY, NULL);
#endif #endif
vTaskStartScheduler(); vTaskStartScheduler();
return 0; return 0;
@@ -105,6 +131,7 @@ void system_setup_task(void *pvParameters)
{ {
zh_avr_i2c_master_init(false); zh_avr_i2c_master_init(false);
zh_avr_pcf8574_init_config_t pcf8574_init_config = ZH_AVR_PCF8574_INIT_CONFIG_DEFAULT(); 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; pcf8574_init_config.i2c_address = LED1_I2C_ADDRESS;
zh_avr_pcf8574_init(&pcf8574_init_config, &led1_handle); zh_avr_pcf8574_init(&pcf8574_init_config, &led1_handle);
zh_avr_pcf8574_write(&led1_handle, 0xFF); 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) if (is_dmm == true)
{ {
// DMM Bypas Relay ON. zh_avr_pcf8574_write_gpio(&relay_handle, DMM_RELAY, HIGH);
// DMM LED Red ON. zh_avr_pcf8574_write_gpio(&led1_handle, DMM_LED_RED, LED_ON);
// DMM LED Green OFF. zh_avr_pcf8574_write_gpio(&led1_handle, DMM_LED_GRN, LED_OFF);
is_dmm = false; is_dmm = false;
} }
else else
{ {
// DMM Bypas Relay OFF. zh_avr_pcf8574_write_gpio(&relay_handle, DMM_RELAY, LOW);
// DMM LED Red OFF. zh_avr_pcf8574_write_gpio(&led1_handle, DMM_LED_RED, LED_OFF);
// DMM LED Green ON. zh_avr_pcf8574_write_gpio(&led1_handle, DMM_LED_GRN, LED_ON);
is_dmm = true; is_dmm = true;
} }
} }
@@ -182,14 +209,14 @@ void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event)
case FIX_BUTTON: case FIX_BUTTON:
if (event->gpio_level == LOW) if (event->gpio_level == LOW)
{ {
// Fix LED Red OFF. zh_avr_pcf8574_write_gpio(&led1_handle, FIX_LED_BLUE, LED_OFF);
// Fix LED Green ON. zh_avr_pcf8574_write_gpio(&led1_handle, FIX_LED_GRN, LED_ON);
is_fix = true; is_fix = true;
} }
else else
{ {
// Fix LED Red ON. zh_avr_pcf8574_write_gpio(&led1_handle, FIX_LED_BLUE, LED_ON);
// Fix LED Green OFF. zh_avr_pcf8574_write_gpio(&led1_handle, FIX_LED_GRN, LED_OFF);
is_fix = false; is_fix = false;
} }
break; break;
@@ -254,6 +281,7 @@ ISR(PCINT1_vect)
ISR(PCINT2_vect) ISR(PCINT2_vect)
{ {
BaseType_t xHigherPriorityTaskWoken = pdFALSE; BaseType_t xHigherPriorityTaskWoken = pdFALSE;
zh_avr_ac_dimmer_isr_handler();
if (zh_avr_pcf8574_isr_handler() == pdTRUE) if (zh_avr_pcf8574_isr_handler() == pdTRUE)
{ {
xHigherPriorityTaskWoken = pdTRUE; xHigherPriorityTaskWoken = pdTRUE;