#define PWM_ORDER 10
#define PWM_HALF 5
-#define LIGHT_THRESHOLD 200
+#define LIGHT_THRESHOLD 600
#define TIME_ON 16
#ifdef ADCSC /* Let us hope that this is a "new" model */
# define BIT_BTN2 0
#endif
+static int expon2(int duty)
+{
+ int shift = duty>>1;
+ int comp = 1<<shift;
+ int extra = (duty & 1) ? comp>>1 : 0;
+ return (duty ? comp|extra : 0);
+}
+
int main(void)
{
int Duty_Cycle = 0;
P1OUT |= BIT_GL; // Set green LED on
if (events & 1<<ev_pir2)
P1OUT |= BIT_RL; // Set red LED on
- if (Duty_Cycle > 0) {
- Time_Left = TIME_ON;
- continue;
- }
// Sampling and conversion start
#ifdef ADCENC
ADCCTL0 |= ADCENC | ADCSC;
if (events & 1<<ev_adc) {
P1OUT ^= (BIT_GL|BIT_RL); // Flip green and red LEDs
Time_Indicate = 5;
- if (Time_Left)
- continue;
if (ADC_Result < LIGHT_THRESHOLD)
continue;
Time_Left = TIME_ON;
if (!Time_Indicate)
P1OUT &= ~(BIT_RL|BIT_GL); // LEDs off
}
- if (Time_Count++ > 20) {
+ if (Time_Count++ > 10) {
Time_Count = 0;
if (Time_Left)
Time_Left--;
Increment = -1;
}
if (Increment > 0) {
- if (++Duty_Cycle >= PWM_ORDER) {
- Duty_Cycle = PWM_ORDER;
+ if (++Duty_Cycle >= (PWM_ORDER<<1)) {
+ Duty_Cycle = PWM_ORDER<<1;
Increment = 0;
}
} else if (Increment < 0) {
}
} else
continue;
- if (Duty_Cycle)
- TA0CCR2 = 1 << (Duty_Cycle - 1);
- else
- TA0CCR2 = 0;
+
+ TA0CCR2 = expon2(Duty_Cycle);
}
__bis_SR_register(LPM0_bits | GIE);
__no_operation();