Controlador de Fator de Potência

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor _blackmore_ » 21 Jun 2010 16:41

e o link?
Ouça mais classic rock
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor RAguiar » 21 Jun 2010 19:25

leoabubauru escreveu:RAguiar

Segue link interessante sobre FP. Ele abrange, inclusive, a distorção harmônica, muito relevante num estudo como este. Digo isto pois, em alguns casos, banco de capacitores que foram projetados para corrigir o fator de potência explodem por não levarem em conta a distorção harmônica.

Bom divertimento


Laercio Barbosa


O Link não apareceu Laercio, fico no aguardo. Obrigado.
RAguiar
Byte
 
Mensagens: 164
Registrado em: 17 Jun 2010 12:52
Localização: Louveira/SP

Mensagempor leoabubauru » 21 Jun 2010 19:56

Tento, tento e tento...
Me arrebento!
Também bato!
Ô negocim bunitim essa tal eletrônica de barco!
leoabubauru
Byte
 
Mensagens: 227
Registrado em: 21 Nov 2006 19:08
Localização: São Paulo

Mensagempor _blackmore_ » 31 Out 2010 23:20

e o projeto?
funfou?
Ouça mais classic rock
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor rcakto » 01 Nov 2010 00:06

RAguir, tambem sou tecnico em eletrotecnica, olha.. se prepara... tava pensando em fazer meu TCC sobre o mesmo assunto que voce.. mas como o meu professor (aquele f....) é MUITO exigente, ja comecou com usar transofrmador de corrente e o escambau a 10.. em resumo.. agora eu não tenho em mãos meu caderno, mas tem uma função que com ela voce descobre qual o valor do cos θ (0,90 0,80 e por ai vai..) mas voce vai precisar saber a potencia total e ativa, assim facilita o trabalho... pois existem casos onde a diferenca da angulação do não esta relacionado ao fator de potencia... e e relação ao fator de potencia, se voce não analisar devidamente pode ser o caso de não um fp indutivo e sim capacitivo... procure melhor que existem ICs que trabalham sobre fatores de potencia.... na eletronica saber tinha algumas materias la... da uma olhada no site deles...
(parado por culpa da faculdade...)Osciloscopio opensource... entre e participe:
http://asm51.eng.br/phpBB/viewtopic.php?t=10710
rcakto
Word
 
Mensagens: 787
Registrado em: 09 Jun 2010 00:57
Localização: vitoria ES

Mensagempor RAguiar » 08 Dez 2010 10:01

Bom dia pessoal, aqui estou eu novamente...estou fazendo uns projetos elétricos e raramente me sobra tempo pra brincar com o PIC...desde meu ultimo post, mexi 3 finais de semana com o PIC...
Pois bem, tentei fazer aquele esquema de usar janelas para "pegar" o zero tensão/corrente...só que o que acontece, pego o zero tensão, entra na proxima rotina, pego o zero corrente e por meio de tempo pré definido sei o FP (defasagem) armazeno na variavel b e uso pra alguma coisa futura, porém acontece que o tempo é muito curto entre semiciclos zero, 0,00833 segundos, e aí não consigo chegar à um ajuste...

...estou fazendo assim: (CCS C)

if input (pin_a0) // Quando chegar o zero tensão entra na função seguinte:
{
if input (pin_a1) b = 100 //Se zero corrente for no mesmo instante que zero tensão então FP=100

delay_us (8333); //atraso de 8333 microsegundos

if input (pin_a1) b = 99 //Se zero corrente for 8333 microsegundos atraso em relação à zero tensão então FP = 99

delay_us (8333); //atraso de 8333 microsegundos

if input (pin_a1) b= 98 // Se zero corrente for 16666 microsegundos atraso em relação à zero tensão então FP = 98

...
}
...e assim sucessivamente...e aí? vcs acham que estou indo pelo caminho certo?To queimando mufla aqui, e não consegui nada ainda.O Display mostra sempre FP=1 pois é a ultima linha do bloco...acho que estou errando no debounce...
RAguiar
Byte
 
