Buenas a todos hace días empecé a realizar este proyecto de control de potencia que entrego a una lámpara incandescente con un TRIA y un MOC3021 y la verdad no sé qué pasa por que no he tenido buenos resultados bueno lo primero que les comento es que estoy utilizando el PIC16F877A del cual utilizo la interrupción externa para detectar los cruce por cero y el timer1 como contador síncrono con un desbordamiento a 13.1ms y la técnica es:
detecto cuando la señal pasa por cero primero de un flanco de alto a bajo y coloco en estado bajo la salida del PIC que dispara el MOC3021 en ese momento cargo el timer1 con un valor apropiado para que se desborde antes de los 13.1ms y como en el país donde vivo la red comercial tiene 60Hz el desbordamiento debe ser antes de los 8.33ms y además cambio el flanco de disparo para que ahora sea de bajo a alto, cuando ocurre la interrupción por desbordamiento del timer1 conmuto la salida, para luego trabar en el semi ciclo negativo repitiendo de nuevo la técnica lo curioso en que funciona a la perfección en la simulación en Proteus pero cuando voy a la realidad nanai nanai la lámpara incandescente o prende a full potencia o solo queda un nivel medio de iluminación y no consigo estados intermedios de iluminación no sé si el problema es el cruce por cero, un problema de excitación del MOC3021 o un problema de tierras en realidad no se necesitó ayuda adjunto el programa y la simulación, de ante manos muchas gracias. Ha casi se me olvida para detectar el cruce por cero e introducir la señal a la interrupción externa del PIC utilizo un transformador reductor de 110v a 9v par de diodos como circuito recortador sujetador de tensión y un amplificador operacional el LM324
codigo
////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <16F877A.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock=20000000)
int16 cont_flag=0,timer=30000;
#int_EXT
void EXT_isr(void)
{
cont_flag++;
if(cont_flag==1){
output_bit(PIN_B7,0);
EXT_INT_EDGE(H_TO_L);
set_timer1(timer);
}
if(cont_flag==2){
output_bit(PIN_B7,0);
EXT_INT_EDGE(L_TO_H);
cont_flag=0;
set_timer1(timer);
}
}
#int_TIMER1
void TIMER1_isr(void)
{
output_bit(PIN_B7,1);
}
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_CLOCK_DIV_2);
setup_spi(SPI_SS_DISABLED);
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);
enable_interrupts(INT_EXT);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
EXT_INT_EDGE(L_TO_H);
for( ;; ){
if(input(PIN_C6)==0){
delay_us(1);
timer++;
}
if(input(PIN_C7)==0){
delay_us(1);
timer--;
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////