Hi to all
I tried to modify the code according to Darrel Taylor and HenrikOlsson comments but the problem still exits, let me put in real hardware and see what happen.
And here is modified code but the output is still like that posted in the previous post.
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 word[36]
sineval[0] = 512
sineval[1] = 556
sineval[2] = 599
sineval[3] = 640
sineval[4] = 676
sineval[5] = 707
sineval[6] = 733
sineval[7] = 752
sineval[8] = 763
sineval[9] = 767
sineval[10] =763
sineval[11] =752
sineval[12] =733
sineval[13] =707
sineval[14] =676
sineval[15] =640
sineval[16] =599
sineval[17] =556
sineval[18] =512
sineval[19] =468
sineval[20] =425
sineval[21] =385
sineval[22] =348
sineval[23] =317
sineval[24] =291
sineval[25] =272
sineval[26] =261
sineval[27] =257
sineval[28] =261
sineval[29] =272
sineval[30] = 291
sineval[31] = 317
sineval[32] = 348
sineval[33] = 385
sineval[34] = 425
sineval[35] = 468
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, PBP, 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 5
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
Thanks.
Bookmarks