hi,
i've managed to get the sinusoidal output sine wave although i'm getting frequency of 202Hz instead of 50Hz and peak voltage of 4.58v instead of 4.5v.Also the waveform is not smooth.Simulation results.docWhat should i do to acheave this parameters?
code:
Code:
define OSC 4
;*****************VARIABLE DECLARATION******************************************
wsave   VAR BYTE    $70     SYSTEM      ' alternate save location for W 
wsave1  VAR BYTE    $A0     SYSTEM      ' location for W if in bank1
wsave2  VAR BYTE    $120    SYSTEM      ' location for W if in bank2
wsave3  VAR BYTE    $1A0    SYSTEM      ' location for W if in bank3 
ADCON0 = %00000000
ADCON1 = %00000000
trisb = %11111111
trisc = %11111011
trisa = %11111111
TMR2 = 16
PR2 = 15      ;set for 16Khz HPWM        
CCP1CON.3 = 1        ' set to pwm mode
CCP1CON.2 = 1
T2CON.2=1
T2CON.0=1
STEPCOUNT var byte
stepcount = 32
; Set sine "table" in an array
sineval var byte[32]
sineval[1] = 128
sineval[2] = 148
sineval[3] = 167
sineval[4] = 185
sineval[5] = 200
sineval[6] = 213
sineval[7] = 222
sineval[8] = 228
sineval[9] = 230
sineval[10] = 228
sineval[11] = 222
sineval[12] = 213
sineval[13] = 200
sineval[14] = 185
sineval[15] = 167
sineval[16] = 148
sineval[17] = 128
sineval[18] = 108
sineval[19] = 89
sineval[20] = 71
sineval[21] = 56
sineval[22] = 43
sineval[23] = 34
sineval[24] = 28
sineval[25] = 26
sineval[26] = 28
sineval[27] = 34
sineval[28] = 43
sineval[29] = 56
sineval[30] = 71
sineval[31] = 89
sineval[32] = 108
 
 
timerone var word 
 
INCLUDE "DT_INTS-14.bas"     ; Base Interrupt System
;include "ReEnterPBP-18.bas"  ;not needed for ASM type interrupt service routines
 
ASM
 
INT_LIST  macro    ; IntSource,        Label,  Type, ResetFlag?
        INT_Handler   TMR1_INT,   _sine,   ASM,  yes
    endm
    INT_CREATE               ; Creates the interrupt processor
ENDASM
 
T1CON = $31                 ; Prescaler = 8, TMR1ON
TMR1L = 255
TMR1H = 254
@   INT_ENABLE  TMR1_INT     ; Enable Timer 1 Interrupts  
timerone = 65504               ;gives about 50 htz sine 
Main:
        pause 5
        'timerone = timerone - 1      'uncomment to vary 60hz sine
        if timerone = $F9FF then timerone = $FF00
 
GOTO Main
 
'---[TMR1_INT - interrupt handler]------------------------------------------
 
sine:
    TMR1L = timerone.byte0
    TMR1H = timerone.byte1     
    CCPR1L = sineval[STEPCOUNT]>>1 
    stepcount = stepcount -1
    if stepcount = 0 then stepcount = 32
 
@    INT_RETURN