Consegui resolver o programa de ligar o pic ao triac, conforme pedi ajuda em um tópico anterior. Agora estou desenvolvendo um programa em CCS para controlar a intensidade da lâmpada. Tenho duas chaves que server para aumentar/reduzir o angulo de disparo. Uso 02 4N25 para detectar a passagem por zero e desta forma controlar 100% da onda. Pelos menus cálculos, como cada semiciclo tem 180º, isto equivale a 46us. Fiz o programa abaixo, porém não consigo variar a intensidade, embora todo circuto eletrônico esteja funcionando bem. Estou calculando o tempo de atraso e utilizando dentro da rotina de interrupção no B0 que detecta a passagem por zero. Alguém pode me ajudar?
O programa
//////////////////////////////////////////////
#include <16f628.h>
#use delay(clock=4000000)
#fuses xt, nowdt,put, nolvp, nomclr
int16 atraso = 50;
int angulo = 1;
///////////////////////////////////////////////////////////////////////////////
//------- trata interrupção no RB0 - Ponto Zero da Senóide
///////////////////////////////////////////////////////////////////////////////
#INT_EXT
Ext_Int_Handler() {
output_low(pin_a0);
//--- passou por zero? Aguarda tempo
delay_us(atraso);
output_high(pin_a0);
}
///////////////////////////////////////////////////////////////////////////////
//------- Reduz Ângulo de Disparo
///////////////////////////////////////////////////////////////////////////////
void Decrementa() {
angulo-=10;
if (angulo > -1) {
atraso = angulo * 46;
} else {
angulo = 0;
}
delay_ms(10);
}
///////////////////////////////////////////////////////////////////////////////
//------- Incrementa Ângulo de Disparo
///////////////////////////////////////////////////////////////////////////////
void Incrementa() {
angulo+=10;
if (angulo < 180) {
atraso = angulo * 46;
} else {
angulo = 180;
}
delay_ms(10);
}
///////////////////////////////////////////////////////////////////////////////
//------- Rotina Principal do sistema
///////////////////////////////////////////////////////////////////////////////
main() {
delay_ms(100);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
while(1) {
if (!input(pin_a3)) Incrementa();
if (!input(pin_a2)) Decrementa();
}
}
//////////////////////
Obrigado.