Would really appreciate some help on getting the 3rd PWM to work on my PIC16F777.
I'm using the three PWM's to control R G B led strips. My PortB.5 will not light!
The code I'm using - primarily from this forum is below. I know that the circuit is fine, as all three colours work when I manually switch the pins high and low.
I've stripped the code down - for simplicity - to just flash through the three colours... but alas only ever get two!
Code:
'-- Setup ---------------------------------------------------------------------
@ DEVICE PIC16F777, INTRC_OSC_NOCLKOUT
DEFINE OSC 8
OSCCON = %01110010 'see data sheet for INTRC speed setting
' Word vars for 10-bit value of each PWM duty cycle
DutyR VAR WORD ' Channel #1
DutyG VAR WORD ' #2
DutyB VAR WORD ' #3
' Set CCPx pins to outputs
TRISC.2=0 ' CCP1 output
TRISC.1=0 ' CCP2 output (could also be assigned to RB3)
TRISB.5=0 ' CCP3 output
' Set CCP modules to PWM mode
CCP1CON = %00001100 ' Mode select = PWM
CCP2CON = %00001100 ' Mode select = PWM
CCP3CON = %00001100 ' Mode select = PWM
' Set period up for 1.22kHz PWM freq
PR2 = $FF
' Set TMR2 up for 1:16 prescale & turn it on
T2CON = %00000110 ' TMR2 ON 1:16 prescale
'-- Program ---------------------------------------------------------------------
MainRoutine:
dutyR = 719
dutyg = 0
dutyb = 0
gosub colourset
PAUSE 1000
dutyR = 0
dutyg = 719
dutyb = 0
gosub colourset
PAUSE 1000
dutyR = 0
dutyg = 0
dutyb = 719
gosub colourset
PAUSE 1000
goto MainRoutine
'-------------------------------------------------------------------------------
colourset:
CCP1CON.4 = Dutyr.0 ' Setup 10-bit duty cycle as
CCP1CON.5 = Dutyr.1 ' a 10-bit word
CCPR1L = Dutyr >> 2
CCP2CON.4 = Dutyg.0
CCP2CON.5 = Dutyg.1
CCPR2L = Dutyg >> 2
CCP3CON.4 = Dutyb.0
CCP3CON.5 = Dutyb.1
CCPR3L = Dutyb >> 2
return
Many thanks in advance,
orjon.
Bookmarks