![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
backlight PWM test app. PWM on pin 21 trigger output on pin 22.
Fork of PwmOut_HelloWorld by
main.cpp@2:cfacbc7be12b, 2017-06-22 (annotated)
- Committer:
- ChrisABailey
- Date:
- Thu Jun 22 19:10:11 2017 +0000
- Revision:
- 2:cfacbc7be12b
- Parent:
- 1:5160ea45399b
version for testing FES 5.7 backlight driver
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mbed_official | 0:50d2b9c62765 | 1 | #include "mbed.h" |
ChrisABailey | 2:cfacbc7be12b | 2 | #include <ctype.h> |
ChrisABailey | 2:cfacbc7be12b | 3 | #include "FastPWM.h" |
mbedAustin | 1:5160ea45399b | 4 | |
ChrisABailey | 2:cfacbc7be12b | 5 | DigitalOut led1(LED1); |
ChrisABailey | 2:cfacbc7be12b | 6 | DigitalOut led2(LED2); |
ChrisABailey | 2:cfacbc7be12b | 7 | DigitalOut led3(LED3); |
ChrisABailey | 2:cfacbc7be12b | 8 | DigitalOut led4(LED4); |
ChrisABailey | 2:cfacbc7be12b | 9 | FastPWM pwm(p21); |
ChrisABailey | 2:cfacbc7be12b | 10 | DigitalOut trigger(p22); |
ChrisABailey | 2:cfacbc7be12b | 11 | //AnalogIn analog_value(p20); |
ChrisABailey | 2:cfacbc7be12b | 12 | Serial pc(USBTX, USBRX); |
ChrisABailey | 2:cfacbc7be12b | 13 | double dutyCycle=.01; |
ChrisABailey | 2:cfacbc7be12b | 14 | |
mbedAustin | 1:5160ea45399b | 15 | |
ChrisABailey | 2:cfacbc7be12b | 16 | void seekPWM(double newDuty) |
ChrisABailey | 2:cfacbc7be12b | 17 | { |
ChrisABailey | 2:cfacbc7be12b | 18 | if (dutyCycle<0.01 or newDuty <0.01) |
ChrisABailey | 2:cfacbc7be12b | 19 | { |
ChrisABailey | 2:cfacbc7be12b | 20 | if (newDuty > dutyCycle) { |
ChrisABailey | 2:cfacbc7be12b | 21 | while (newDuty/dutyCycle > 2) { |
ChrisABailey | 2:cfacbc7be12b | 22 | dutyCycle = dutyCycle * 1.5; |
ChrisABailey | 2:cfacbc7be12b | 23 | trigger=0; |
ChrisABailey | 2:cfacbc7be12b | 24 | pwm.write(dutyCycle); |
ChrisABailey | 2:cfacbc7be12b | 25 | trigger=1; |
ChrisABailey | 2:cfacbc7be12b | 26 | wait_ms(100); |
ChrisABailey | 2:cfacbc7be12b | 27 | } |
ChrisABailey | 2:cfacbc7be12b | 28 | } else { |
ChrisABailey | 2:cfacbc7be12b | 29 | while (newDuty/dutyCycle < .5) { |
ChrisABailey | 2:cfacbc7be12b | 30 | dutyCycle = dutyCycle * 0.75; |
ChrisABailey | 2:cfacbc7be12b | 31 | trigger=0; |
ChrisABailey | 2:cfacbc7be12b | 32 | pwm.write(dutyCycle); |
ChrisABailey | 2:cfacbc7be12b | 33 | trigger=1; |
ChrisABailey | 2:cfacbc7be12b | 34 | wait_ms(100); |
ChrisABailey | 2:cfacbc7be12b | 35 | } |
ChrisABailey | 2:cfacbc7be12b | 36 | } |
ChrisABailey | 2:cfacbc7be12b | 37 | } |
ChrisABailey | 2:cfacbc7be12b | 38 | trigger=0; |
ChrisABailey | 2:cfacbc7be12b | 39 | dutyCycle = newDuty; |
ChrisABailey | 2:cfacbc7be12b | 40 | pwm.write(dutyCycle); |
ChrisABailey | 2:cfacbc7be12b | 41 | trigger=1; |
ChrisABailey | 2:cfacbc7be12b | 42 | |
ChrisABailey | 2:cfacbc7be12b | 43 | |
ChrisABailey | 2:cfacbc7be12b | 44 | } |
ChrisABailey | 2:cfacbc7be12b | 45 | |
mbed_official | 0:50d2b9c62765 | 46 | int main() { |
ChrisABailey | 2:cfacbc7be12b | 47 | char current_char=0; |
ChrisABailey | 2:cfacbc7be12b | 48 | |
mbedAustin | 1:5160ea45399b | 49 | // specify period first |
ChrisABailey | 2:cfacbc7be12b | 50 | //led.period(0.0050f); // 200 Hz |
ChrisABailey | 2:cfacbc7be12b | 51 | //pwm.period(0.0100f); // 100 Hz |
ChrisABailey | 2:cfacbc7be12b | 52 | |
ChrisABailey | 2:cfacbc7be12b | 53 | pwm.period_ms(10); |
ChrisABailey | 2:cfacbc7be12b | 54 | //led.write(0.10f); // 10% duty cycle, relative to period |
ChrisABailey | 2:cfacbc7be12b | 55 | pwm.write(dutyCycle); // 1% |
mbedAustin | 1:5160ea45399b | 56 | //led = 0.5f; // shorthand for led.write() |
mbedAustin | 1:5160ea45399b | 57 | //led.pulsewidth(2); // alternative to led.write, set duty cycle time in seconds |
ChrisABailey | 2:cfacbc7be12b | 58 | |
ChrisABailey | 2:cfacbc7be12b | 59 | |
ChrisABailey | 2:cfacbc7be12b | 60 | while(1) |
ChrisABailey | 2:cfacbc7be12b | 61 | { |
ChrisABailey | 2:cfacbc7be12b | 62 | |
ChrisABailey | 2:cfacbc7be12b | 63 | pc.printf("Current duty cycle = %f \r\n ", dutyCycle); |
ChrisABailey | 2:cfacbc7be12b | 64 | pc.printf("U to increase duty cycle \r\n "); |
ChrisABailey | 2:cfacbc7be12b | 65 | pc.printf("D to decrease duty cycle \r\n "); |
ChrisABailey | 2:cfacbc7be12b | 66 | pc.printf("R to ramp duty cycle \r\n "); |
ChrisABailey | 2:cfacbc7be12b | 67 | pc.printf("Command?"); |
ChrisABailey | 2:cfacbc7be12b | 68 | current_char = pc.getc(); |
ChrisABailey | 2:cfacbc7be12b | 69 | pc.printf("%c\n\r",current_char); |
ChrisABailey | 2:cfacbc7be12b | 70 | |
ChrisABailey | 2:cfacbc7be12b | 71 | switch (tolower(current_char)) |
ChrisABailey | 2:cfacbc7be12b | 72 | { |
ChrisABailey | 2:cfacbc7be12b | 73 | |
ChrisABailey | 2:cfacbc7be12b | 74 | case 'u': |
ChrisABailey | 2:cfacbc7be12b | 75 | { |
ChrisABailey | 2:cfacbc7be12b | 76 | dutyCycle = dutyCycle + 0.0002; |
ChrisABailey | 2:cfacbc7be12b | 77 | trigger=1; |
ChrisABailey | 2:cfacbc7be12b | 78 | } |
ChrisABailey | 2:cfacbc7be12b | 79 | break; |
ChrisABailey | 2:cfacbc7be12b | 80 | case 'd': |
ChrisABailey | 2:cfacbc7be12b | 81 | { |
ChrisABailey | 2:cfacbc7be12b | 82 | dutyCycle = dutyCycle - 0.0002; |
ChrisABailey | 2:cfacbc7be12b | 83 | trigger=1; |
ChrisABailey | 2:cfacbc7be12b | 84 | } |
ChrisABailey | 2:cfacbc7be12b | 85 | break; |
ChrisABailey | 2:cfacbc7be12b | 86 | case 'r': |
ChrisABailey | 2:cfacbc7be12b | 87 | { |
ChrisABailey | 2:cfacbc7be12b | 88 | trigger = 0; |
ChrisABailey | 2:cfacbc7be12b | 89 | seekPWM(0.0001); |
ChrisABailey | 2:cfacbc7be12b | 90 | wait(1.0); |
ChrisABailey | 2:cfacbc7be12b | 91 | trigger=0; |
ChrisABailey | 2:cfacbc7be12b | 92 | seekPWM(0.05); |
ChrisABailey | 2:cfacbc7be12b | 93 | trigger=0; |
ChrisABailey | 2:cfacbc7be12b | 94 | /* |
ChrisABailey | 2:cfacbc7be12b | 95 | trigger=0; |
ChrisABailey | 2:cfacbc7be12b | 96 | dutyCycle = 0.001; |
ChrisABailey | 2:cfacbc7be12b | 97 | pwm.write(dutyCycle); |
ChrisABailey | 2:cfacbc7be12b | 98 | wait(1.0); |
ChrisABailey | 2:cfacbc7be12b | 99 | //int pulseWidthUs = 10; |
ChrisABailey | 2:cfacbc7be12b | 100 | for (int i=0; i< 10;i++) |
ChrisABailey | 2:cfacbc7be12b | 101 | { |
ChrisABailey | 2:cfacbc7be12b | 102 | trigger=1; |
ChrisABailey | 2:cfacbc7be12b | 103 | pwm.write(dutyCycle); |
ChrisABailey | 2:cfacbc7be12b | 104 | //pwm.pulsewidth_us(pulseWidthUs); |
ChrisABailey | 2:cfacbc7be12b | 105 | pulseWidthUs *= 2; |
ChrisABailey | 2:cfacbc7be12b | 106 | wait_ms(10); |
ChrisABailey | 2:cfacbc7be12b | 107 | trigger=0; |
ChrisABailey | 2:cfacbc7be12b | 108 | wait(1.0); |
ChrisABailey | 2:cfacbc7be12b | 109 | |
ChrisABailey | 2:cfacbc7be12b | 110 | //dutyCycle = dutyCycle+(.0001); |
ChrisABailey | 2:cfacbc7be12b | 111 | pulseWidthUs = pulseWidthUs + 10; |
ChrisABailey | 2:cfacbc7be12b | 112 | led1.write(i&0x01); |
ChrisABailey | 2:cfacbc7be12b | 113 | led2.write((i&0x02)>>1); |
ChrisABailey | 2:cfacbc7be12b | 114 | led3.write((i&0x04)>>2); |
ChrisABailey | 2:cfacbc7be12b | 115 | led4.write((i&0x08)>>3); |
ChrisABailey | 2:cfacbc7be12b | 116 | } |
ChrisABailey | 2:cfacbc7be12b | 117 | */ |
ChrisABailey | 2:cfacbc7be12b | 118 | |
ChrisABailey | 2:cfacbc7be12b | 119 | } |
ChrisABailey | 2:cfacbc7be12b | 120 | break; |
ChrisABailey | 2:cfacbc7be12b | 121 | } |
ChrisABailey | 2:cfacbc7be12b | 122 | dutyCycle = dutyCycle < 1.0 ? dutyCycle : 1.0; |
ChrisABailey | 2:cfacbc7be12b | 123 | dutyCycle = dutyCycle > 0.0001 ? dutyCycle : 0.0001; |
ChrisABailey | 2:cfacbc7be12b | 124 | pwm.write(dutyCycle); |
ChrisABailey | 2:cfacbc7be12b | 125 | wait_ms(10); |
ChrisABailey | 2:cfacbc7be12b | 126 | trigger=0; |
ChrisABailey | 2:cfacbc7be12b | 127 | |
ChrisABailey | 2:cfacbc7be12b | 128 | } |
mbed_official | 0:50d2b9c62765 | 129 | } |