Personal tools
Log in
User menu
Main page
All Projects
Recommended Tools
Research
Resume/CV
Links
View source for ChristmasTree2012
From Francois Louw
Jump to:
navigation
,
search
[[Projects|Back To All Projects Page]] [[Main Page|Back To Main Page]] __TOC__ ---- So for 2012 I didn't want just any boring tree, I wanted to make one myself with a bunch of LEDs and a PIC that I had lying around! Here are the results with video, pictures, schematics and code! {{#ev:youtube|ShFkCYE7gvw}} ==Schematic== [[File:tree-2012-schematic.jpg|500px]] ''FIX: The MCLR resistor should pull up the MCLR pin, and the MCLR pin should be connected straight to the ICSP header'' The MCLR resistor is 4.7K and the LED resistors will depend on your LEDs. Remember that there is a limit on the amount of current that the PIC can supply. I limited my 2V LEDs to 0.8mA by using 3.8K Resistors. The total current usage is 20mA when all the LEDs are on. Assuming the 9V battery has a 400mAh life then this will give me at least 20 hours. Realistically I should get 30+ hours. For timing I used a 10MHz crystal. ==Source Code== The code was written in C using MPLAB 8.60 and the HiTech C Compiler. Here's the source code <source lang="c"> #include <htc.h> __CONFIG(HS & WDTDIS & PWRTDIS & BORDIS & LVPDIS & DEBUGEN); #define LW RB0 #define HR RB1 #define LR RB2 #define TR RB3 #define MR RB4 #define TW RB5 #define MG RC0 #define LG RC1 #define HG RC2 #define TG RC3 #define HW RC6 #define MW RC7 #define HB RA0 #define TB RA1 #define MB RA2 #define LB RA3 #ifndef _XTAL_FREQ #define _XTAL_FREQ 10000000 #endif void delay() { __delay_ms(500); } void all(int i) { LW = i; MW = i; HW = i; TW = i; LR = i; MR = i; HR = i; TR = i; LG = i; MG = i; HG = i; TG = i; LB = i; MB = i; HB = i; TB = i; } void white(int i) { LW = i; MW = i; HW = i; TW = i; } void red(int i) { LR = i; MR = i; HR = i; TR = i; } void green(int i) { LG = i; MG = i; HG = i; TG = i; } void blue(int i) { LB = i; MB = i; HB = i; TB = i; } void low(int i) { LW = i; LR = i; LG = i; LB = i; } void middle(int i) { MW = i; MR = i; MG = i; MB = i; } void high(int i) { HW = i; HR = i; HG = i; HB = i; } void top(int i) { TW = i; TR = i; TG = i; TB = i; } void north(int i) { LB = i; MG = i; HW = i; TR = i; } void east(int i) { LG = i; MW = i; HR = i; TB = i; } void south(int i) { LW = i; MR = i; HB = i; TG = i; } void west(int i) { LR = i; MB = i; HG = i; TW = i; } void spiralbottom(int i) { LW = i; delay(); MW = i; delay(); HW = i; delay(); TW = i; delay(); LR = i; delay(); MR = i; delay(); HR = i; delay(); TR = i; delay(); LG = i; delay(); MG = i; delay(); HG = i; delay(); TG = i; delay(); LB = i; delay(); MB = i; delay(); HB = i; delay(); TB = i; delay(); } void main(void) { OPTION = 0; GIE = 0; TMR1ON = 0; TMR2ON = 0; SSPEN = 0; SPEN = 0; SREN = 0; CREN = 0; ADDEN = 0; //set ports and timers TRISA0 = 0; TRISA1 = 0; TRISA2 = 0; TRISA3 = 0; TRISA4 = 1; TRISA5 = 0; TRISB0 = 0; TRISB1 = 0; TRISB2 = 0; TRISB3 = 0; TRISB4 = 0; TRISB5 = 0; TRISC0 = 0; TRISC1 = 0; TRISC2 = 0; TRISC3 = 0; TRISC4 = 0; TRISC5 = 0; TRISC6 = 0; TRISC7 = 0; //disable A/D ADON = 0; //all digital PCFG3 = 0;//no ref PCFG2 = 1; PCFG1 = 1; PCFG0 = 0;//no care //diable capture compare CCP1CON = 0; CCP2CON = 0; all(0); while(1) { //flash all all(1); delay(); all(0); delay(); all(1); delay(); all(0); delay(); all(1); delay(); all(0); delay(); all(1); delay(); all(0); delay(); all(1); delay(); all(0); delay(); //colours white(1); delay(); white(0); red(1); delay(); red(0); green(1); delay(); green(0); blue(1); delay(); blue(0); delay(); //reset all(0); //bottom to top low(1); delay(); middle(1); delay(); high(1); delay(); top(1); delay(); //top to bottom top(0); delay(); high(0); delay(); middle(0); delay(); low(0); delay(); //side to side circle on north(1); delay(); east(1); delay(); south(1); delay(); west(1); delay(); //side to side circle off north(0); delay(); east(0); delay(); south(0); delay(); west(0); delay(); //spiral colours up spiralbottom(1); spiralbottom(0); } } </source> ==Result== Here are pictures of the final result (ignore the quality of the makeshift wire tree) [[File:tree-2012-1.jpg|500px]] [[File:tree-2012-2.jpg|500px]] ==Copyright== Everything here is under [[Gplv3|GPL 3.0]]. If you use this to make your own project email me and link to my site. my email is francois.louw@(this-domain)
Return to
ChristmasTree2012
.