Pessoal, estou com um problema na programação de um dispositivo que detecta quedas de tensão da rede acima de 4%. Eu preciso que a programação calcule as quedas de 4% a 7%, ligando um led verde se está abaixo de 4%, um led amarelo se está entre 4% e 7% e um led vermelho acima de 7%.
Segue abaixo o que consegui fazer até agora.
//armazenamento das tensões
int tensao1 = 0x00;
int tensao2 = 0x00;
// declara as variáveis
int a, b, x, y;
void volts()
{
if (tensao1==0)//tensao1 igual a zero
{
tensao1 = ADC_Read(0);
}
//Lê canal AN0 apenas uma vez e transfere seu valor para tensao1
else if (tensão==1)//tensão1 diferente de 0
{
tensao2 = ADC_Read (0);//Lê o canal AN0
delay_ms(100);//atualiza a cada 100ms
}
}//end função volts
void main()
{
ANSEL = 0x01;// AN0 como entrada analogica
ADCON0 = 0x01;// seleciona a entrada AN0
ADCON1 = 0x0E;
CMCON0 = 0x07;//desliga os comparadores
//configura PORTA
TRISA = 0xFF;// AN0 entrada
PORTA = 0x00;// PORTA em nvl baixo
//configura PORTC
TRISC = 0xFF;// PORTC como saída
PORTC = 0x00;// PORTC em nvl baixo
a = (tensao1*(4/100));//4% da tensão nominal
b = (tensao1*(7/100));//7% da tensão nominal
x = tensao1-a;//tensão nominal-4%
y = tensao1-b;//tensão nominal-7%
if (tensao2>x)// se a queda estiver menor que 4%, liga o led verde
{
RA1_bit = 1;//led verde ligado
RA2_bit = 0;//led amarelo desligado
RC0_bit = 0;//interrupção desligada
}
else if (tensao2>y && tensao2<=x)// se a queda estiver entre 4% e 7%, liga o led amarelo
{
RA2_bit = 1;//led amarelo ligado
RA1_bit = 0;//led verde desligado
RC0_bit = 0;//interrupção desligada
}
else (tensao2<y);// se a queda for maior que 7%, liga o circuito de interrupção e o led vermelho
{
RC0_bit = 0;//interrupção ligada
RA1_bit = 0;//led verde desligado
RA2_bit = 0;//led amarelo desligado
}
}// end função principal