Ir ao conteúdo
  • Cadastre-se

Dimmer com PIC16F688


Posts recomendados

Boa noite, estou tentando implementar um Dimmer com o PIC16F688, mas estou com problema quando coloco a leitura de um potenciômetro no programa. Segue o programa.

bit control;
float rad = 0.00;
float T1 = 0.00;
float T2 = 0.00;
int Tempo = 0;
char msbyte = 0;
char lsbyte = 0;
int ADPOT = 0;

void Interrupt()
{
    if (INTF_bit)
    {
        lsbyte = Tempo;
        msbyte = (Tempo & 0xFF00) >> 8;
        
        TMR1H = msbyte;
        TMR1L = lsbyte;
        TMR1ON_bit = 0x01;

        control = ~control;
        INTF_bit = 0x00;

        if(control) INTEDG_bit = 0x01;
        else INTEDG_bit = 0x00;
    }
    if(TMR1IF_bit)
    {
        TMR1IF_bit = 0x00;
        RC1_bit = 0x01;
        delay_us(10);
        RC1_bit = 0x00;
        TMR1ON_bit = 0x00;
    }
}

void main()
{
    CMCON0 = 0x07;

    T1CON = 0x00;
    TMR1H = 0x00;
    TMR1L = 0x00;
    TMR1IF_bit = 0x00;
    TMR1IE_bit = 0x01;
    
    INTCON = 0xD0;
    INTEDG_bit = 0x00;

    TRISA = 0x01;
    TRISC = 0x00;
    
    ANSEL = 0x01;
    ADCON0 =0x01;
    
    PORTA = 0x01;
    PORTC = 0x00;

    control = 0x00;

    while(1)
    {

        delay_us(100);
        ADPOT =ADC_Read(0);
        
        rad = (3.14*ADPOT)/1023;
        T1 = (rad*8333.33)/3.14;

        if(T1<100)
        {
            T1 = 100;
        }
                   
        if(T1>8233)
        {
            T1 = 8233;
        }
          
        T2 = 65536 - T1;
        Tempo = (int)T2;
    }
}

Se alguém conseguir me ajudar fico muito agradecido.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

1/2 confuso 2me. nem tentei entender muito o que se passa pela tua cabeça. Mas na minha é assim: um dimmer simples basta detectar a passagem por zero, dar um tempo baseado no pot e causar um pulso. Praticamente nada de matemática complexa principalmente com ponto flutuante. Se o teu for mais que isso, sorry... 1/2 confuso 2me

Link para o comentário
Compartilhar em outros sites

É basicamente isso, mas estou usando o angulo de disparo de um tiristor, quando pego o AD do potenciômetro comparo ele com uma regra de 3 com o angulo de disparo, posteriormente faço uma rega de 3 para achar o tempo que devo dar o pulso para acionar o triac. Os ifs no código é pra limitar o min e max tempo de disparo para não dar problemas com chaveamento na passagem por zero. O meu problema realmente é que meu AD não esta lendo o pino com o potenciômetro nesse código e não consegui descobrir porque.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!