This Library allows you to use any pin on the mbed micro as PWM out. It also allows the user to update the Period and Pulse width in realtime.
main.cpp@0:9eb94736e774, 2013-12-08 (annotated)
- Committer:
- mr63
- Date:
- Sun Dec 08 19:04:44 2013 +0000
- Revision:
- 0:9eb94736e774
This Library allows you to use any pin on the mbed micro as PWM out. It also allows the user to update the Period and Pulse width in realtime.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mr63 | 0:9eb94736e774 | 1 | #include "mbed.h" |
mr63 | 0:9eb94736e774 | 2 | #include "PwmOutAny.h" |
mr63 | 0:9eb94736e774 | 3 | |
mr63 | 0:9eb94736e774 | 4 | Timer t; |
mr63 | 0:9eb94736e774 | 5 | |
mr63 | 0:9eb94736e774 | 6 | InterruptIn SquareIn (p22); |
mr63 | 0:9eb94736e774 | 7 | DigitalOut status (LED1); |
mr63 | 0:9eb94736e774 | 8 | |
mr63 | 0:9eb94736e774 | 9 | |
mr63 | 0:9eb94736e774 | 10 | |
mr63 | 0:9eb94736e774 | 11 | PwmOutAny newPwm (p25,.0001,.50); |
mr63 | 0:9eb94736e774 | 12 | |
mr63 | 0:9eb94736e774 | 13 | void measure_Period() // this is a test function it looks at a square wave on pin p22 and uses its freq. as the base freq. for the PWM. |
mr63 | 0:9eb94736e774 | 14 | { |
mr63 | 0:9eb94736e774 | 15 | static bool first = true; |
mr63 | 0:9eb94736e774 | 16 | static float InputPeriod = .0001; |
mr63 | 0:9eb94736e774 | 17 | static unsigned int count = 0; |
mr63 | 0:9eb94736e774 | 18 | if(first) |
mr63 | 0:9eb94736e774 | 19 | { |
mr63 | 0:9eb94736e774 | 20 | t.reset(); |
mr63 | 0:9eb94736e774 | 21 | t.start(); |
mr63 | 0:9eb94736e774 | 22 | first = false; |
mr63 | 0:9eb94736e774 | 23 | } |
mr63 | 0:9eb94736e774 | 24 | else |
mr63 | 0:9eb94736e774 | 25 | { |
mr63 | 0:9eb94736e774 | 26 | |
mr63 | 0:9eb94736e774 | 27 | InputPeriod = (InputPeriod + t.read())/2; |
mr63 | 0:9eb94736e774 | 28 | newPwm.Set_Period(InputPeriod); |
mr63 | 0:9eb94736e774 | 29 | status = ! status; |
mr63 | 0:9eb94736e774 | 30 | t.reset(); |
mr63 | 0:9eb94736e774 | 31 | t.start(); |
mr63 | 0:9eb94736e774 | 32 | count++; |
mr63 | 0:9eb94736e774 | 33 | } |
mr63 | 0:9eb94736e774 | 34 | |
mr63 | 0:9eb94736e774 | 35 | } |
mr63 | 0:9eb94736e774 | 36 | |
mr63 | 0:9eb94736e774 | 37 | |
mr63 | 0:9eb94736e774 | 38 | int main() |
mr63 | 0:9eb94736e774 | 39 | { |
mr63 | 0:9eb94736e774 | 40 | |
mr63 | 0:9eb94736e774 | 41 | SquareIn.rise(&measure_Period); |
mr63 | 0:9eb94736e774 | 42 | |
mr63 | 0:9eb94736e774 | 43 | while(1) |
mr63 | 0:9eb94736e774 | 44 | { |
mr63 | 0:9eb94736e774 | 45 | for(float t=0;t<=1;t+=.01) |
mr63 | 0:9eb94736e774 | 46 | { |
mr63 | 0:9eb94736e774 | 47 | newPwm.Set_PulseWidth(t); |
mr63 | 0:9eb94736e774 | 48 | wait(.1); |
mr63 | 0:9eb94736e774 | 49 | } |
mr63 | 0:9eb94736e774 | 50 | for(float t=1;t>=0;t-=.01) |
mr63 | 0:9eb94736e774 | 51 | { |
mr63 | 0:9eb94736e774 | 52 | newPwm.Set_PulseWidth(t); |
mr63 | 0:9eb94736e774 | 53 | wait(.1); |
mr63 | 0:9eb94736e774 | 54 | } |
mr63 | 0:9eb94736e774 | 55 | |
mr63 | 0:9eb94736e774 | 56 | |
mr63 | 0:9eb94736e774 | 57 | } |
mr63 | 0:9eb94736e774 | 58 | |
mr63 | 0:9eb94736e774 | 59 | } |
mr63 | 0:9eb94736e774 | 60 |