Mensagens: 164
Registrado em: 17 Jun 2010 12:52
Localização: Louveira/SP

Mensagempor fabim » 08 Dez 2010 10:14

putz, tai o primeiro erro, PIC, o segundo e pior que o primeiro CCS!!!

O lellis deve estar vomitando agora!!!!
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor RAguiar » 08 Dez 2010 10:25

fabim escreveu:putz, tai o primeiro erro, PIC, o segundo e pior que o primeiro CCS!!!

O lellis deve estar vomitando agora!!!!



éééééé, concordo, o CCS tem uma sacanagem!

quando comecei à usá-lo estava apanhando bastante, tipo assim, eu mandava compilar, certo, dái em determinado momento que compilava denovo o CCS não alterava o .HEX, levou um tempo para eu perceber isso, pois eu escrevia os comandos, mas quando gravava no PIC, ele não fazia, daí eu achava que eu é que tinha "programado" errado, mas na verdade era o CCS que não fazia a parte dele...agora com questão ao C, acho melhor que as demais linguagens, pois daí foco-me na lógica da programação, já o demais tipos de linguaguem tomam tempo, pois vc tem de configurar tudo...já em C, basta informar o que se quer e o compilador se encarregar de fazer o resto...falando assim até parece que é molzinha :D
RAguiar
Byte
 
Mensagens: 164
Registrado em: 17 Jun 2010 12:52
Localização: Louveira/SP

Mensagempor Red Neck Guy » 08 Dez 2010 11:20

RAguiar escreveu:Bom dia pessoal, aqui estou eu novamente...estou fazendo uns projetos elétricos e raramente me sobra tempo pra brincar com o PIC...desde meu ultimo post, mexi 3 finais de semana com o PIC...
Pois bem, tentei fazer aquele esquema de usar janelas para "pegar" o zero tensão/corrente...só que o que acontece, pego o zero tensão, entra na proxima rotina, pego o zero corrente e por meio de tempo pré definido sei o FP (defasagem) armazeno na variavel b e uso pra alguma coisa futura, porém acontece que o tempo é muito curto entre semiciclos zero, 0,00833 segundos, e aí não consigo chegar à um ajuste...

...estou fazendo assim: (CCS C)

if input (pin_a0) // Quando chegar o zero tensão entra na função seguinte:
{
if input (pin_a1) b = 100 //Se zero corrente for no mesmo instante que zero tensão então FP=100

delay_us (8333); //atraso de 8333 microsegundos

if input (pin_a1) b = 99 //Se zero corrente for 8333 microsegundos atraso em relação à zero tensão então FP = 99

delay_us (8333); //atraso de 8333 microsegundos

if input (pin_a1) b= 98 // Se zero corrente for 16666 microsegundos atraso em relação à zero tensão então FP = 98

...
}
...e assim sucessivamente...e aí? vcs acham que estou indo pelo caminho certo?To queimando mufla aqui, e não consegui nada ainda.O Display mostra sempre FP=1 pois é a ultima linha do bloco...acho que estou errando no debounce...


Com esse tipo de abordagem, na minha opinião, tu não chegará a nenhum resultado que seja aplicável a um produto comercial.
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Mensagempor RAguiar » 08 Dez 2010 12:45

Aquino escreveu:
RAguiar escreveu:Bom dia pessoal, aqui estou eu novamente...estou fazendo uns projetos elétricos e raramente me sobra tempo pra brincar com o PIC...desde meu ultimo post, mexi 3 finais de semana com o PIC...
Pois bem, tentei fazer aquele esquema de usar janelas para "pegar" o zero tensão/corrente...só que o que acontece, pego o zero tensão, entra na proxima rotina, pego o zero corrente e por meio de tempo pré definido sei o FP (defasagem) armazeno na variavel b e uso pra alguma coisa futura, porém acontece que o tempo é muito curto entre semiciclos zero, 0,00833 segundos, e aí não consigo chegar à um ajuste...

