Compare commits
75 Commits
dev
...
7515612c01
| Author | SHA1 | Date | |
|---|---|---|---|
| 7515612c01 | |||
| 38ea08e798 | |||
| 0f559a79da | |||
| 95f4ea4017 | |||
| 2d15b5e7b5 | |||
| 37dd6b5a1e | |||
| 0786846040 | |||
| b37586ff1a | |||
| 05ed2c3bb9 | |||
| bfdd6ee8a1 | |||
| b6b3c3f6af | |||
| 93758b5f72 | |||
| f0398e1222 | |||
| 8d813d7eab | |||
| 806e645056 | |||
| 230402e002 | |||
| 8934925c89 | |||
| eb9fefbf36 | |||
| 6476bf4d1a | |||
| 479e78be84 | |||
| e2c71c9d0d | |||
| 5b22dff0d5 | |||
| daff1f6d24 | |||
| 51f6d00ebb | |||
| bab0c181bd | |||
| 8b46ced5ef | |||
| 1f6866e915 | |||
| a4b4e2c68d | |||
| 907095940b | |||
| 4b46feee01 | |||
| 3f5d93a579 | |||
| c1e4fd5b29 | |||
| d065924e9c | |||
| d883c84335 | |||
| 5e06d058ce | |||
| f33a5cf85f | |||
| 803e53544c | |||
| 1bfdecc5ba | |||
| 22f8a25246 | |||
| 7b02ba6b0a | |||
| e26cf65079 | |||
| 5633b050e5 | |||
| a3b23eeeba | |||
| 5158538e29 | |||
| 3c98736017 | |||
| d08c591b11 | |||
| 751c8ee385 | |||
| 514ddd1a3b | |||
| a1a7327e39 | |||
| 46850b548f | |||
| 731a29a1d4 | |||
| 4effada5b8 | |||
| f065074027 | |||
| 55098d8642 | |||
| 295bba4113 | |||
| 93ef4dd906 | |||
| 28eace8311 | |||
| efebbb6310 | |||
| 438bb3b11b | |||
| 251d86940b | |||
| ac5d8c5d88 | |||
| 3369b138cc | |||
| ec63d718d9 | |||
| 67b6c6e8fc | |||
| a516568399 | |||
| 3b815fe2d8 | |||
| edda0e5236 | |||
| 8840b7afb0 | |||
| b578c2ee40 | |||
| 87b50dceeb | |||
| 28f3018696 | |||
| 86712bd939 | |||
| e51603693b | |||
| c99f82eee9 | |||
| 178503cdfa |
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
.pio
|
||||
.vscode
|
||||
.DS_Store
|
||||
desktop.ini
|
||||
24
.gitmodules
vendored
Normal file
24
.gitmodules
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
[submodule "lib/zh_avr_free_rtos"]
|
||||
path = lib/zh_avr_free_rtos
|
||||
url = http://git.zh.com.ru/avr_libraries/zh_avr_free_rtos
|
||||
[submodule "lib/zh_avr_vector"]
|
||||
path = lib/zh_avr_vector
|
||||
url = http://git.zh.com.ru/avr_libraries/zh_avr_vector
|
||||
[submodule "lib/zh_avr_i2c"]
|
||||
path = lib/zh_avr_i2c
|
||||
url = http://git.zh.com.ru/avr_libraries/zh_avr_i2c
|
||||
[submodule "lib/zh_avr_common"]
|
||||
path = lib/zh_avr_common
|
||||
url = http://git.zh.com.ru/avr_libraries/zh_avr_common
|
||||
[submodule "lib/zh_avr_pcf8574"]
|
||||
path = lib/zh_avr_pcf8574
|
||||
url = http://git.zh.com.ru/avr_libraries/zh_avr_pcf8574
|
||||
[submodule "lib/zh_avr_160x_i2c"]
|
||||
path = lib/zh_avr_160x_i2c
|
||||
url = http://git.zh.com.ru/avr_libraries/zh_avr_160x_i2c
|
||||
[submodule "lib/zh_avr_encoder"]
|
||||
path = lib/zh_avr_encoder
|
||||
url = http://git.zh.com.ru/avr_libraries/zh_avr_encoder
|
||||
[submodule "lib/zh_avr_ac_dimmer"]
|
||||
path = lib/zh_avr_ac_dimmer
|
||||
url = http://git.zh.com.ru/avr_libraries/zh_avr_ac_dimmer
|
||||
@@ -1,2 +1,3 @@
|
||||
# ate0003.000.000
|
||||
|
||||
git clone --recurse-submodules -b dev http://git.zh.com.ru/aerotech/ate0003.000.000
|
||||
BIN
cad/ATE0003.000.00 СБ _ Корпус.a3d
Normal file
BIN
cad/ATE0003.000.00 СБ _ Корпус.a3d
Normal file
Binary file not shown.
BIN
cad/ATE0003.000.001 _ Низ.m3d
Normal file
BIN
cad/ATE0003.000.001 _ Низ.m3d
Normal file
Binary file not shown.
BIN
cad/ATE0003.000.002 _ Перед.m3d
Normal file
BIN
cad/ATE0003.000.002 _ Перед.m3d
Normal file
Binary file not shown.
BIN
cad/ATE0003.000.003 _ Зад.m3d
Normal file
BIN
cad/ATE0003.000.003 _ Зад.m3d
Normal file
Binary file not shown.
BIN
cad/ATE0003.000.004 _ Верх.m3d
Normal file
BIN
cad/ATE0003.000.004 _ Верх.m3d
Normal file
Binary file not shown.
BIN
cad/ATE0003.000.005 _ Ножка.m3d
Normal file
BIN
cad/ATE0003.000.005 _ Ножка.m3d
Normal file
Binary file not shown.
BIN
cad/ATE0003.000.006 _ Кнопка.m3d
Normal file
BIN
cad/ATE0003.000.006 _ Кнопка.m3d
Normal file
Binary file not shown.
BIN
cad/ATE0003.001.000 СБ _ DUWI 26840.a3d
Normal file
BIN
cad/ATE0003.001.000 СБ _ DUWI 26840.a3d
Normal file
Binary file not shown.
BIN
cad/ATE0003.001.001 _ Кнопка.m3d
Normal file
BIN
cad/ATE0003.001.001 _ Кнопка.m3d
Normal file
Binary file not shown.
BIN
cad/ATE0003.001.002 _ Корпус.m3d
Normal file
BIN
cad/ATE0003.001.002 _ Корпус.m3d
Normal file
Binary file not shown.
BIN
cad/ATE0003.002.000 СБ _ KLS5-254.a3d
Normal file
BIN
cad/ATE0003.002.000 СБ _ KLS5-254.a3d
Normal file
Binary file not shown.
BIN
cad/ATE0003.002.001 _ Корпус.m3d
Normal file
BIN
cad/ATE0003.002.001 _ Корпус.m3d
Normal file
Binary file not shown.
BIN
cad/ATE0003.003.000 СБ _ BP-522.m3d
Normal file
BIN
cad/ATE0003.003.000 СБ _ BP-522.m3d
Normal file
Binary file not shown.
BIN
cad/ATE0003.003.001 _ Штырь.m3d
Normal file
BIN
cad/ATE0003.003.001 _ Штырь.m3d
Normal file
Binary file not shown.
BIN
cad/ATE0003.003.002 _ Корпус RED.m3d
Normal file
BIN
cad/ATE0003.003.002 _ Корпус RED.m3d
Normal file
Binary file not shown.
BIN
cad/ATE0003.003.003 _ Корпус BLACK.m3d
Normal file
BIN
cad/ATE0003.003.003 _ Корпус BLACK.m3d
Normal file
Binary file not shown.
BIN
ds/171611890.jpg
Normal file
BIN
ds/171611890.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
Binary file not shown.
Binary file not shown.
BIN
ds/BL-L515.pdf
Normal file
BIN
ds/BL-L515.pdf
Normal file
Binary file not shown.
BIN
ds/BTA12-600BWRG.pdf
Normal file
BIN
ds/BTA12-600BWRG.pdf
Normal file
Binary file not shown.
BIN
ds/DOC000309400.pdf
Normal file
BIN
ds/DOC000309400.pdf
Normal file
Binary file not shown.
BIN
ds/DOC002468502.pdf
Normal file
BIN
ds/DOC002468502.pdf
Normal file
Binary file not shown.
BIN
ds/DOC005805734.pdf
Normal file
BIN
ds/DOC005805734.pdf
Normal file
Binary file not shown.
BIN
ds/DOC017422707.pdf
Normal file
BIN
ds/DOC017422707.pdf
Normal file
Binary file not shown.
BIN
ds/DOC042891075.pdf
Normal file
BIN
ds/DOC042891075.pdf
Normal file
Binary file not shown.
BIN
ds/DOC043994357.pdf
Normal file
BIN
ds/DOC043994357.pdf
Normal file
Binary file not shown.
BIN
ds/DOC053950523.pdf
Normal file
BIN
ds/DOC053950523.pdf
Normal file
Binary file not shown.
BIN
ds/EasyEDA-Tutorials_v6.4.3.ru.pdf
Normal file
BIN
ds/EasyEDA-Tutorials_v6.4.3.ru.pdf
Normal file
Binary file not shown.
BIN
ds/FOD814.pdf
Normal file
BIN
ds/FOD814.pdf
Normal file
Binary file not shown.
BIN
ds/KLS5-254.pdf
Normal file
BIN
ds/KLS5-254.pdf
Normal file
Binary file not shown.
BIN
ds/MMBT2222.pdf
Normal file
BIN
ds/MMBT2222.pdf
Normal file
Binary file not shown.
BIN
ds/MOC3011.pdf
Normal file
BIN
ds/MOC3011.pdf
Normal file
Binary file not shown.
BIN
ds/MOC3063SM.pdf
Normal file
BIN
ds/MOC3063SM.pdf
Normal file
Binary file not shown.
Binary file not shown.
BIN
ds/PCF8574.pdf
Normal file
BIN
ds/PCF8574.pdf
Normal file
Binary file not shown.
BIN
ds/RS-15-5.pdf
Normal file
BIN
ds/RS-15-5.pdf
Normal file
Binary file not shown.
BIN
ds/TTP223.pdf
Normal file
BIN
ds/TTP223.pdf
Normal file
Binary file not shown.
BIN
ds/W14.pdf
Normal file
BIN
ds/W14.pdf
Normal file
Binary file not shown.
BIN
ds/Работа с прерываниями PCINT0…23 — rcl-radio.ru.pdf
Normal file
BIN
ds/Работа с прерываниями PCINT0…23 — rcl-radio.ru.pdf
Normal file
Binary file not shown.
1
lib/zh_avr_160x_i2c
Submodule
1
lib/zh_avr_160x_i2c
Submodule
Submodule lib/zh_avr_160x_i2c added at d95823281b
1
lib/zh_avr_ac_dimmer
Submodule
1
lib/zh_avr_ac_dimmer
Submodule
Submodule lib/zh_avr_ac_dimmer added at 41c23732f2
1
lib/zh_avr_common
Submodule
1
lib/zh_avr_common
Submodule
Submodule lib/zh_avr_common added at 1cb4a4cc76
1
lib/zh_avr_encoder
Submodule
1
lib/zh_avr_encoder
Submodule
Submodule lib/zh_avr_encoder added at eac1c45093
1
lib/zh_avr_free_rtos
Submodule
1
lib/zh_avr_free_rtos
Submodule
Submodule lib/zh_avr_free_rtos added at abfe2ea922
1
lib/zh_avr_i2c
Submodule
1
lib/zh_avr_i2c
Submodule
Submodule lib/zh_avr_i2c added at da2fd0d2a8
1
lib/zh_avr_pcf8574
Submodule
1
lib/zh_avr_pcf8574
Submodule
Submodule lib/zh_avr_pcf8574 added at 3fa55b8fa2
1
lib/zh_avr_vector
Submodule
1
lib/zh_avr_vector
Submodule
Submodule lib/zh_avr_vector added at eddd461e96
BIN
pcb/BOM_ATE0003.000.001_v.3.xlsx
Normal file
BIN
pcb/BOM_ATE0003.000.001_v.3.xlsx
Normal file
Binary file not shown.
BIN
pcb/Gerber_ATE0003.000.001_v.3.zip
Normal file
BIN
pcb/Gerber_ATE0003.000.001_v.3.zip
Normal file
Binary file not shown.
46102
pcb/SCH_ATE0003.000.001_v.3.pdf
Normal file
46102
pcb/SCH_ATE0003.000.001_v.3.pdf
Normal file
File diff suppressed because it is too large
Load Diff
13
platformio.ini
Normal file
13
platformio.ini
Normal file
@@ -0,0 +1,13 @@
|
||||
[env:ATmega328P]
|
||||
platform = atmelavr
|
||||
board = ATmega328P
|
||||
board_build.mcu = atmega328p
|
||||
board_build.f_cpu = 8000000L
|
||||
framework = arduino
|
||||
upload_protocol = usbasp
|
||||
board_fuses.hfuse = 0xDF
|
||||
board_fuses.lfuse = 0xE2
|
||||
board_fuses.efuse = 0x07
|
||||
upload_flags =
|
||||
-Pusb
|
||||
-e
|
||||
467
src/ate0003.c
Normal file
467
src/ate0003.c
Normal file
@@ -0,0 +1,467 @@
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
#include "avr/io.h"
|
||||
#include "zh_avr_160x_i2c.h"
|
||||
#include "zh_avr_encoder.h"
|
||||
#include "zh_avr_ac_dimmer.h"
|
||||
#include "ate0003.h"
|
||||
|
||||
// #define DEBUG
|
||||
|
||||
#define SYSTEM_SETUP_STACK 189
|
||||
#define ENCODER_STACK 165
|
||||
#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_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_2[] = {component_1_line_2, component_2_line_2, component_3_line_2, component_4_line_2, component_5_line_2};
|
||||
const uint8_t component_channel[] = {0x0F, 0x04, 0x02, 0x08, 0x0C};
|
||||
|
||||
#ifdef DEBUG
|
||||
#define BAUD_RATE 9600
|
||||
#define BAUD_PRESCALE (F_CPU / 16 / BAUD_RATE - 1)
|
||||
|
||||
int usart(char byte, FILE *stream)
|
||||
{
|
||||
while ((UCSR0A & (1 << UDRE0)) == 0)
|
||||
{
|
||||
}
|
||||
UDR0 = byte;
|
||||
return 0;
|
||||
}
|
||||
FILE uart = FDEV_SETUP_STREAM(usart, NULL, _FDEV_SETUP_WRITE);
|
||||
#endif
|
||||
|
||||
void system_setup_task(void *pvParameters);
|
||||
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};
|
||||
|
||||
zh_avr_pcf8574_handle_t button_handle = {0};
|
||||
zh_avr_pcf8574_handle_t led1_handle = {0};
|
||||
zh_avr_pcf8574_handle_t led2_handle = {0};
|
||||
zh_avr_pcf8574_handle_t relay_handle = {0};
|
||||
zh_avr_pcf8574_handle_t lcd_handle = {0};
|
||||
|
||||
zh_avr_encoder_handle_t power_encoder_handle = {0};
|
||||
zh_avr_encoder_handle_t component_encoder_handle = {0};
|
||||
|
||||
volatile static bool is_work = false; // Work status.
|
||||
volatile static bool is_dmm = false; // DMM using status.
|
||||
volatile static bool is_fix = false; // FIX button status.
|
||||
volatile static uint8_t permitted_channels = 0; // Permitted channels. Depends of the selected component.
|
||||
volatile static uint8_t used_channels = 0; // Counter of currently enabled channels.
|
||||
volatile static bool is_initialized = false; // Normal loading status.
|
||||
|
||||
volatile static bool is_num1_fixed = false; // NUM 1 button FIX status.
|
||||
volatile static bool is_num2_fixed = false; // NUM 2 button FIX status.
|
||||
volatile static bool is_num3_fixed = false; // NUM 3 button FIX status.
|
||||
volatile static bool is_num4_fixed = false; // NUM 4 button FIX status.
|
||||
|
||||
int main(void)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
UBRR0H = (BAUD_PRESCALE >> 8);
|
||||
UBRR0L = BAUD_PRESCALE;
|
||||
UCSR0B = (1 << RXEN0) | (1 << TXEN0);
|
||||
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
|
||||
stdout = &uart;
|
||||
#endif
|
||||
xTaskCreate(system_setup_task, "system_setup", SYSTEM_SETUP_STACK, NULL, tskIDLE_PRIORITY, &system_setup_task_handle);
|
||||
vTaskStartScheduler();
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
void vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName)
|
||||
{
|
||||
printf("Task %s Stack Owerflow.\n", pcTaskName);
|
||||
printf("Free Heap %d.\n", xPortGetFreeHeapSize());
|
||||
}
|
||||
#endif
|
||||
|
||||
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 = PCF8574_STACK;
|
||||
//** LED 1 extender init. **/
|
||||
pcf8574_init_config.i2c_address = LED1_I2C_ADDRESS;
|
||||
zh_avr_pcf8574_init(&pcf8574_init_config, &led1_handle);
|
||||
zh_avr_pcf8574_write(&led1_handle, 0xFF);
|
||||
//** LED 2 extender init. **/
|
||||
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. **/
|
||||
pcf8574_init_config.i2c_address = RELAY_I2C_ADDRESS;
|
||||
zh_avr_pcf8574_init(&pcf8574_init_config, &relay_handle);
|
||||
zh_avr_pcf8574_write(&relay_handle, 0x00);
|
||||
//** LCD init. **/
|
||||
pcf8574_init_config.i2c_address = LCD_I2C_ADDRESS;
|
||||
zh_avr_pcf8574_init(&pcf8574_init_config, &lcd_handle);
|
||||
zh_avr_160x_init(&lcd_handle, ZH_LCD_16X4);
|
||||
//** BUTTON extender init. **/
|
||||
pcf8574_init_config.p0_gpio_work_mode = true;
|
||||
pcf8574_init_config.p1_gpio_work_mode = true;
|
||||
pcf8574_init_config.p2_gpio_work_mode = true;
|
||||
pcf8574_init_config.p3_gpio_work_mode = true;
|
||||
pcf8574_init_config.p4_gpio_work_mode = true;
|
||||
pcf8574_init_config.p5_gpio_work_mode = true;
|
||||
pcf8574_init_config.interrupt_port = AVR_PORTD;
|
||||
pcf8574_init_config.interrupt_gpio = PORTD2;
|
||||
pcf8574_init_config.i2c_address = BUTTON_I2C_ADDRESS;
|
||||
zh_avr_pcf8574_init(&pcf8574_init_config, &button_handle);
|
||||
//** Loading. Just for fun. **/
|
||||
zh_avr_160x_set_cursor(&lcd_handle, 0, 0);
|
||||
strcpy_P(text_buffer, text_company);
|
||||
zh_avr_160x_print_char(&lcd_handle, text_buffer);
|
||||
zh_avr_160x_set_cursor(&lcd_handle, 1, 0);
|
||||
strcpy_P(text_buffer, text_model);
|
||||
zh_avr_160x_print_char(&lcd_handle, text_buffer);
|
||||
zh_avr_160x_set_cursor(&lcd_handle, 2, 0);
|
||||
strcpy_P(text_buffer, text_firmware);
|
||||
zh_avr_160x_print_char(&lcd_handle, text_buffer);
|
||||
for (uint8_t i = 0; i <= 100; i += 10)
|
||||
{
|
||||
zh_avr_160x_print_progress_bar(&lcd_handle, 3, i);
|
||||
vTaskDelay(100 / portTICK_PERIOD_MS);
|
||||
}
|
||||
//** LCD default text print. **/
|
||||
zh_avr_160x_lcd_clear(&lcd_handle);
|
||||
zh_avr_160x_set_cursor(&lcd_handle, 0, 0);
|
||||
strcpy_P(text_buffer, text_ac_power);
|
||||
zh_avr_160x_print_char(&lcd_handle, text_buffer);
|
||||
zh_avr_160x_set_cursor(&lcd_handle, 0, 11);
|
||||
zh_avr_160x_print_int(&lcd_handle, 100);
|
||||
zh_avr_160x_print_char(&lcd_handle, "%");
|
||||
zh_avr_160x_set_cursor(&lcd_handle, 1, 0);
|
||||
strcpy_P(text_buffer, text_component);
|
||||
zh_avr_160x_print_char(&lcd_handle, text_buffer);
|
||||
//**"ANY" component setup after loading. **/
|
||||
zh_avr_pcf8574_write_gpio(&led1_handle, DMM_LED_RED, LED_ON);
|
||||
zh_avr_pcf8574_write_gpio(&led1_handle, FIX_LED_BLUE, LED_ON);
|
||||
zh_avr_pcf8574_write_gpio(&relay_handle, DMM_RELAY, RELAY_ON);
|
||||
component_setup_function(0);
|
||||
//** Encoders init **/
|
||||
zh_avr_encoder_init_config_t encoder_init_config = ZH_AVR_ENCODER_INIT_CONFIG_DEFAULT();
|
||||
encoder_init_config.stack_size = ENCODER_STACK;
|
||||
encoder_init_config.queue_size = 5;
|
||||
encoder_init_config.gpio_port = AVR_PORTC;
|
||||
encoder_init_config.a_gpio_number = PORTC0;
|
||||
encoder_init_config.b_gpio_number = PORTC1;
|
||||
encoder_init_config.encoder_min_value = 0;
|
||||
encoder_init_config.encoder_max_value = 100;
|
||||
encoder_init_config.encoder_step = 5;
|
||||
encoder_init_config.encoder_number = POWER_ENCODER;
|
||||
zh_avr_encoder_init(&encoder_init_config, &power_encoder_handle);
|
||||
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 = 0;
|
||||
encoder_init_config.encoder_max_value = (sizeof(component_cmm) / sizeof(component_cmm[0])) - 1;
|
||||
encoder_init_config.encoder_step = 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, 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 = PORTD3;
|
||||
ac_dimmer_init_config.triac_port = AVR_PORTD;
|
||||
ac_dimmer_init_config.triac_gpio = PORTD4;
|
||||
zh_avr_ac_dimmer_init(&ac_dimmer_init_config);
|
||||
zh_avr_ac_dimmer_set(100);
|
||||
is_initialized = true;
|
||||
#ifdef DEBUG
|
||||
printf("%d.\n", uxTaskGetStackHighWaterMark(NULL));
|
||||
#endif
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
|
||||
void zh_avr_pcf8574_event_handler(zh_avr_pcf8574_event_on_isr_t *event)
|
||||
{
|
||||
switch (event->gpio_number)
|
||||
{
|
||||
case DMM_BUTTON:
|
||||
if (event->gpio_level == LOW && is_work == false)
|
||||
{
|
||||
if (is_dmm == true)
|
||||
{
|
||||
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);
|
||||
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);
|
||||
is_dmm = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case FIX_BUTTON:
|
||||
if (event->gpio_level == LOW)
|
||||
{
|
||||
zh_avr_pcf8574_write_gpio(&led1_handle, FIX_LED_BLUE, LED_OFF);
|
||||
zh_avr_pcf8574_write_gpio(&led1_handle, FIX_LED_GREEN, LED_ON);
|
||||
is_fix = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
zh_avr_pcf8574_write_gpio(&led1_handle, FIX_LED_BLUE, LED_ON);
|
||||
zh_avr_pcf8574_write_gpio(&led1_handle, FIX_LED_GREEN, LED_OFF);
|
||||
is_fix = false;
|
||||
}
|
||||
break;
|
||||
case NUM1_BUTTON:
|
||||
if ((permitted_channels & CHANNEL1) == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if (event->gpio_level == LOW)
|
||||
{
|
||||
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);
|
||||
relay_on_function(L1_RELAY);
|
||||
}
|
||||
else
|
||||
{
|
||||
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);
|
||||
relay_off_function(L1_RELAY);
|
||||
is_num1_fixed = false;
|
||||
}
|
||||
break;
|
||||
case NUM2_BUTTON:
|
||||
if ((permitted_channels & CHANNEL2) == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if (event->gpio_level == LOW)
|
||||
{
|
||||
if (is_num2_fixed == true)
|
||||
{
|
||||
break;
|
||||
}
|
||||
zh_avr_pcf8574_write_gpio(&led1_handle, NUM2_LED_BLUE, LED_OFF);
|
||||
zh_avr_pcf8574_write_gpio(&led1_handle, NUM2_LED_GREEN, LED_ON);
|
||||
relay_on_function(L2_RELAY);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (is_fix == true)
|
||||
{
|
||||
is_num2_fixed = true;
|
||||
break;
|
||||
}
|
||||
zh_avr_pcf8574_write_gpio(&led1_handle, NUM2_LED_BLUE, LED_ON);
|
||||
zh_avr_pcf8574_write_gpio(&led1_handle, NUM2_LED_GREEN, LED_OFF);
|
||||
relay_off_function(L2_RELAY);
|
||||
is_num2_fixed = false;
|
||||
}
|
||||
break;
|
||||
case NUM3_BUTTON:
|
||||
if ((permitted_channels & CHANNEL3) == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if (event->gpio_level == LOW)
|
||||
{
|
||||
if (is_num3_fixed == true)
|
||||
{
|
||||
break;
|
||||
}
|
||||
zh_avr_pcf8574_write_gpio(&led2_handle, NUM3_LED_BLUE, LED_OFF);
|
||||
zh_avr_pcf8574_write_gpio(&led2_handle, NUM3_LED_GREEN, LED_ON);
|
||||
relay_on_function(L3_RELAY);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (is_fix == true)
|
||||
{
|
||||
is_num3_fixed = true;
|
||||
break;
|
||||
}
|
||||
zh_avr_pcf8574_write_gpio(&led2_handle, NUM3_LED_BLUE, LED_ON);
|
||||
zh_avr_pcf8574_write_gpio(&led2_handle, NUM3_LED_GREEN, LED_OFF);
|
||||
relay_off_function(L3_RELAY);
|
||||
is_num3_fixed = false;
|
||||
}
|
||||
break;
|
||||
case NUM4_BUTTON:
|
||||
if ((permitted_channels & CHANNEL4) == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if (event->gpio_level == LOW)
|
||||
{
|
||||
if (is_num4_fixed == true)
|
||||
{
|
||||
break;
|
||||
}
|
||||
zh_avr_pcf8574_write_gpio(&led2_handle, NUM4_LED_BLUE, LED_OFF);
|
||||
zh_avr_pcf8574_write_gpio(&led2_handle, NUM4_LED_GREEN, LED_ON);
|
||||
relay_on_function(L4_RELAY);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (is_fix == true)
|
||||
{
|
||||
is_num4_fixed = true;
|
||||
break;
|
||||
}
|
||||
zh_avr_pcf8574_write_gpio(&led2_handle, NUM4_LED_BLUE, LED_ON);
|
||||
zh_avr_pcf8574_write_gpio(&led2_handle, NUM4_LED_GREEN, LED_OFF);
|
||||
relay_off_function(L4_RELAY);
|
||||
is_num4_fixed = false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
#ifdef DEBUG
|
||||
printf("%d.\n", uxTaskGetStackHighWaterMark(NULL));
|
||||
#endif
|
||||
}
|
||||
|
||||
void zh_avr_encoder_event_handler(zh_avr_encoder_event_on_isr_t *event)
|
||||
{
|
||||
switch (event->encoder_number)
|
||||
{
|
||||
case POWER_ENCODER:
|
||||
zh_avr_160x_set_cursor(&lcd_handle, 0, 11);
|
||||
zh_avr_160x_print_int(&lcd_handle, (uint8_t)event->encoder_position);
|
||||
zh_avr_160x_print_char(&lcd_handle, "% ");
|
||||
zh_avr_ac_dimmer_set(event->encoder_position);
|
||||
break;
|
||||
case COMPONENT_ENCODER:
|
||||
component_setup_function((uint8_t)event->encoder_position);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
#ifdef DEBUG
|
||||
printf("%d.\n", uxTaskGetStackHighWaterMark(NULL));
|
||||
#endif
|
||||
}
|
||||
|
||||
ISR(PCINT1_vect)
|
||||
{
|
||||
if (is_initialized == false)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (zh_avr_encoder_isr_handler(&power_encoder_handle) == pdTRUE)
|
||||
{
|
||||
portYIELD();
|
||||
}
|
||||
if (is_work == false)
|
||||
{
|
||||
if (zh_avr_encoder_isr_handler(&component_encoder_handle) == pdTRUE)
|
||||
{
|
||||
portYIELD();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ISR(PCINT2_vect)
|
||||
{
|
||||
if (is_initialized == false)
|
||||
{
|
||||
return;
|
||||
}
|
||||
zh_avr_ac_dimmer_isr_handler();
|
||||
if (zh_avr_pcf8574_isr_handler() == pdTRUE)
|
||||
{
|
||||
portYIELD();
|
||||
}
|
||||
}
|
||||
|
||||
void component_setup_function(uint8_t component)
|
||||
{
|
||||
char text_buffer[LCD_TEXT_BUFFER];
|
||||
permitted_channels = component_channel[component];
|
||||
zh_avr_160x_set_cursor(&lcd_handle, 1, 10);
|
||||
strcpy_P(text_buffer, component_cmm[component]);
|
||||
zh_avr_160x_print_char(&lcd_handle, text_buffer);
|
||||
zh_avr_160x_set_cursor(&lcd_handle, 2, 0);
|
||||
strcpy_P(text_buffer, component_line_1[component]);
|
||||
zh_avr_160x_print_char(&lcd_handle, text_buffer);
|
||||
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 ? 0xF9 : 0xFA);
|
||||
zh_avr_pcf8574_write(&led2_handle, 0x0F);
|
||||
if ((permitted_channels & CHANNEL1) == CHANNEL1)
|
||||
{
|
||||
zh_avr_pcf8574_write_gpio(&led1_handle, NUM1_LED_BLUE, LED_ON);
|
||||
}
|
||||
if ((permitted_channels & CHANNEL2) == CHANNEL2)
|
||||
{
|
||||
zh_avr_pcf8574_write_gpio(&led1_handle, NUM2_LED_BLUE, LED_ON);
|
||||
}
|
||||
if ((permitted_channels & CHANNEL3) == CHANNEL3)
|
||||
{
|
||||
zh_avr_pcf8574_write_gpio(&led2_handle, NUM3_LED_BLUE, LED_ON);
|
||||
}
|
||||
if ((permitted_channels & CHANNEL4) == CHANNEL4)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
88
src/ate0003.h
Normal file
88
src/ate0003.h
Normal file
@@ -0,0 +1,88 @@
|
||||
#pragma once
|
||||
|
||||
#include "stdint.h"
|
||||
|
||||
#define HIGH true
|
||||
#define LOW false
|
||||
|
||||
#define LED_OFF HIGH
|
||||
#define LED_ON LOW
|
||||
|
||||
#define RELAY_OFF LOW
|
||||
#define RELAY_ON HIGH
|
||||
|
||||
#define LCD_TEXT_BUFFER 16
|
||||
|
||||
#define BUTTON_I2C_ADDRESS 0x27 // U5.
|
||||
#define LED1_I2C_ADDRESS 0x25 // U6.
|
||||
#define LED2_I2C_ADDRESS 0x26 // U7.
|
||||
#define RELAY_I2C_ADDRESS 0x23 // U8.
|
||||
#define LCD_I2C_ADDRESS 0x24 // U4.
|
||||
|
||||
#define GROUND_RELAY 0x00 // Relay K1. RL1 pin on U8.
|
||||
#define DMM_RELAY 0x01 // Relay K2. RL2 pin on U8.
|
||||
#define L1_RELAY 0x03 // Relay K4. RL4 pin on U8.
|
||||
#define L2_RELAY 0x04 // Relay K3. RL3 pin on U8.
|
||||
#define L3_RELAY 0x05 // Relay K6. RL6 pin on U8.
|
||||
#define L4_RELAY 0x02 // Relay K5. RL5 pin on U8.
|
||||
#define L5_RELAY 0x06 // Relay K7. RL7 pin on U8.
|
||||
|
||||
#define POWER_ENCODER 0x01 // Connector EN2.
|
||||
#define COMPONENT_ENCODER 0x02 // Connector EN1.
|
||||
|
||||
#define DMM_BUTTON 0x00 // Connector BT1. BT1-0 on U5.
|
||||
#define FIX_BUTTON 0x01 // Connector BT2. BT2-1 on U5.
|
||||
#define NUM1_BUTTON 0x02 // Connector BT3. BT3-2 on U5.
|
||||
#define NUM2_BUTTON 0x03 // Connector BT4. BT4-3 on U5.
|
||||
#define NUM3_BUTTON 0x04 // Connector BT5. BT5-4 on U5.
|
||||
#define NUM4_BUTTON 0x05 // Connector BT6. BT6-5 on U5.
|
||||
|
||||
#define DMM_LED_RED 0x00 // Connector LE1. 2 PIN. L1-0 pin on U6.
|
||||
#define DMM_LED_GREEN 0x01 // Connector LE1. 1 PIN. L1-1 pin on U6.
|
||||
#define FIX_LED_BLUE 0x02 // Connector LE2. 2 PIN. L2-2 pin on U6.
|
||||
#define FIX_LED_GREEN 0x03 // Connector LE2. 1 PIN. L2-3 pin on U6.
|
||||
#define NUM1_LED_BLUE 0x04 // Connector LE3. 2 PIN. L3-4 pin on U6.
|
||||
#define NUM1_LED_GREEN 0x05 // Connector LE3. 1 PIN. L3-5 pin on U6.
|
||||
#define NUM2_LED_BLUE 0x06 // Connector LE4. 2 PIN. L4-6 pin on U6.
|
||||
#define NUM2_LED_GREEN 0x07 // Connector LE4. 1 PIN. L4-7 pin on U6.
|
||||
#define NUM3_LED_BLUE 0x00 // Connector LE5. 2 PIN. L5-0 pin on U7.
|
||||
#define NUM3_LED_GREEN 0x01 // Connector LE5. 1 PIN. L5-1 pin on U7.
|
||||
#define NUM4_LED_BLUE 0x02 // Connector LE6. 2 PIN. L6-2 pin on U7.
|
||||
#define NUM4_LED_GREEN 0x03 // Connector LE6. 1 PIN. L6-3 pin on U7.
|
||||
|
||||
#define CHANNEL1 0x08
|
||||
#define CHANNEL2 0x04
|
||||
#define CHANNEL3 0x02
|
||||
#define CHANNEL4 0x01
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
const char text_company[] PROGMEM = "LLC AEROTECH";
|
||||
const char text_model[] PROGMEM = "ATE0003.000.000";
|
||||
const char text_firmware[] PROGMEM = "Firmware v1.0.0";
|
||||
const char text_ac_power[] PROGMEM = "A/C POWER: ";
|
||||
const char text_component[] PROGMEM = "COMPONENT: ";
|
||||
|
||||
const char component_1_cmm[] PROGMEM = " ANY ";
|
||||
const char component_2_cmm[] PROGMEM = "334230";
|
||||
const char component_3_cmm[] PROGMEM = "334303";
|
||||
const char component_4_cmm[] PROGMEM = "334711";
|
||||
const char component_5_cmm[] PROGMEM = "334612";
|
||||
|
||||
const char component_1_line_1[] PROGMEM = "1:RED 2:GREEN";
|
||||
const char component_1_line_2[] PROGMEM = "3:ORANG 4:WHITE";
|
||||
const char component_2_line_1[] PROGMEM = "1:N/A 2:LOGO ";
|
||||
const char component_2_line_2[] PROGMEM = "3:N/A 4:N/A ";
|
||||
const char component_3_line_1[] PROGMEM = "1:N/A 2:N/A ";
|
||||
const char component_3_line_2[] PROGMEM = "3:RUNWA 4:N/A ";
|
||||
const char component_4_line_1[] PROGMEM = "1:LOGO 2:N/A ";
|
||||
const char component_4_line_2[] PROGMEM = "3:N/A 4:N/A ";
|
||||
const char component_5_line_1[] PROGMEM = "1:400W 2:600W ";
|
||||
const char component_5_line_2[] PROGMEM = "3:N/A 4:N/A ";
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
1
version.txt
Normal file
1
version.txt
Normal file
@@ -0,0 +1 @@
|
||||
1.0.0
|
||||
Reference in New Issue
Block a user