Игнорируем моргание линка при включении PLC

main
Daniil A. Smirnov 2025-12-13 14:39:08 +03:00
parent 0b707534e0
commit 5948b70b08
1 changed files with 8 additions and 8 deletions

View File

@ -1,6 +1,6 @@
#include <avr/io.h> #include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h> #include <avr/interrupt.h>
#include <util/delay.h>
#define Link1pin PB2 // Пин оптопары светодиода линка #define Link1pin PB2 // Пин оптопары светодиода линка
#define Link2pin PB1 // Пин оптопары светодиода линка #define Link2pin PB1 // Пин оптопары светодиода линка
@ -27,7 +27,7 @@ ISR(TIM0_OVF_vect)
uint8_t check_link(void) // Проверка линка uint8_t check_link(void) // Проверка линка
{ {
if(!(PINB & (1 << Link1pin) || PINB & (1 << Link2pin))) // Если горит хотя бы один светодиод линка if(!(PINB & (1 << Link1pin)) || !(PINB & (1 << Link2pin))) // Если горит хотя бы один светодиод линка
{ {
return 1; // То возвращаем 1 return 1; // То возвращаем 1
} }
@ -54,28 +54,28 @@ int main(void)
if(new_mode == MODE_WAIT_LINK) if(new_mode == MODE_WAIT_LINK)
{ {
PORTB &= ~(1<<PLCPWRpin); // PLC ON PORTB &= ~(1<<PLCPWRpin); // PLC ON
timer = 60*36; // +- 60 сек timer = 270; // +- 60 сек
} }
if(new_mode == MODE_LINK_UP) if(new_mode == MODE_LINK_UP)
{ {
PORTB |= (1<<EXTPWRpin); // Modem ON PORTB |= (1<<EXTPWRpin); // Modem ON
timer = 60*36; // +- 60 сек timer = 270; // +- 60 сек
} }
if(new_mode == MODE_SLEEP) if(new_mode == MODE_SLEEP)
{ {
PORTB &= ~(1<<EXTPWRpin); // Modem OFF PORTB &= ~(1<<EXTPWRpin); // Modem OFF
PORTB |= (1<<PLCPWRpin); // PLC OFF PORTB |= (1<<PLCPWRpin); // PLC OFF
timer = 300*36; // +- 5 минут timer = 1350; // +- 5 минут
} }
cur_mode = new_mode; cur_mode = new_mode;
} }
if (cur_mode == MODE_WAIT_LINK && check_link() == 1) // Если мы в режиме ожидания линка и линк есть if (cur_mode == MODE_WAIT_LINK && check_link() == 1 && timer < 180) // Если мы в режиме ожидания линка и линк есть
{ {
new_mode = 2; // То переходим в рабочий режим new_mode = MODE_LINK_UP; // То переходим в рабочий режим
} }
if (cur_mode == MODE_LINK_UP && check_link() == 1) // Если мы в рабочем режиме и линк есть if (cur_mode == MODE_LINK_UP && check_link() == 1) // Если мы в рабочем режиме и линк есть
{ {
timer = 60*36; // +- 60 сек, то не даем таймеру обнулиться timer = 270; // +- 60 сек, то не даем таймеру обнулиться
} }
if(timer == 0 && (cur_mode == MODE_WAIT_LINK || cur_mode == MODE_LINK_UP)) // Если таймер истек, а линка нет if(timer == 0 && (cur_mode == MODE_WAIT_LINK || cur_mode == MODE_LINK_UP)) // Если таймер истек, а линка нет
{ {