backlight PWM test app. PWM on pin 21 trigger output on pin 22.

Dependencies:   FastPWM mbed

Fork of PwmOut_HelloWorld by Mbed

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?

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