Hi every one
(1) Previous I thought that the problem of flat spot on my SPWM signal was due to the simulator(ISIS) but I was wrong because I implement it on the actual hardware using PIC16F877V1-V2 DEVELOPMENT BOARD board and DLIS40L oscilloscope but the problem still remain now I'm totally confused what cause that problem of flat spot to my wave form. I try to scale my look up table so that my dutycycle lie on the range of (0 to 4*199) but nothing was change to my signal
when viewed.
(2)ARE the ten bit look table is not working on 8bit chip like 16F877 0R 16F777 ? I think those values greater than 255 is one cause that problems
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
TMR1L = timerone.byte0
TMR1H = timerone.byte1
T1CON = 000001
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
(3) I'm not clear on the WINPIC800V358 software parameter on the attachment.
Any one can help me to solve these problems
Thankx
Bookmarks