...estou fazendo assim: (CCS C)

if input (pin_a0) // Quando chegar o zero tensão entra na função seguinte:
{
if input (pin_a1) b = 100 //Se zero corrente for no mesmo instante que zero tensão então FP=100

delay_us (8333); //atraso de 8333 microsegundos

if input (pin_a1) b = 99 //Se zero corrente for 8333 microsegundos atraso em relação à zero tensão então FP = 99

delay_us (8333); //atraso de 8333 microsegundos

if input (pin_a1) b= 98 // Se zero corrente for 16666 microsegundos atraso em relação à zero tensão então FP = 98

...
}
...e assim sucessivamente...e aí? vcs acham que estou indo pelo caminho certo?To queimando mufla aqui, e não consegui nada ainda.O Display mostra sempre FP=1 pois é a ultima linha do bloco...acho que estou errando no debounce...


Com esse tipo de abordagem, na minha opinião, tu não chegará a nenhum resultado que seja aplicável a um produto comercial.


...olha, vou ser sincero contigo, se eu ouvisse pessoas pessimistas como vc eu não seria o que sou hoje, dê sua sugestão (dicas, etc), críticas e pessimismo não são bem vindos...se for questão de concorrência, já existem muitos produtos do estilo no mercado (Tenho Alicate Wattimetro e Analisador de Energia, ou seja nem preciso criar algo que meça FP)...produtos baratos, sendo que investir num projeto do zero é muitas veses investimento de anos e retorno super baixo (garanto à vc que ganho mais dinheiro fazendo um projeto de Pára-Raios do que tentar inventar um produto eletrônico), mais facil comprar um pronto, para pessoas como vc, digo que isso é apenas procurar conhecimento,claro que um dia posso estar vendendo este produto afinal quem é esperto e inteligente vende o seu peixe...enfim, espero idéias e não pessimismo, se vc tiver alguma idéia melhor que a minha, mostre-a aqui, afinal o forum é pra isso (ou não? é para se mostrar?). Não estou pedindo um projeto eletronico pronto, estou apenas querendo trocar idéias, se é que me entende?

Um dia que vc precisar de alguma dica relacionada à Engenharia Elétrica, poderei lhe explicar numa boa, ou então quem sabe dizer à vc que vc não tem capacidade para ligar com isso, ou seja pagamos o troco à mesma altura.
RAguiar
Byte
 
Mensagens: 164
Registrado em: 17 Jun 2010 12:52
Localização: Louveira/SP

Mensagempor Red Neck Guy » 08 Dez 2010 14:24

RAguiar escreveu:
Aquino escreveu:
RAguiar escreveu:Bom dia pessoal, aqui estou eu novamente...estou fazendo uns projetos elétricos e raramente me sobra tempo pra brincar com o PIC...desde meu ultimo post, mexi 3 finais de semana com o PIC...
Pois bem, tentei fazer aquele esquema de usar janelas para "pegar" o zero tensão/corrente...só que o que acontece, pego o zero tensão, entra na proxima rotina, pego o zero corrente e por meio de tempo pré definido sei o FP (defasagem) armazeno na variavel b e uso pra alguma coisa futura, porém acontece que o tempo é muito curto entre semiciclos zero, 0,00833 segundos, e aí não consigo chegar à um ajuste...

...estou fazendo assim: (CCS C)

if input (pin_a0) // Quando chegar o zero tensão entra na função seguinte:
{
if input (pin_a1) b = 100 //Se zero corrente for no mesmo instante que zero tensão então FP=100

delay_us (8333); //atraso de 8333 microsegundos

if input (pin_a1) b = 99 //Se zero corrente for 8333 microsegundos atraso em relação à zero tensão então FP = 99

delay_us (8333); //atraso de 8333 microsegundos

if input (pin_a1) b= 98 // Se zero corrente for 16666 microsegundos atraso em relação à zero tensão então FP = 98

...
}
...e assim sucessivamente...e aí? vcs acham que estou indo pelo caminho certo?To queimando mufla aqui, e não consegui nada ainda.O Display mostra sempre FP=1 pois é a ultima linha do bloco...acho que estou errando no debounce...


