The hardware
The hardware is very simple and is based on the MSP430F2012
Basically there are 3 LEDs connected directly to the micro controller.
With the resistors set to 220 Ohm (to increase the brightness) the circuit is consuming an average of 11-12 mA.
The Firmware
Like the servo motor control, the code is based on the PWM generation, one for each LED to control and on some state machines to control the effects.
Here the main state machine that control the lights effects :
States :
- POSIT
This state is the default one.
When in this state, the code acquire the pattern to display (there are three istances of the state machine) and set up the next state, that can be MOVINGUP, MOVINGDOWN, ACTIVATE or RESTING, depending the value read in the pattern and the current value of the ducty cycle - MOVINGUP
This state is reached if the duty cycle need to be increased with a delay.
From this state is possible to go to the WAITINGUP or RESTING state. - MOVINGDOWN
This state is reached if the duty cycle need to be decreased with a delay.
From this state is possible to go to the WAITINGDOWN or RESTING state. - WAITINGUP
When in this state the code is waiting for the expiration of a counter decremented in the timer interrupt.
This state can only go in the MOVINGUP state - WAITINGDOWN
When in this state the code is waiting for the expiration of a counter decremented in the timer interrupt.
This state can only go in the MOVINGDOWN state - ACTIVATE
This state is reached if the duty cycle need to be adjusted without a delay.
From this state is possible to go to the RESTING state. - RESTING
When in this state the code is waiting for the expiration of a counter decremented in the timer interrupt.
This state can only go in the POSIT state
The main flow
The main flow is divided in two places :
- the main loop
- the timer interrupt
The Main Loop
The main loop handle the lights state machine.
The Timer interrupt
The timer interrupt, set to .01 ms, perform some operations, like the decrement of some delay variables (used in the light control state machine) and the PWM generator.
The pattern
Each LED is controlled by a "pattern", i.e. a series of numbers that define some characteristic of the effect.
Each "pattern" is composed by three values :
- Duty Cycle
The first value is the duty cycle to reach.
The range of this value is between 0 and 2000, where 0 is no PWM output, and 2000 is full PWM output. - Speed
The second value indicate the "speed" needed to reach the duty cycle.
Each unit of speed represent 0.01 ms and the range is between 0 (maximum speed - no delay) and 65535 (delay of 0.6 seconds) - Resting
The third value indicate for how long the reached duty cycle need to be kept, before to pass to the next pattern.
Each unit of resting represent 0.1 ms and the range is between 0 (no resting) and 65535 (6 seconds).
Example
Here an example of pattern :
#define VISOR_PATTERN {DTQT,1,0,DT3QT,1,0, 0xFFFF}
There are "two" patterns in this example.
This define is copied into an array at the beginning of the code.
- DTQT,1,0
DTQT is a define equal to 500, i.e. a quarter of duty cycle possible.
1 is the speed
0 is the resting time (no resting time) - DT3QT,1,0
DT3QT is a define equal to 1500, i.e. a three/quarter of duty cycle possible.
1 is the speed
0 is the resting time (no resting time)
No comments:
Post a Comment