You can read more about it here , the code has been posted along with the schematic.
and a more complete video of the whole thing later tonight!!
Monthly Archives: October 2010
my RGB flower pot is done!!
rgb v0.2
I have finally gotten my RGB led to cycle through all 3 colors, i now just have to finish the board
#include <msp430x20x2.h>
#include <signal.h> //add for interrupt
#define UP 0x00
#define DOWN 0x01
#define HOLD 0x02
#define PERIOD 200 //sets period length-- PERIOD x interval length
volatile int millsecs = 0;
volatile int counter2 = 0;
volatile int led_red = 1;
volatile int led_green = 1;
volatile int led_blue = 1;
volatile int red = UP;
volatile int blue = HOLD;
volatile int green = HOLD;
void main(void)
{
WDTCTL = WDT_MDLY_0_064;
P1DIR |= BIT5 + BIT4 + BIT3;
P1OUT |= BIT5 + BIT4 + BIT3;
IE1 |= WDTIE;
eint();
}//end main
interrupt(WDT_VECTOR) watchdog_timer(void)
{
++millsecs;
if (millsecs == PERIOD) { millsecs= 0; P1OUT |= BIT5 + BIT4 + BIT3; ++counter2; }
if (millsecs == led_red ) { P1OUT ^= BIT3; }
if (millsecs == led_green) { P1OUT ^= BIT4; }
if (millsecs == led_blue ) { P1OUT ^= BIT5; }
if (counter2 == 5 ) { counter2 =0;
switch (red){
case UP: ++led_red;
if (led_red == 199) {red = HOLD; green = UP; blue = DOWN;}
break;
case DOWN: --led_red;
if (led_red == 0) {red = HOLD;}
break;
case HOLD: break;
}//end switch
switch (blue){
case UP: ++led_blue;
if (led_blue == 199) {blue = HOLD; green = DOWN; red = UP;}
break;
case DOWN: --led_blue;
if (led_blue == 0) {blue = HOLD;}
break;
case HOLD: break;
}//end switch
switch (green){
case UP: ++led_green;
if (led_green == 199) {green = HOLD; red = DOWN; blue = UP;}
break;
case DOWN: --led_green;
if (led_green == 0) {green = HOLD;}
break;
case HOLD: break;
}//end switch
}//end if
}//end interrupt
MSP430 interrupt driven PWM
this is the code for a PWM, using the WDT as an interval timer.
//options for interval timer
/* WDT is clocked by fSMCLK (assumed 1MHz)
WDT_MDLY_32 (WDTPW+WDTTMSEL+WDTCNTCL) 32ms interval (default)
WDT_MDLY_8 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0) 8ms ”
WDT_MDLY_0_5 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1) 0.5ms ”
WDT_MDLY_0_064 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0) 0.064ms ”
WDT is clocked by fACLK (assumed 32KHz)
WDT_ADLY_1000 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL) 1000ms ”
WDT_ADLY_250 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0) 250ms ”
WDT_ADLY_16 16ms ”
WDT_ADLY_1_9 1.9ms ”
interval x PERIOD = period interval .064ms x 200 = 12.8ms or 78.125hz */
#include <msp430x20x2.h>
#include <signal.h> //add for interrupt
#define PERIOD 200 //defines frequency
volatile int timer = 0; //counts how many interrupts have been called
//resets when it counts to PERIOD
volatile int duty_cycle = 0;// max = PERIOD - 1 and min = 1
void main(void)
{
WDTCTL = WDT_MDLY_0_064; //interval setting
P1DIR |= BIT0;
P1OUT |= BIT0;
IE1 |= WDTIE;
eint(); //enable interrupt
}//end main
interrupt(WDT_VECTOR) watchdog_timer(void)
{
++timer;
if (timer == PERIOD) { timer = 0; P1OUT |= BIT0; }
if (timer == duty_cycle ) { P1OUT ^= BIT0; }
}//end interrupt
a quick demo using my rgb light
sorry for the sound, i forgot to turn off my TV lol

