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