Com esse tipo de abordagem, na minha opinião, tu não chegará a nenhum resultado que seja aplicável a um produto comercial.


...olha, vou ser sincero contigo, se eu ouvisse pessoas pessimistas como vc eu não seria o que sou hoje, dê sua sugestão (dicas, etc), críticas e pessimismo não são bem vindos...se for questão de concorrência, já existem muitos produtos do estilo no mercado (Tenho Alicate Wattimetro e Analisador de Energia, ou seja nem preciso criar algo que meça FP)...produtos baratos, sendo que investir num projeto do zero é muitas veses investimento de anos e retorno super baixo (garanto à vc que ganho mais dinheiro fazendo um projeto de Pára-Raios do que tentar inventar um produto eletrônico), mais facil comprar um pronto, para pessoas como vc, digo que isso é apenas procurar conhecimento,claro que um dia posso estar vendendo este produto afinal quem é esperto e inteligente vende o seu peixe...enfim, espero idéias e não pessimismo, se vc tiver alguma idéia melhor que a minha, mostre-a aqui, afinal o forum é pra isso (ou não? é para se mostrar?). Não estou pedindo um projeto eletronico pronto, estou apenas querendo trocar idéias, se é que me entende?

Um dia que vc precisar de alguma dica relacionada à Engenharia Elétrica, poderei lhe explicar numa boa, ou então quem sabe dizer à vc que vc não tem capacidade para ligar com isso, ou seja pagamos o troco à mesma altura.


Olha só, releia a minha frase e depois xingue.
Eu disse que com esse tipo de abordagem que tu não chegara a lugar nenhum. Agora, se mudares (por exemplo pra inicio...) fazendo as leituras do intervalo usando a interrupção externa e um dos timers já ficaria mais próximo do resultado final.
Cara tu é tipo mulher que tem que falar as coisas com jeito pra não ficar magoada?....[/b]
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Mensagempor fabim » 08 Dez 2010 15:04

Bom o Aquino ta tomando "carma nervos", então sei que ele ta calmo pra cassilda, agora não sei...
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor RAguiar » 12 Dez 2010 18:54

Boa noite pessoal...bom não sei porque mas este Post parece ter um numero grande de visualizações mesmo (por enquanto) não chegando à lugar algum...acredito eu que a palavra Fator de POtência tem sido muito pesquisada no Google e consequentemente o pessoal acaba chegando aqui...até porque com as cobranças de reativo excedente, tem muita gente tentando entender o que é esse trem "Fator de POtencia" e como não pagar pela multa do reativo excedente...
então como tem bastante gente "interessada" no assunto resolvi dedicar um tempinho todos os finais de semana para tentar chegar num projetinho utilizável para clientes residênciais/Comerciais, excluindo-se a grandes empresas que usam equipamentos mais caros para a correção do FP...então esse "projetinho" tenderá à ser para pequenos clientes, usando pequenos componentes.

Pois bem, andei pesquisando na NET e encontrei Monografias sobre FP...com Hardwares descritos, mas naaaaaada sob o Software.
Encontrei uma Monografia que segundo o autor, é possível determinar o FP de uma carga, utilizando-se de comparadores de tensão + uma AND e um PIC... basicamente a Porta AND soma os dois sinais dos comparadores e gera uma onda quadrada, sendo que o nível alto (1) determina o FP, sendo que com a duração deste nivel 1 chega-se ao FP através de calculos internos no PIC...
...pois bem, o código (com algumas alterações feitas por mim) é esse:

