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.

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?

UserRevisionLine numberNew 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