No change even if the pause 1, what I want to ask is the values in the look table greater than 255 may affect the sinwave and cause the signal to be distorted?. Can any one simulates the code and see the effect. Why the output look like this because I have try to eliminate the problem of flat spot for almost 4days but the problem still exit even although I try to edit my look table as HenrikOlsson told me about the value 512 ).
Code:
define OSC 4
Wsave var byte $70system
Wsave1 var byte $A0system
Wsave2 var byte $120system
Wsave3 var byte $1A0system
STEPCOUNT var byte
STEPCOUNT1 var byte
LED1 VAR PORTB.1
STEPCOUNT = 0 'pointer for phase one in sinearray
STEPCOUNT1 = 12 'pointer for phase two in sine array
ADCON0 = %00000000
ADCON1 = %00000000
TRISB = %11111101
TRISC = %11111001 'PMW output for CCP1 AND CCP2
TRISA = %11111111
TMR2 = 0
PR2 = 199 'generate 5khz 'set for 18Khz HPWM
CCP1CON = %00001100 'set CCP1 for PWM OPERATION
CCP2CON = %00001100 'set CCP2 for PWM OPERATION
T2CON = %00000100 'TIMER2ON and prescale of 1:1
sineval var byte[36]
sineval[0] = 512
sineval[1] = 583
sineval[2] = 652
sineval[3] = 717
sineval[4] = 775
sineval[5] = 825
sineval[6] = 866
sineval[7] = 896
sineval[8] = 915
sineval[9] = 921
sineval[10] =915
sineval[11] =896
sineval[12] =866
sineval[13] =825
sineval[14] =775
sineval[15] =716
sineval[16] =652
sineval[17] =583
sineval[18] =512
sineval[19] = 441
sineval[20] = 372
sineval[21] = 308
sineval[22] = 249
sineval[23] = 199
sineval[24] = 158
sineval[25] = 128
sineval[26] = 109
sineval[27] = 103
sineval[28] = 109
sineval[29] = 128
sineval[30] = 158
sineval[31] = 199
sineval[32] = 249
sineval[33] = 308
sineval[34] = 372
sineval[35] = 441
timerone var word
Temp var byte
Temp1 var byte
INCLUDE "DT_INTS-14.bas" ; Base Interrupt System emp
'INCLUDE "ReEnterPBP.bas"
ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag?
INT_Handler TMR1_INT, _sine, ASM, yes
endm
INT_CREATE ; Creates the interrupt processor
ENDASM
T1CON = 000001 ; Prescaler = 1;1, TMR1 ON
@ INT_ENABLE TMR1_INT ; Enable Timer 1 Interrupts
timerone = 65080' gives1818hz nterruptfrequency or about 50 htz sine
Main:
PAUSE 1
GOTO Main
'---[TMR1_INT - interrupt handler]------------------------------------------
sine:
T1CON = 000000 'stop the timer
TMR1L = timerone.byte0 'reload the timer
TMR1H = timerone.byte1
T1CON = 000001 ' start the timer
TeMP = sineval[STEPCOUNT]
CCP1CON.4 = Temp.0 ' bit 0
CCP1CON.5 = Temp.1 ' bit 1
CCPR1L = Temp >>2 'Bit 2-7
TeMP1 = sineval[STEPCOUNT1]
CCP2CON.4 = Temp1.0 ' bit 0
CCP2CON.5 = Temp1.1 ' bit 1
CCPR2L = Temp1 >>2 'Bit 2-7
TOGGLE LED1
stepcount = stepcount +1
stepcount1 = stepcount1 +1
if stepcount =36 then stepcount =0
if stepcount1 =36 then stepcount1 =0
@ INT_RETURN
Bookmarks