#include <16f877a.h>
#use delay(clock=4000000)
#fuses XT,NOWDT, PUT, BROWNOUT, NOLVP, NOCPD
#use fast_io (a)
#use fast_io (b)
#byte porta = 0x05
#byte portb = 0x06
#byte Rb = 0x06
#define trisb 0b00001010 // 1 input
//
#bit capturou = 0x0C.2 // CCP1IE
#bit interrupcao = 0x8C.2 //CCP1IE
//
#include "lcd.c"

void main()
{
int16 tempo, a;
setup_timer_0 (RTCC_INTERNAL | RTCC_DIV_1);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
setup_timer_2 (T2_DISABLED, 0, 1);
setup_comparator (NC_NC_NC_NC);
setup_vref (FALSE); //captura pulso ascendente
setup_ccp1 (CCP_CAPTURE_RE);
//
Set_tris_b (trisb); //direção dos bits do port B
Rb = 0; //zera todos os bits
While (true)
{
capturou = 0; //zera flag de captura
interrupcao = 0; //zera flag de interrupção
set_timer1 (0); //zera o timer1, icremento a cada 1us
while ( ! capturou );//executa enquanto não capturou
{
output_high (pin_d1);
delay_ms (500);
output_low (pin_d1);
delay_ms (500);
}
tempo = ccp_1; //houve um evento em RB3 capturou o tempo

lcd_init();
printf (lcd_putc, "Tempo = %lu\r\n", tempo );
delay_ms (2000);
}

reset_cpu();
}

...porém, não obtive sucesso...o código acima deveria servir para medir o tempo de um evento no CCP1 em microsegundos...com outro PIC criei uma onda quadrada e apliquei ao PIC 1, mas o PIC 1 não media corretamente, exibia valores oscilantes e nada à ver com o tempo Injetado...(fiquei metade no dia tentando regular, mas...nada).

...então resolvi voltar a idéia inicial (que muitos irão criticar!), que seria capturar o zero tensão, entra num bloco e capturar o zero corrente através de janelas no tempo...tipo o código abaixo:

//(pin_a0 é do zero tensão / pin_a1 é do zero corrente)

#include <16f877a.h>
#use delay (clock=4000000)
#fuses XT, NOWDT, NOPUT, NOPROTECT, BROWNOUT
#byte porta = 0x05
#byte portb = 0x06

#include "lcd.c"

main()

