From: R. Steve McKown Date: Sun, 4 Dec 2011 22:57:55 +0000 (-0700) Subject: Closer to a full featured setup X-Git-Tag: 1.0~66 X-Git-Url: https://oss.titaniummirror.com/gitweb?p=rgblamp.git;a=commitdiff_plain;h=5c74e1a22c444b8769e0ce82975414f1c72b7b0e Closer to a full featured setup Rocker switch is power switch. * Off: lamp is off, PWM off, CPU in sleep * On (right): Random time to fade between colors, with a random time staying in each color. * Off (left): No fade between colors, with a random time in each color. The push button speeds up fade and incolor times by a factor of 8. --- diff --git a/buttons.c b/buttons.c new file mode 100644 index 0000000..e97f8bf --- /dev/null +++ b/buttons.c @@ -0,0 +1,20 @@ +/* + * File: buttons.c + * + * Button control + */ + + +#include +#include "buttons.h" + +void buttons_sleep() +{ + if ((buttons_read() & (IN_ROCKERA | IN_ROCKERB)) == 0) { + IOCBF4 = 0; + IOCBF5 = 0; + IOCIE = 1; + SLEEP(); + IOCIE = 0; + } +} diff --git a/buttons.h b/buttons.h new file mode 100644 index 0000000..3138ecc --- /dev/null +++ b/buttons.h @@ -0,0 +1,40 @@ +/* + * File: buttons.h + * + * Button control + */ + + +#ifndef _BUTTONS_H +#define _BUTTONS_H + +#include + +#define IN_MASK 0b00110001 +#define IN_ROCKERA 0b00100000 +#define IN_ROCKERB 0b00010000 +#define IN_PUSHBTN 0b00000001 + +/* Initialize the buttons. RB0 is the push button. RB4 and RB5 are the + * rocker switch positions. + */ +#define buttons_init() do { \ + IOCBN4 = 1; \ + IOCBN5 = 1; \ + TRISB |= IN_MASK; \ + ANSELB &= ~IN_MASK; \ +} while (0) + +/* Read all the buttons at once, returning a mask of IN_xxx bits */ +#define buttons_read() ((PORTB ^ IN_MASK) & IN_MASK) + +/* Return the rocker button position as a mask of IN_xxx bits */ +#define buttons_on() ((PORTB ^ IN_MASK) & (IN_ROCKERA | IN_ROCKERB)) + +/* Return the pushbutton state */ +#define buttons_push() ((PORTB ^ IN_MASK) & IN_PUSHBTN) + +/* Sleep until the rocker is in one of the non-off positions */ +void buttons_sleep(); + +#endif diff --git a/main.c b/main.c index 7fa14f2..abf1098 100644 --- a/main.c +++ b/main.c @@ -4,156 +4,98 @@ * Created on August 16, 2010, 12:09 PM */ - -#include -//#include - #define RUNAT32MHZ /* else 16 MHz */ -#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); -__CONFIG(LVP_OFF & PLLEN_ON); -#else -__CONFIG(WDTE_OFF); -__CONFIG(LVP_OFF); -#endif - -void pic_init() -{ -#if defined(RUNAT32MHZ) - OSCCON = 0b11110000; -#else /* 16 MHz */ - OSCCON = 0b01111010; -#endif - - /* OSCSTAT.HFIOFL is set when oscillator is locked (accurate within 2%) */ - while (!HFIOFL); -} - -void pwm_init() -{ - /* 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 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 = 0; /* All CCPx use Timer 2 */ - TMR2IF = 0; - PR2 = 0xff; - T2CON = 0b00000111; - - /* Enable PWM outputs after Timer 2 overflows */ - while (!TMR2IF); - TRISA &= ~0b10011000; - TRISB &= ~0b00001000; -} - -void led_init() -{ - PORTB &= ~LEDBIT; /* Led is RB0 */ - TRISB &= ~LEDBIT; -} -void led_set(unsigned char led) -{ - if (led) - PORTB |= LEDBIT; - else - PORTB &= ~LEDBIT; -} - -void pwm_set(unsigned char channels, unsigned char 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() -{ - 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); -} +#include +#include +#include "picinit.h" +#include "buttons.h" +#include "rgb.h" -void ramp_up_down(unsigned char channels) -{ - ramp_up(channels); - ramp_down(channels); -} +#define random_rgb() (rand() >> 7) /* 0...255 */ +#define random_time() (rand() >> 5) /* 0...1024 */ +#define min_incolor_time() 512 +#define min_fade_time() 512 int main(void) { - unsigned char fwd = 1; - unsigned char step = 0; + unsigned char red = 0, grn = 0, blu = 0; //, wht = 0; + char fadestep_red, fadestep_grn, fadestep_blu; //, fadestep_wht; + unsigned char incolor_time = 0; + unsigned char fade_time = 0; + unsigned char fast = 0; pic_init(); - led_init(); - pwm_init(); + buttons_init(); + rgb_init(); + + if (buttons_on()) { + rgb_on(); + red = random_rgb(); + grn = random_rgb(); + blu = random_rgb(); + //wht = random_rgb(); + rgb_set(red, grn, blu, 0); //wht); + } + while (1) { - 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); + unsigned char buttons = buttons_read(); + + if ((buttons & (IN_ROCKERA | IN_ROCKERB))) { + if (buttons & IN_PUSHBTN) { + if (!fast) { + incolor_time = 0; + fade_time = 0; + fast = 1; + } else + fast = 0; + } + + if (fade_time) { + red += fadestep_red; + grn += fadestep_grn; + blu += fadestep_blu; + //wht += fadestep_wht; + rgb_set(red, grn, blu, 0); // wht); + fade_time--; + } else if (incolor_time) + incolor_time--; + else /* fade_time == 0 && incolor_time == 0 */ { + unsigned char newr, newg, newb, neww; + + /* Determine next color state */ + newr = random_rgb(); + newg = random_rgb(); + newb = random_rgb(); + //neww = random_rgb(); + + /* Calculate new incolor_time and fade_time */ + if (buttons & IN_ROCKERA) { + incolor_time = 1 + random_time(); + fade_time = 1; + } else /* (buttons & IN_ROCKERB) */ { + incolor_time = min_incolor_time() + random_time() / 2; + fade_time = min_fade_time() + random_time() / 2; + } + + if (fast) { + incolor_time = 1 + incolor_time / 8; + fade_time = 1 + fade_time / 8; + } + + fadestep_red = ((int)newr - red) / fade_time; + fadestep_grn = ((int)newg - red) / fade_time; + fadestep_blu = ((int)newb - red) / fade_time; + //fadestep_wht = ((int)neww - red) / fade_time; + } + __delay_ms(10); + } else { + rgb_off(); + buttons_sleep(); + incolor_time = 0; + fade_time = 0; + rgb_on(); + } } return 0; } diff --git a/nbproject/Makefile-default.mk b/nbproject/Makefile-default.mk index c82e3ab..81155a3 100644 --- a/nbproject/Makefile-default.mk +++ b/nbproject/Makefile-default.mk @@ -35,10 +35,10 @@ OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} # Object Files Quoted if spaced -OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/main.p1 +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/_ext/2115883622/buttons.p1 ${OBJECTDIR}/_ext/2115883622/picinit.p1 ${OBJECTDIR}/_ext/2115883622/rgb.p1 ${OBJECTDIR}/main.p1 # Object Files -OBJECTFILES=${OBJECTDIR}/main.p1 +OBJECTFILES=${OBJECTDIR}/_ext/2115883622/buttons.p1 ${OBJECTDIR}/_ext/2115883622/picinit.p1 ${OBJECTDIR}/_ext/2115883622/rgb.p1 ${OBJECTDIR}/main.p1 CFLAGS= @@ -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=16LF1827 +MP_PROCESSOR_OPTION=16F1827 # ------------------------------------------------------------------------------------ # Rules for buildStep: assemble ifeq ($(TYPE_IMAGE), DEBUG_RUN) @@ -82,19 +82,67 @@ endif # ------------------------------------------------------------------------------------ # Rules for buildStep: compile ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${OBJECTDIR}/_ext/2115883622/picinit.p1: ../picbuttons/picinit.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${OBJECTDIR}/_ext/2115883622 + ${MP_CC} --pass1 ../picbuttons/picinit.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR}/_ext/2115883622 -D__PICCPRO__ -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --summary=default,-psect,-class,+mem,-hex --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 -D__DEBUG --debugger=pickit3 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" + ${MP_CC} --scandep --pass1 ../picbuttons/picinit.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR}/_ext/2115883622 -D__PICCPRO__ -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 -D__DEBUG --debugger=pickit3 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" + @echo ${OBJECTDIR}/_ext/2115883622/picinit.p1: > ${OBJECTDIR}/_ext/2115883622/picinit.p1.d + @cat ${OBJECTDIR}/_ext/2115883622/picinit.dep >> ${OBJECTDIR}/_ext/2115883622/picinit.p1.d + @${FIXDEPS} "${OBJECTDIR}/_ext/2115883622/picinit.p1.d" $(SILENT) -ht + +${OBJECTDIR}/_ext/2115883622/rgb.p1: ../picbuttons/rgb.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${OBJECTDIR}/_ext/2115883622 + ${MP_CC} --pass1 ../picbuttons/rgb.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR}/_ext/2115883622 -D__PICCPRO__ -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --summary=default,-psect,-class,+mem,-hex --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 -D__DEBUG --debugger=pickit3 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" + ${MP_CC} --scandep --pass1 ../picbuttons/rgb.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR}/_ext/2115883622 -D__PICCPRO__ -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 -D__DEBUG --debugger=pickit3 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" + @echo ${OBJECTDIR}/_ext/2115883622/rgb.p1: > ${OBJECTDIR}/_ext/2115883622/rgb.p1.d + @cat ${OBJECTDIR}/_ext/2115883622/rgb.dep >> ${OBJECTDIR}/_ext/2115883622/rgb.p1.d + @${FIXDEPS} "${OBJECTDIR}/_ext/2115883622/rgb.p1.d" $(SILENT) -ht + +${OBJECTDIR}/_ext/2115883622/buttons.p1: ../picbuttons/buttons.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${OBJECTDIR}/_ext/2115883622 + ${MP_CC} --pass1 ../picbuttons/buttons.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR}/_ext/2115883622 -D__PICCPRO__ -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --summary=default,-psect,-class,+mem,-hex --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 -D__DEBUG --debugger=pickit3 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" + ${MP_CC} --scandep --pass1 ../picbuttons/buttons.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR}/_ext/2115883622 -D__PICCPRO__ -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 -D__DEBUG --debugger=pickit3 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" + @echo ${OBJECTDIR}/_ext/2115883622/buttons.p1: > ${OBJECTDIR}/_ext/2115883622/buttons.p1.d + @cat ${OBJECTDIR}/_ext/2115883622/buttons.dep >> ${OBJECTDIR}/_ext/2115883622/buttons.p1.d + @${FIXDEPS} "${OBJECTDIR}/_ext/2115883622/buttons.p1.d" $(SILENT) -ht + ${OBJECTDIR}/main.p1: main.c nbproject/Makefile-${CND_CONF}.mk @${MKDIR} ${OBJECTDIR} - ${MP_CC} --pass1 main.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR} -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --summary=default,-psect,-class,+mem,-hex --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 -D__DEBUG --debugger=pickit3 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" - ${MP_CC} --scandep --pass1 main.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR} -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 -D__DEBUG --debugger=pickit3 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" + ${MP_CC} --pass1 main.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR} -D__PICCPRO__ -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --summary=default,-psect,-class,+mem,-hex --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 -D__DEBUG --debugger=pickit3 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" + ${MP_CC} --scandep --pass1 main.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR} -D__PICCPRO__ -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 -D__DEBUG --debugger=pickit3 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" @echo ${OBJECTDIR}/main.p1: > ${OBJECTDIR}/main.p1.d @cat ${OBJECTDIR}/main.dep >> ${OBJECTDIR}/main.p1.d @${FIXDEPS} "${OBJECTDIR}/main.p1.d" $(SILENT) -ht else +${OBJECTDIR}/_ext/2115883622/picinit.p1: ../picbuttons/picinit.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${OBJECTDIR}/_ext/2115883622 + ${MP_CC} --pass1 ../picbuttons/picinit.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR}/_ext/2115883622 -D__PICCPRO__ -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --summary=default,-psect,-class,+mem,-hex --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" + ${MP_CC} --scandep --pass1 ../picbuttons/picinit.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR}/_ext/2115883622 -D__PICCPRO__ -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" + @echo ${OBJECTDIR}/_ext/2115883622/picinit.p1: > ${OBJECTDIR}/_ext/2115883622/picinit.p1.d + @cat ${OBJECTDIR}/_ext/2115883622/picinit.dep >> ${OBJECTDIR}/_ext/2115883622/picinit.p1.d + @${FIXDEPS} "${OBJECTDIR}/_ext/2115883622/picinit.p1.d" $(SILENT) -ht + +${OBJECTDIR}/_ext/2115883622/rgb.p1: ../picbuttons/rgb.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${OBJECTDIR}/_ext/2115883622 + ${MP_CC} --pass1 ../picbuttons/rgb.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR}/_ext/2115883622 -D__PICCPRO__ -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --summary=default,-psect,-class,+mem,-hex --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" + ${MP_CC} --scandep --pass1 ../picbuttons/rgb.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR}/_ext/2115883622 -D__PICCPRO__ -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" + @echo ${OBJECTDIR}/_ext/2115883622/rgb.p1: > ${OBJECTDIR}/_ext/2115883622/rgb.p1.d + @cat ${OBJECTDIR}/_ext/2115883622/rgb.dep >> ${OBJECTDIR}/_ext/2115883622/rgb.p1.d + @${FIXDEPS} "${OBJECTDIR}/_ext/2115883622/rgb.p1.d" $(SILENT) -ht + +${OBJECTDIR}/_ext/2115883622/buttons.p1: ../picbuttons/buttons.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${OBJECTDIR}/_ext/2115883622 + ${MP_CC} --pass1 ../picbuttons/buttons.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR}/_ext/2115883622 -D__PICCPRO__ -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --summary=default,-psect,-class,+mem,-hex --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" + ${MP_CC} --scandep --pass1 ../picbuttons/buttons.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR}/_ext/2115883622 -D__PICCPRO__ -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" + @echo ${OBJECTDIR}/_ext/2115883622/buttons.p1: > ${OBJECTDIR}/_ext/2115883622/buttons.p1.d + @cat ${OBJECTDIR}/_ext/2115883622/buttons.dep >> ${OBJECTDIR}/_ext/2115883622/buttons.p1.d + @${FIXDEPS} "${OBJECTDIR}/_ext/2115883622/buttons.p1.d" $(SILENT) -ht + ${OBJECTDIR}/main.p1: main.c nbproject/Makefile-${CND_CONF}.mk @${MKDIR} ${OBJECTDIR} - ${MP_CC} --pass1 main.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR} -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --summary=default,-psect,-class,+mem,-hex --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" - ${MP_CC} --scandep --pass1 main.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR} -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" + ${MP_CC} --pass1 main.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR} -D__PICCPRO__ -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --summary=default,-psect,-class,+mem,-hex --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" + ${MP_CC} --scandep --pass1 main.c $(MP_EXTRA_CC_PRE) -q --chip=$(MP_PROCESSOR_OPTION) -P --outdir=${OBJECTDIR} -D__PICCPRO__ -N31 --warn=0 --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 --double=24 --float=24 --addrqual=ignore --mode=lite -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" @echo ${OBJECTDIR}/main.p1: > ${OBJECTDIR}/main.p1.d @cat ${OBJECTDIR}/main.dep >> ${OBJECTDIR}/main.p1.d @${FIXDEPS} "${OBJECTDIR}/main.p1.d" $(SILENT) -ht @@ -106,12 +154,12 @@ endif ifeq ($(TYPE_IMAGE), DEBUG_RUN) dist/${CND_CONF}/${IMAGE_TYPE}/picdimmy.${IMAGE_TYPE}.cof: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk @${MKDIR} dist/${CND_CONF}/${IMAGE_TYPE} - ${MP_LD} $(MP_EXTRA_LD_PRE) -odist/${CND_CONF}/${IMAGE_TYPE}/picdimmy.${IMAGE_TYPE}.cof -mdist/${CND_CONF}/${IMAGE_TYPE}/picdimmy.${IMAGE_TYPE}.map --summary=default,-psect,-class,+mem,-hex --chip=$(MP_PROCESSOR_OPTION) -P --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --summary=default,-psect,-class,+mem,-hex --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 -D__DEBUG --debugger=pickit3 -N31 --warn=0 --double=24 --float=24 --addrqual=ignore --mode=lite --output=default,-inhx032 -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" ${OBJECTFILES_QUOTED_IF_SPACED} + ${MP_LD} $(MP_EXTRA_LD_PRE) -odist/${CND_CONF}/${IMAGE_TYPE}/picdimmy.${IMAGE_TYPE}.cof -mdist/${CND_CONF}/${IMAGE_TYPE}/picdimmy.${IMAGE_TYPE}.map --summary=default,-psect,-class,+mem,-hex --chip=$(MP_PROCESSOR_OPTION) -P --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --summary=default,-psect,-class,+mem,-hex --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 -D__DEBUG --debugger=pickit3 -D__PICCPRO__ -N31 --warn=0 --double=24 --float=24 --addrqual=ignore --mode=lite --output=default,-inhx032 -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" ${OBJECTFILES_QUOTED_IF_SPACED} @${RM} dist/${CND_CONF}/${IMAGE_TYPE}/picdimmy.${IMAGE_TYPE}.hex else dist/${CND_CONF}/${IMAGE_TYPE}/picdimmy.${IMAGE_TYPE}.cof: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk @${MKDIR} dist/${CND_CONF}/${IMAGE_TYPE} - ${MP_LD} $(MP_EXTRA_LD_PRE) -odist/${CND_CONF}/${IMAGE_TYPE}/picdimmy.${IMAGE_TYPE}.cof -mdist/${CND_CONF}/${IMAGE_TYPE}/picdimmy.${IMAGE_TYPE}.map --summary=default,-psect,-class,+mem,-hex --chip=$(MP_PROCESSOR_OPTION) -P --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --summary=default,-psect,-class,+mem,-hex --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 -N31 --warn=0 --double=24 --float=24 --addrqual=ignore --mode=lite --output=default,-inhx032 -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" ${OBJECTFILES_QUOTED_IF_SPACED} + ${MP_LD} $(MP_EXTRA_LD_PRE) -odist/${CND_CONF}/${IMAGE_TYPE}/picdimmy.${IMAGE_TYPE}.cof -mdist/${CND_CONF}/${IMAGE_TYPE}/picdimmy.${IMAGE_TYPE}.map --summary=default,-psect,-class,+mem,-hex --chip=$(MP_PROCESSOR_OPTION) -P --runtime=default,+clear,+init,-keep,+osccal,-resetbits,-download,+stackcall,+clib --summary=default,-psect,-class,+mem,-hex --opt=default,+asm,-asmfile,+speed,-space,-debug,-9 -D__PICCPRO__ -N31 --warn=0 --double=24 --float=24 --addrqual=ignore --mode=lite --output=default,-inhx032 -g --asmlist "--errformat=%f:%l: error: %s" "--msgformat=%f:%l: advisory: %s" "--warnformat=%f:%l warning: %s" ${OBJECTFILES_QUOTED_IF_SPACED} endif diff --git a/nbproject/Makefile-genesis.properties b/nbproject/Makefile-genesis.properties index 398baa5..b65ef7b 100644 --- a/nbproject/Makefile-genesis.properties +++ b/nbproject/Makefile-genesis.properties @@ -1,5 +1,5 @@ # -#Fri Dec 02 19:43:02 MST 2011 +#Sun Dec 04 15:10:45 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 97462d3..558d55c 100644 --- a/nbproject/configurations.xml +++ b/nbproject/configurations.xml @@ -16,7 +16,13 @@ + ../picbuttons/buttons.c + ../picbuttons/buttons.h main.c + ../picbuttons/picinit.c + ../picbuttons/picinit.h + ../picbuttons/rgb.c + ../picbuttons/rgb.h localhost - PIC16LF1827 + PIC16F1827 PICkit3PlatformTool hi-tech-picc @@ -53,6 +59,23 @@ makeCustomizationUserID + + + + + + + + + + + + + + + + + @@ -74,10 +97,10 @@ - + - + diff --git a/nbproject/project.xml b/nbproject/project.xml index 7e803f1..f62232d 100644 --- a/nbproject/project.xml +++ b/nbproject/project.xml @@ -8,7 +8,7 @@ 0 c - + h ISO-8859-1 diff --git a/picinit.c b/picinit.c new file mode 100644 index 0000000..40843b2 --- /dev/null +++ b/picinit.c @@ -0,0 +1,30 @@ +/* + * File: picinit.c + * + * Initialize the CPU + */ + + +#include + +#define RUNAT32MHZ /* else 16 MHz */ + +#if defined(RUNAT32MHZ) +__CONFIG(WDTE_OFF & FOSC_INTOSC); +__CONFIG(LVP_OFF & PLLEN_ON); +#else +__CONFIG(WDTE_OFF); +__CONFIG(LVP_OFF); +#endif + +void pic_init() +{ +#if defined(RUNAT32MHZ) + OSCCON = 0b11110000; +#else /* 16 MHz */ + OSCCON = 0b01111010; +#endif + + /* OSCSTAT.HFIOFL is set when oscillator is locked (accurate within 2%) */ + while (!HFIOFL); +} diff --git a/picinit.h b/picinit.h new file mode 100644 index 0000000..c349b9c --- /dev/null +++ b/picinit.h @@ -0,0 +1,18 @@ +/* + * File: picinit.h + * + * Initialize the CPU + */ + +#ifndef _PICINIT_H +#define _PICINIT_H + +#if defined(RUNAT32MHZ) +#define _XTAL_FREQ 32000000 +#else +#define _XTAL_FREQ 16000000 +#endif + +void pic_init(); + +#endif diff --git a/rgb.c b/rgb.c new file mode 100644 index 0000000..5fb2849 --- /dev/null +++ b/rgb.c @@ -0,0 +1,60 @@ +/* + * File: rgb.c + * + * RGB led control + */ + +#include + +#define PINS_PORTA 0b10011000 +#define PINS_PORTB 0b00001000 + +void rgb_init() +{ + /* Initialize rgb + * CCP1 on RB3, CCP2 on RA7, CCP3 on RA3, CCP4 on RA4 + * - Fosc = 32MHz + * - Prescale = 16 + * - PRx value = 0xff + * = f(rgb) = 1.95 kHz + */ + + /* Set rgb Rxn pins as outputs. */ + PORTA &= ~PINS_PORTA; + TRISA &= ~PINS_PORTA; + PORTB &= ~PINS_PORTB; + TRISB &= ~PINS_PORTB; + + /* Configure ECCP1 */ + CCP1CON = 0b00001100; + CCPR1L = 0; /* Initial rgb value; only using 8 LSBs */ + + /* Configure ECCP2 */ + APFCON0 |= 0b00001000; /* Use alternate output pin RA7 */ + CCP2CON = 0b00001100; + CCPR2L = 0; /* Initial rgb value; only using 8 LSBs */ + + /* Configure CCP3 */ + CCP3CON = 0b00001100; + CCPR3L = 0; /* Initial rgb value; only using 8 LSBs */ + + /* Configure CCP4 */ + CCP4CON = 0b00001100; + CCPR4L = 0; /* Initial rgb value; only using 8 LSBs */ + + /* Configure Timer2. Start it to set 0 outputs, then stop it. */ + CCPTMRS = 0; /* All CCPx use Timer 2 */ + TMR2IF = 0; + PR2 = 0xff; + T2CON = 0b00000011; +} + +void rgb_off() +{ + if (TMR2ON) { + CCPR1L = CCPR2L = CCPR3L = CCPR4L = 0; + TMR2IF = 0; + while (!TMR2IF); + TMR2ON = 0; + } +} diff --git a/rgb.h b/rgb.h new file mode 100644 index 0000000..663e189 --- /dev/null +++ b/rgb.h @@ -0,0 +1,28 @@ +/* + * File: rgb.h + * + * RGB led control + */ + + +#ifndef _RGB_H +#define _RGB_H + +/* Initialize the RGB LED assembly. Outputs are zero, PWM is off. */ +void rgb_init(); + +/* Turn on the rgb. Outputs are zero, or last values set by rgb_set(). */ +#define rgb_on() do { TMR2ON = 1; } while (0) + +/* Turn off the rgb, first setting outputs to zero. */ +void rgb_off(); + +/* Set a PWM value for each color LED. 0=off, 255=full on. */ +#define rgb_set(red, grn, blu, wht) do { \ + CCPR1L = (red); \ + CCPR2L = (grn); \ + CCPR3L = (blu); \ + CCPR4L = (wht); \ +} while (0) + +#endif