Quote Originally Posted by aratti View Post
You need to post the schematic and the code, if you want some real help.

Cheers

Al.
Hi aratti,

This is the test code that i have used always for many projects. The microcontroller is PIC16F876A. PORTB.0 is Zero Cross Detect Input. PORTB.7 is fire triac output.

Code:
INCLUDE "DT_INTS-14.bas"     ' Base Interrupt System

    
    TRIAC       VAR PORTB.7
    
    TIMEX       VAR WORD
    TIMEX_L     VAR TIMEX.LOWBYTE
    TIMEX_H     VAR TIMEX.HIGHBYTE

    OUTPUT  TRIAC
    INPUT   PORTB.0
    
    TRISC   = 255
    TRISA   = %111111
    
    
    ADCON1  = 7
    
    T1CON = 0
    CCP1CON = %00001010
    TMR1L   = 0
    TMR1H   = 0
    OPTION_REG  = %11000000
    
    
    FLAG  = 0
    TIMEX = 9000
    
    CCPR1L      = TIMEX.LOWBYTE
    CCPR1H      = TIMEX.HIGHBYTE
    
    
    LOW TRIAC
    
    
    PAUSE 100
    
    ASM
INT_LIST  macro    ; IntSource,        Label,  Type, ResetFlag?
    INT_Handler   INT_INT  ,  INT_GEL_1,   ASM,  yes
    INT_Handler   CCP1_INT   ,  INT_GEL_2,   ASM,  yes
        ;INT_Handler   TMR0_INT  ,  TMR0INT,   ASM,  yes
    endm
    INT_CREATE               
    ENDASM

@ INT_ENABLE  INT_INT
@ INT_ENABLE  CCP1_INT

   MAIN :
    
    
    
    TIMEX = TIMEX + 1
    
    
    IF TIMEX >= 9600 THEN
        FLAG = 0
        low TRIAC
    ELSE
        FLAG = 1
    ENDIF
    
    PAUSE 1


    
    GOTO MAIN
    
    ASM
INT_GEL_1
    
    BCF _TRIAC
    BSF T1CON,0
    
    INT_RETURN 
    ENDASM
    
    ASM
INT_GEL_2
    
    BTFSC _FLAG , 0
    BSF _TRIAC
    BCF T1CON , 0
    CLRF TMR1H
    CLRF TMR1L
    
    
    
    MOVF    _TIMEX_H , W
    MOVWF   CCPR1H
    
    MOVF    _TIMEX_L , W
    MOVWF   CCPR1L
    
     
    
    INT_RETURN 
    ENDASM

END