{

set_tris_a(0x00);
set_tris_b(0x00);
porta = 0x00;
portb = 0x00;


lcd_init();
lcd_putc("\fAGUARDE");
lcd_putc("\nINICIALIZANDO");


delay_ms (3000);
lcd_init();

While(true)
{

int16 b;

if (input (pin_a0)) //Pega o Zero Tensão, quando houver o zero tensão passa entra ao bloco de instruções:
{
if (input (pin_a1)) b = 100;
delay_us (83);
if (input (pin_a1)) b = 99;
delay_us (83);
if (input (pin_a1)) b = 98;
delay_us (83);
if (input (pin_a1)) b = 97;
delay_us (83);
if (input (pin_a1)) b = 96;
delay_us (83);
if (input (pin_a1)) b = 95;
delay_us (83);
if (input (pin_a1)) b = 94;
delay_us (83);
if (input (pin_a1)) b = 93;
delay_us (83);
if (input (pin_a1)) b = 92;
delay_us (83);
if (input (pin_a1)) b = 91;
delay_us (83);
if (input (pin_a1)) b = 90;
delay_us (83);
if (input (pin_a1)) b = 89;
delay_us (83);
if (input (pin_a1)) b = 88;
delay_us (83);
if (input (pin_a1)) b = 87;
delay_us (83);
if (input (pin_a1)) b = 86;
delay_us (83);
if (input (pin_a1)) b = 85;
delay_us (83);
if (input (pin_a1)) b = 84;
delay_us (83);
if (input (pin_a1)) b = 83;
delay_us (83);
if (input (pin_a1)) b = 82;
delay_us (83);
if (input (pin_a1)) b = 81;
delay_us (83);
if (input (pin_a1)) b = 80;
delay_us (83);
if (input (pin_a1)) b = 79;
delay_us (83);
if (input (pin_a1)) b = 78;
delay_us (83);
if (input (pin_a1)) b = 77;
delay_us (83);
if (input (pin_a1)) b = 76;
delay_us (83);
if (input (pin_a1)) b = 75;
delay_us (83);
if (input (pin_a1)) b = 74;
delay_us (83);
if (input (pin_a1)) b = 73;
delay_us (83);
if (input (pin_a1)) b = 72;
delay_us (83);
if (input (pin_a1)) b = 71;
delay_us (83);
if (input (pin_a1)) b = 70;
delay_us (83);
if (input (pin_a1)) b = 69;
delay_us (83);
if (input (pin_a1)) b = 68;
delay_us (83);
if (input (pin_a1)) b = 67;
delay_us (83);
if (input (pin_a1)) b = 66;
delay_us (83);
if (input (pin_a1)) b = 65;
delay_us (83);
if (input (pin_a1)) b = 64;
delay_us (83);
if (input (pin_a1)) b = 63;
delay_us (83);
if (input (pin_a1)) b = 62;
delay_us (83);
if (input (pin_a1)) b = 61;
delay_us (83);
if (input (pin_a1)) b = 60;
delay_us (83);
if (input (pin_a1)) b = 59;
delay_us (83);
if (input (pin_a1)) b = 58;
delay_us (83);
if (input (pin_a1)) b = 57;
delay_us (83);
if (input (pin_a1)) b = 56;
delay_us (83);
if (input (pin_a1)) b = 55;
delay_us (83);
if (input (pin_a1)) b = 54;
delay_us (83);
if (input (pin_a1)) b = 53;
delay_us (83);
if (input (pin_a1)) b = 52;
delay_us (83);
if (input (pin_a1)) b = 51;
delay_us (83);
if (input (pin_a1)) b = 50;
delay_us (83);
if (input (pin_a1)) b = 49;
delay_us (83);
if (input (pin_a1)) b = 48;
delay_us (83);
if (input (pin_a1)) b = 47;
delay_us (83);
if (input (pin_a1)) b = 46;
delay_us (83);
if (input (pin_a1)) b = 45;
delay_us (83);
if (input (pin_a1)) b = 44;
delay_us (83);
if (input (pin_a1)) b = 43;
delay_us (83);
if (input (pin_a1)) b = 42;
delay_us (83);
if (input (pin_a1)) b = 41;
delay_us (83);
if (input (pin_a1)) b = 40;
delay_us (83);
if (input (pin_a1)) b = 39;
delay_us (83);
if (input (pin_a1)) b = 38;
delay_us (83);
if (input (pin_a1)) b = 37;
delay_us (83);
if (input (pin_a1)) b = 36;
delay_us (83);
if (input (pin_a1)) b = 35;
delay_us (83);
if (input (pin_a1)) b = 34;
delay_us (83);
if (input (pin_a1)) b = 33;
delay_us (83);
if (input (pin_a1)) b = 32;
delay_us (83);
if (input (pin_a1)) b = 31;
delay_us (83);
if (input (pin_a1)) b = 30;
delay_us (83);
if (input (pin_a1)) b = 29;
delay_us (83);
if (input (pin_a1)) b = 28;
delay_us (83);
if (input (pin_a1)) b = 27;
delay_us (83);
if (input (pin_a1)) b = 26;
delay_us (83);
if (input (pin_a1)) b = 25;
delay_us (83);
if (input (pin_a1)) b = 24;
delay_us (83);
if (input (pin_a1)) b = 23;
delay_us (83);
if (input (pin_a1)) b = 22;
delay_us (83);
if (input (pin_a1)) b = 21;
delay_us (83);
if (input (pin_a1)) b = 20;
delay_us (83);
if (input (pin_a1)) b = 19;
delay_us (83);
if (input (pin_a1)) b = 18;
delay_us (83);
if (input (pin_a1)) b = 17;
delay_us (83);
if (input (pin_a1)) b = 16;
delay_us (83);
if (input (pin_a1)) b = 15;
delay_us (83);
if (input (pin_a1)) b = 14;
delay_us (83);
if (input (pin_a1)) b = 13;
delay_us (83);
if (input (pin_a1)) b = 12;
delay_us (83);
if (input (pin_a1)) b = 11;
delay_us (83);
if (input (pin_a1)) b = 10;
delay_us (83);
if (input (pin_a1)) b = 9;
delay_us (83);
if (input (pin_a1)) b = 8;
delay_us (83);
if (input (pin_a1)) b = 7;
delay_us (83);
if (input (pin_a1)) b = 6;
delay_us (83);
if (input (pin_a1)) b = 5;
delay_us (83);
if (input (pin_a1)) b = 4;
delay_us (83);
if (input (pin_a1)) b = 3;
delay_us (83);
if (input (pin_a1)) b = 2;
delay_us (83);
if (input (pin_a1)) b = 1;
delay_us (83);

lcd_init();
lcd_putc ("\f");
printf (lcd_putc, "FP = %lu\r\n", b);
delay_ms (1000);
//lcd_init();
}
}
}

