From: R. Steve McKown Date: Sat, 3 Dec 2011 02:55:50 +0000 (-0700) Subject: 4 channel PWM with sample color changing X-Git-Tag: 1.0~67 X-Git-Url: https://oss.titaniummirror.com/gitweb?p=rgblamp.git;a=commitdiff_plain;h=e9763e77e5192ca658d54f346d1a046ec227be2c 4 channel PWM with sample color changing --- diff --git a/main.c b/main.c index 5abba01..7fa14f2 100644 --- a/main.c +++ b/main.c @@ -6,10 +6,15 @@ #include -#include +//#include #define RUNAT32MHZ /* else 16 MHz */ -#define LEDBIT 0x01 /* PORTB.0 */ +#define LEDBIT 0x01 /* Port RB0 */ +#define RED_CHAN 1 +#define GRN_CHAN 2 +#define BLU_CHAN 4 +#define WHT_CHAN 8 +#define ALL_CHAN 15 #if defined(RUNAT32MHZ) __CONFIG(WDTE_OFF & FOSC_INTOSC); @@ -33,34 +38,50 @@ void pic_init() void pwm_init() { - /* Initialize PWM on PORTB.3 + /* Initialize PWM + * CCP1 on RB3, CCP2 on RA7, CCP3 on RA3, CCP4 on RA4 * - Fosc = 32MHz * - Prescale = 16 * - PRx value = 0xff * = f(pwm) = 1.95 kHz */ - /* Disable output on PORTB.3 */ - TRISB |= 0x08; + /* Disable output on PWM Rxn pins */ + TRISA |= 0b10011000; + TRISB |= 0b00001000; /* Configure ECCP1 */ CCP1CON = 0b00001100; CCPR1L = 0; /* Initial PWM value; only using 8 LSBs */ + /* Configure ECCP2 */ + APFCON0 |= 0b00001000; /* Use alternate output pin RA7 */ + CCP2CON = 0b00001100; + CCPR2L = 0; /* Initial PWM value; only using 8 LSBs */ + + /* Configure CCP3 */ + CCP3CON = 0b00001100; + CCPR3L = 0; /* Initial PWM value; only using 8 LSBs */ + + /* Configure CCP4 */ + CCP4CON = 0b00001100; + CCPR4L = 0; /* Initial PWM value; only using 8 LSBs */ + /* Configure Timer2 */ - CCPTMRS = CCPTMRS & ~0x03; /* bits 1:0 denote CCP1 uses Timer 2 */ + CCPTMRS = 0; /* All CCPx use Timer 2 */ TMR2IF = 0; PR2 = 0xff; T2CON = 0b00000111; - /* Enable PWM output, PORTB.3 */ - while (!TMR2IF); /* wait until timer overflow */ - TRISB &= ~0x08; + /* Enable PWM outputs after Timer 2 overflows */ + while (!TMR2IF); + TRISA &= ~0b10011000; + TRISB &= ~0b00001000; } void led_init() { - PORTB &= ~LEDBIT; /* Led is PORTB.0 */ + PORTB &= ~LEDBIT; /* Led is RB0 */ TRISB &= ~LEDBIT; } @@ -72,9 +93,16 @@ void led_set(unsigned char led) PORTB &= ~LEDBIT; } -void pwm_set(unsigned char step) +void pwm_set(unsigned char channels, unsigned char step) { - CCPR1L = step; + if (channels & RED_CHAN) + CCPR1L = step; + if (channels & GRN_CHAN) + CCPR2L = step; + if (channels & BLU_CHAN) + CCPR3L = step; + if (channels & WHT_CHAN) + CCPR4L = step; } void delay() @@ -82,6 +110,32 @@ void delay() for (unsigned counter = 0; counter < 10000; counter++); } +void ramp_up(unsigned char channels) +{ + unsigned char step = 0; + + do { + pwm_set(channels, step++); + delay(); + } while (step != 0); +} + +void ramp_down(unsigned char channels) +{ + unsigned char step = 255; + + do { + pwm_set(channels, step--); + delay(); + } while (step != 255); +} + +void ramp_up_down(unsigned char channels) +{ + ramp_up(channels); + ramp_down(channels); +} + int main(void) { unsigned char fwd = 1; @@ -91,23 +145,15 @@ int main(void) led_init(); pwm_init(); while (1) { - pwm_set(step); - if (fwd == 0) { - step--; - if (step == 0xff) { /* rollover */ - led_set(0); - fwd = 1; - step = 0; - } - } else /* fwd == 1 */ { - step++; - if (step == 0) { /* rollover */ - led_set(1); - fwd = 0; - step = 0xff; - } - } - delay(); + ramp_up(RED_CHAN); + ramp_up(GRN_CHAN); + ramp_down(RED_CHAN); + ramp_up(BLU_CHAN); + ramp_down(GRN_CHAN); + ramp_up(RED_CHAN); + ramp_up(GRN_CHAN + BLU_CHAN); + ramp_down(ALL_CHAN); + ramp_up_down(WHT_CHAN); } return 0; } diff --git a/nbproject/Makefile-default.mk b/nbproject/Makefile-default.mk index 777bc50..c82e3ab 100644 --- a/nbproject/Makefile-default.mk +++ b/nbproject/Makefile-default.mk @@ -72,7 +72,7 @@ MP_AR_DIR="/usr/hitech/picc/9.82/bin" .build-conf: ${BUILD_SUBPROJECTS} ${MAKE} -f nbproject/Makefile-default.mk dist/${CND_CONF}/${IMAGE_TYPE}/picdimmy.${IMAGE_TYPE}.cof -MP_PROCESSOR_OPTION=16F1827 +MP_PROCESSOR_OPTION=16LF1827 # ------------------------------------------------------------------------------------ # Rules for buildStep: assemble ifeq ($(TYPE_IMAGE), DEBUG_RUN) diff --git a/nbproject/Makefile-genesis.properties b/nbproject/Makefile-genesis.properties index cdfa31e..398baa5 100644 --- a/nbproject/Makefile-genesis.properties +++ b/nbproject/Makefile-genesis.properties @@ -1,5 +1,5 @@ # -#Wed Nov 30 15:32:39 MST 2011 +#Fri Dec 02 19:43:02 MST 2011 default.languagetoolchain.dir=/usr/hitech/picc/9.82/bin com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=11bb82e71763925c87fa30f6c65473b1 default.languagetoolchain.version=9.82 diff --git a/nbproject/configurations.xml b/nbproject/configurations.xml index fd8d0ba..97462d3 100644 --- a/nbproject/configurations.xml +++ b/nbproject/configurations.xml @@ -29,7 +29,7 @@ localhost - PIC16F1827 + PIC16LF1827 PICkit3PlatformTool hi-tech-picc @@ -74,8 +74,8 @@ - +