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 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;