...esse código por sua vez mostrou-se comilão de memória, uso 20% do PIC, contra 6% do primeiro que não funcionou corretamente...
...entretanto esse funcionou...fiz uma simulação com outro PIC, simulando o Zero Tensão e Zero corrente...funcionou numa boa, não ficou oscilando valores, etc...

...bom, mais pra frente vou incrementar mais, tipo assim, após obtenção do FP, obter também valor de Corrente e Tensão e assim calcular internamente KW, KVA, KVAr e mostrar do Display em tempo real...

...alguém tem alguma dica de como eu poderia obter o zero tensão e zero corrente em questões de hardware?
...eu já estou vendo algumas coisas por aqui...mas quem quiser compartilhar IDEIAS (não pessimismo) sou todos ouvidos, ou melhor, olho no monitor.

Flw.
RAguiar
Byte
 
Mensagens: 164
Registrado em: 17 Jun 2010 12:52
Localização: Louveira/SP

Mensagempor Andre_Cruz » 12 Dez 2010 23:48

RAguiar,

Você pode trocar todos os ifs aninhados por um laço, por exemplo um for.
Algo tipo:

Código: Selecionar todos
      if(input(pin_a0)) {

           for(c = 100 ; c > 0 ; c--) {
                if(input(pin_a1)) b = c;
                delay_us(83);
           }

           //Escreve no lcd
     }


Para melhorar mais um pouco você pode colocar um comando "break" no if dentro do for, quando ele se tornar verdadeiro, força a saída do for e já atualiza o lcd ou segue sua lógica, assim você não fica testando a cada 83uS depois que o if dentro do for se tornou verdadeiro.

Abraço
Boa sorte com o projeto

André Cruz
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor RAguiar » 13 Dez 2010 10:56

Andre_Cruz escreveu:RAguiar,

Você pode trocar todos os ifs aninhados por um laço, por exemplo um for.
Algo tipo:

Código: Selecionar todos
      if(input(pin_a0)) {

           for(c = 100 ; c > 0 ; c--) {
                if(input(pin_a1)) b = c;
                delay_us(83);
           }

           //Escreve no lcd
     }


Para melhorar mais um pouco você pode colocar um comando "break" no if dentro do for, quando ele se tornar verdadeiro, força a saída do for e já atualiza o lcd ou segue sua lógica, assim você não fica testando a cada 83uS depois que o if dentro do for se tornou verdadeiro.

Abraço
Boa sorte com o projeto

André Cruz



hum...acho que entendi...troco todos os IF's por um laço for...aí ele vai decrementando até chegar no zero corrente...quando chegar...sai do laço e mostra no display...e ocupa muito menos espaço na memória...isso?
RAguiar
Byte
 
Mensagens: 164
Registrado em: 17 Jun 2010 12:52
Localização: Louveira/SP

AnteriorPróximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x