Игнорируем моргание линка при включении PLC
parent
0b707534e0
commit
5948b70b08
16
fw/PLCpwr.c
16
fw/PLCpwr.c
|
|
@ -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)) // Если таймер истек, а линка нет
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue