# Controle de Carga AC com PIC

**URL:** <https://forum.fazedores.com/t/controle-de-carga-ac-com-pic/8922>\
**Category:** Microcontroladores\
**Created:** [Janeiro 18, 2023, 7:14pm UTC](https://forum.fazedores.com/t/controle-de-carga-ac-com-pic/8922 "2023-01-18T19:14:04Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Proxy](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/proxy/32/3755_2.png) [@Proxy](https://forum.fazedores.com/u/Proxy)\
**Post date:** [Janeiro 18, 2023, 7:14pm UTC](https://forum.fazedores.com/t/controle-de-carga-ac-com-pic/8922/1 "2023-01-18T19:14:04Z")

</div>

Boa Tarde!

Tenho uma placa ja pronta que utiliza PIC 16F628A.  
Preciso criar um código que, com um único botão seja possível controlar a potencia em uma lampada 12vac.  
A placa utiliza o sistema de zero cross detector e um dimmer com triac.  
Ao apertar o botão uma vez e soltar a lampada liga no brilho máximo;  
Ao apertar novamente e soltar a lampada apaga;  
Agora se deixar o botão pressionado por 3 segundos essa lampada apaga e começa a aumentar o brilho do mínimo até o máximo em loop (ate soltar o botão) Utilizo o MikroC  
Algúem pode dar uma sugestão? sou iniciante em programação.

---

<div class="post-metadata">

**Author:** ![Proxy](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/proxy/32/3755_2.png) [@Proxy](https://forum.fazedores.com/u/Proxy)\
**Post date:** [Janeiro 19, 2023, 5:07pm UTC](https://forum.fazedores.com/t/controle-de-carga-ac-com-pic/8922/2 "2023-01-19T17:07:17Z")

</div>

Faltou o arquivo do código q comecei a desenvolver

 ![CKT Odonto](https://us1.discourse-cdn.com/flex016/uploads/fazedores/original/2X/d/d2dc56aa88abc5038433f078c765246cad06a373.jpeg)  
#define subida\_encosto RA0\_bit  
#define descida\_encosto RA1\_bit  
#define subida\_cadeira RA2\_bit  
#define descida\_cadeira RA3\_bit  
#define lamp RA4\_bit  
#define lamp\_on RB0\_bit  
#define subida\_encosto\_on RB1\_bit  
#define descida\_encosto\_on RB2\_bit  
#define subida\_cadeira\_on RB3\_bit  
#define descida\_cadeira\_on RB4\_bit  
#define lamp\_control RB7\_bit

bit flag\_lamp;  
int counter;  
unsigned short time\_L = 0x00; //Variável P/ o byte menos significativo do tempo de disparo  
unsigned short time\_H = 0x00; //Variável P/ o byte mais significativo do tempo de disparo  
unsigned time = 0x00; //Variável P/ tempo de disparo (16 bits)

void interrupt()  
{  
if (INTF\_bit) //Houve a Interrupção?  
{  
INTF\_bit = 0x00; //Limpa a flag INTF\_bit  
TMR1ON\_bit = 0x01; //Liga Timer1  
}

}

void volta\_zero();

void main()  
{

```
CMCON = 7;
OPTION_REG = 0X40;
INTCON = 0XD0;
TMR1IE_bit = 0X01;
T1CON = 0X00;
TRISA = 0xff;
TRISB = 0;
PORTA = 0xff;
PORTB = 0xfe;

while(1)
{
    if(Button(&PORTA, 0, 50, 0))
    subida_encosto_on = 0;
    counter++;
    if(counter == 2000000000000)
    RB7_bit = 0;
    else
    subida_encosto_on = 1;
    counter = 0;
    if(Button(&PORTA, 1, 50, 0))
    descida_encosto_on = 0;
    else
    descida_encosto_on = 1;

    if(Button(&PORTA, 2, 50, 0))
    subida_cadeira_on = 0;
    else
    subida_cadeira_on = 1;

    if(Button(&PORTA, 3, 50, 0))
    descida_cadeira_on = 0;
    else
    descida_cadeira_on = 1;

    if(Button(&PORTA, 4, 50, 0) && (flag_lamp == 0))
    {lamp_on = ~lamp_on;
     flag_lamp = 1;
    }
    if(!Button(&PORTA, 4, 50, 0) && (flag_lamp == 1))
    flag_lamp = 0;

    if(Button(&PORTA, 7, 50, 0))
    volta_zero();

}

```

}

void volta\_zero()  
{

```
lamp_on = 0;
subida_encosto_on = 0;
descida_cadeira_on = 0;
delay_ms(7000);

```

}
