Demon,
The word "define" is a PBP statement, and PBP is not case sensitive. So it doesn't matter what case DeFiNe is.
What follows "define" is passed on to the assembler, and MPASM IS case sensitive.
Any defines that PBP is expecting to see, must be UPPERCASE because that's what PBP is looking for.
Defines used in your own assembly language routines can be any case, as long as your code is looking for the same case.
neondales's defines have the correct case , even though they are unnecessary and use the wrong timers.
neondale,
You don't need any of what you posted, except for the ANSEL's.
And since you are just fading LED's, the CCP's can all run off of the same Timer, which is TIMER2 by default.
Here's a program that starts up CCP1-4 at 3Khz - 50% dutycycle.
Note that the default location for CCP3 is PORTB.5.
You can move it to PORTE.0 by changing the CCP3MX_ configuration bit.
If you move it ... change the CCP3 defines to match.
Code:
;----[Device Configuration]--(See manual section 4.9)---------------------------
#CONFIG
__config _CONFIG1H, _FOSC_INTIO67_1H & _PLLCFG_ON_1H & _PRICLKEN_ON_1H & _FCMEN_ON_1H & _IESO_ON_1H
__config _CONFIG2L, _PWRTEN_OFF_2L & _BOREN_SBORDIS_2L & _BORV_190_2L
__config _CONFIG2H, _WDTEN_ON_2H & _WDTPS_32768_2H
__config _CONFIG3H, _CCP2MX_PORTC1_3H & _PBADEN_OFF_3H & _CCP3MX_PORTB5_3H & _HFOFST_ON_3H & _T3CMX_PORTC0_3H & _P2BMX_PORTD2_3H & _MCLRE_EXTMCLR_3H
__config _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _XINST_OFF_4L & _DEBUG_OFF_4L
#ENDCONFIG
;----[DEFINEs]------------------------------------------------------------------
DEFINE OSC 4 ; Oscillator is 4Mhz
DEFINE CCP1_REG PORTC ; Tell PBP which pins the CCP outputs are on
DEFINE CCP1_BIT 2
DEFINE CCP2_REG PORTC
DEFINE CCP2_BIT 1
DEFINE CCP3_REG PORTB
DEFINE CCP3_BIT 5
DEFINE CCP4_REG PORTD
DEFINE CCP4_BIT 1
;----[Aliases]------------------------------------------------------------------
LED PIN 0 ; LED on PORTB.0
;----[Variables]----------------------------------------------------------------
Duty VAR BYTE ; Duty Cycle
Chan VAR BYTE ; HPWM Channel
FadeDir VAR BYTE ; Fade Direction (1=up, -1=down)
;----[Constants]----------------------------------------------------------------
Freq CON 3000 ; HPWM Frequency
MaxBright CON 180 ; Maximum Fade Brightness
;----[Initialize]---------------------------------------------------------------
OSCCON = %01010000 ; 4Mhz Internal OSC
ANSELA = 0 ; All Digital
ANSELB = 0
ANSELC = 0
ANSELD = 0
ANSELE = 0
FadeDir = 1 ; Start fading up
Duty = 127 ; 50% dutycycle
;GOTO Fade1 ; Run Fading Routine
HPWM 1, Duty, Freq ; start the Hardware PWM channels
HPWM 2, Duty, Freq
HPWM 3, Duty, Freq
HPWM 4, Duty, Freq
;----[Main Program Loop]--------------------------------------------------------
Main:
TOGGLE LED
PAUSE 500
GOTO Main
;----[Fade all channels up and down]---------------------------------------------
Fade1:
FOR Chan = 1 TO 4
HPWM Chan, Duty, Freq
NEXT Chan
IF Duty = MaxBright THEN FadeDir = -1
IF Duty = 0 THEN FadeDir = 1
Duty = Duty + FadeDir
PAUSE 10
GOTO Fade1
Uncomment the GOTO Fade1 to run the Fade routine.
Bookmarks