Solutions for the PWM experiments for LPC812 MAX

Dependencies:   lpc812_exp_lib_PCF8591 mbed

Committer:
embeddedartists
Date:
Mon Nov 25 12:01:00 2013 +0000
Revision:
1:08c2337bfa7b
Parent:
0:6f393e96a8d1
Fixed part 3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
embeddedartists 0:6f393e96a8d1 1 #include "mbed.h"
embeddedartists 0:6f393e96a8d1 2 #include "PCF8591.h"
embeddedartists 0:6f393e96a8d1 3
embeddedartists 0:6f393e96a8d1 4 Serial pc(USBTX, USBRX); // tx, rx
embeddedartists 0:6f393e96a8d1 5
embeddedartists 0:6f393e96a8d1 6 DigitalOut redLED(D0);
embeddedartists 0:6f393e96a8d1 7 DigitalOut greenLED(D1);
embeddedartists 0:6f393e96a8d1 8
embeddedartists 0:6f393e96a8d1 9 PCF8591 adc;
embeddedartists 0:6f393e96a8d1 10
embeddedartists 0:6f393e96a8d1 11 static void experiment1()
embeddedartists 0:6f393e96a8d1 12 {
embeddedartists 0:6f393e96a8d1 13 // set wanted duty cycle
embeddedartists 0:6f393e96a8d1 14 int wantedDutyCycle = 10;
embeddedartists 0:6f393e96a8d1 15
embeddedartists 0:6f393e96a8d1 16 // initialize LEDs to off
embeddedartists 0:6f393e96a8d1 17 greenLED = redLED = 1;
embeddedartists 0:6f393e96a8d1 18
embeddedartists 0:6f393e96a8d1 19 pc.printf("Fixed duty cycle\n");
embeddedartists 0:6f393e96a8d1 20 while(1) {
embeddedartists 0:6f393e96a8d1 21 // set output high
embeddedartists 0:6f393e96a8d1 22 greenLED = 1;
embeddedartists 0:6f393e96a8d1 23
embeddedartists 0:6f393e96a8d1 24 for (int loopCounter = 0; loopCounter < 100; loopCounter++) {
embeddedartists 0:6f393e96a8d1 25 if (loopCounter == wantedDutyCycle) {
embeddedartists 0:6f393e96a8d1 26 // set output low
embeddedartists 0:6f393e96a8d1 27 greenLED = 0;
embeddedartists 0:6f393e96a8d1 28 }
embeddedartists 0:6f393e96a8d1 29 }
embeddedartists 0:6f393e96a8d1 30 }
embeddedartists 0:6f393e96a8d1 31 }
embeddedartists 0:6f393e96a8d1 32
embeddedartists 0:6f393e96a8d1 33 static int getDutyCycle(PCF8591::AnalogIn port)
embeddedartists 0:6f393e96a8d1 34 {
embeddedartists 0:6f393e96a8d1 35 return (adc.read(port) * 100)/256;
embeddedartists 0:6f393e96a8d1 36 }
embeddedartists 0:6f393e96a8d1 37
embeddedartists 0:6f393e96a8d1 38 static void experiment2()
embeddedartists 0:6f393e96a8d1 39 {
embeddedartists 0:6f393e96a8d1 40 // set wanted duty cycle
embeddedartists 0:6f393e96a8d1 41 int wantedDutyCycle = 10;
embeddedartists 0:6f393e96a8d1 42
embeddedartists 0:6f393e96a8d1 43 // initialize LEDs to off
embeddedartists 0:6f393e96a8d1 44 greenLED = redLED = 1;
embeddedartists 0:6f393e96a8d1 45
embeddedartists 0:6f393e96a8d1 46 pc.printf("Trimpot controlled duty cycle\n");
embeddedartists 0:6f393e96a8d1 47 while(1) {
embeddedartists 0:6f393e96a8d1 48 wantedDutyCycle = getDutyCycle(PCF8591::A0);
embeddedartists 0:6f393e96a8d1 49
embeddedartists 0:6f393e96a8d1 50 // The duty cycle does not have to be read for each PWM loop
embeddedartists 0:6f393e96a8d1 51 for (int num = 0; num < 200; num++) {
embeddedartists 0:6f393e96a8d1 52 // set output high
embeddedartists 0:6f393e96a8d1 53 greenLED = 1;
embeddedartists 0:6f393e96a8d1 54
embeddedartists 0:6f393e96a8d1 55 for (int loopCounter = 0; loopCounter < 100; loopCounter++) {
embeddedartists 0:6f393e96a8d1 56 if (loopCounter == wantedDutyCycle) {
embeddedartists 0:6f393e96a8d1 57 // set output low
embeddedartists 0:6f393e96a8d1 58 greenLED = 0;
embeddedartists 0:6f393e96a8d1 59 }
embeddedartists 0:6f393e96a8d1 60 }
embeddedartists 0:6f393e96a8d1 61 }
embeddedartists 0:6f393e96a8d1 62 }
embeddedartists 0:6f393e96a8d1 63 }
embeddedartists 0:6f393e96a8d1 64
embeddedartists 0:6f393e96a8d1 65 static void experiment3()
embeddedartists 0:6f393e96a8d1 66 {
embeddedartists 0:6f393e96a8d1 67 // set wanted duty cycle
embeddedartists 0:6f393e96a8d1 68 int wantedDutyCycle = 10;
embeddedartists 0:6f393e96a8d1 69
embeddedartists 0:6f393e96a8d1 70 // set wanted frequency
embeddedartists 0:6f393e96a8d1 71 int delay = 1;
embeddedartists 0:6f393e96a8d1 72
embeddedartists 0:6f393e96a8d1 73 // initialize LEDs to off
embeddedartists 0:6f393e96a8d1 74 greenLED = redLED = 1;
embeddedartists 0:6f393e96a8d1 75
embeddedartists 0:6f393e96a8d1 76 bool readDuty = true;
embeddedartists 0:6f393e96a8d1 77
embeddedartists 0:6f393e96a8d1 78 pc.printf("Trimpot controlled duty cycle and frequency\n");
embeddedartists 0:6f393e96a8d1 79 while(1) {
embeddedartists 0:6f393e96a8d1 80 // Don't want to read too often as that will return incorrect values
embeddedartists 0:6f393e96a8d1 81 if (readDuty) {
embeddedartists 0:6f393e96a8d1 82 wantedDutyCycle = getDutyCycle(PCF8591::A0);
embeddedartists 0:6f393e96a8d1 83 } else {
embeddedartists 0:6f393e96a8d1 84 delay = getDutyCycle(PCF8591::A1);
embeddedartists 0:6f393e96a8d1 85 }
embeddedartists 0:6f393e96a8d1 86 readDuty = !readDuty;
embeddedartists 0:6f393e96a8d1 87
embeddedartists 0:6f393e96a8d1 88 // Try to run PWM loop for about 50ms to allow ADC to produce correct values
embeddedartists 0:6f393e96a8d1 89 for (int num = 0; num <= (500/(delay+1)); num++) {
embeddedartists 0:6f393e96a8d1 90 // set output high
embeddedartists 0:6f393e96a8d1 91 greenLED = 1;
embeddedartists 0:6f393e96a8d1 92
embeddedartists 0:6f393e96a8d1 93 for (int loopCounter = 0; loopCounter < 100; loopCounter++) {
embeddedartists 0:6f393e96a8d1 94 if (loopCounter == wantedDutyCycle) {
embeddedartists 0:6f393e96a8d1 95 // set output low
embeddedartists 0:6f393e96a8d1 96 greenLED = 0;
embeddedartists 0:6f393e96a8d1 97 }
embeddedartists 1:08c2337bfa7b 98 wait_us(delay*5);
embeddedartists 0:6f393e96a8d1 99 }
embeddedartists 0:6f393e96a8d1 100 }
embeddedartists 0:6f393e96a8d1 101 }
embeddedartists 0:6f393e96a8d1 102 }
embeddedartists 0:6f393e96a8d1 103
embeddedartists 0:6f393e96a8d1 104 static void experiment4()
embeddedartists 0:6f393e96a8d1 105 {
embeddedartists 0:6f393e96a8d1 106 // set wanted duty cycle
embeddedartists 0:6f393e96a8d1 107 int wantedRedDutyCycle = 10;
embeddedartists 0:6f393e96a8d1 108 int wantedGreenDutyCycle = 10;
embeddedartists 0:6f393e96a8d1 109
embeddedartists 0:6f393e96a8d1 110 bool readRed = true;
embeddedartists 0:6f393e96a8d1 111
embeddedartists 0:6f393e96a8d1 112 // initialize LEDs to off
embeddedartists 0:6f393e96a8d1 113 greenLED = redLED = 1;
embeddedartists 0:6f393e96a8d1 114
embeddedartists 0:6f393e96a8d1 115 pc.printf("Trimpot controlled duty cycle (one per LED)\n");
embeddedartists 0:6f393e96a8d1 116 while(1) {
embeddedartists 0:6f393e96a8d1 117 if (readRed) {
embeddedartists 0:6f393e96a8d1 118 wantedRedDutyCycle = getDutyCycle(PCF8591::A0);
embeddedartists 0:6f393e96a8d1 119 } else {
embeddedartists 0:6f393e96a8d1 120 wantedGreenDutyCycle = getDutyCycle(PCF8591::A1);
embeddedartists 0:6f393e96a8d1 121 }
embeddedartists 0:6f393e96a8d1 122 readRed = !readRed;
embeddedartists 0:6f393e96a8d1 123
embeddedartists 0:6f393e96a8d1 124
embeddedartists 0:6f393e96a8d1 125 // The duty cycle does not have to be read for each PWM loop
embeddedartists 0:6f393e96a8d1 126 for (int num = 0; num < 200; num++) {
embeddedartists 0:6f393e96a8d1 127 // set outputs high
embeddedartists 0:6f393e96a8d1 128 greenLED = 1;
embeddedartists 0:6f393e96a8d1 129 redLED = 1;
embeddedartists 0:6f393e96a8d1 130
embeddedartists 0:6f393e96a8d1 131 for (int loopCounter = 0; loopCounter < 100; loopCounter++) {
embeddedartists 0:6f393e96a8d1 132 if (loopCounter == wantedGreenDutyCycle) {
embeddedartists 0:6f393e96a8d1 133 // set output low
embeddedartists 0:6f393e96a8d1 134 greenLED = 0;
embeddedartists 0:6f393e96a8d1 135 }
embeddedartists 0:6f393e96a8d1 136 if (loopCounter == wantedRedDutyCycle) {
embeddedartists 0:6f393e96a8d1 137 // set output low
embeddedartists 0:6f393e96a8d1 138 redLED = 0;
embeddedartists 0:6f393e96a8d1 139 }
embeddedartists 0:6f393e96a8d1 140 }
embeddedartists 0:6f393e96a8d1 141 }
embeddedartists 0:6f393e96a8d1 142 }
embeddedartists 0:6f393e96a8d1 143 }
embeddedartists 0:6f393e96a8d1 144
embeddedartists 0:6f393e96a8d1 145 int main()
embeddedartists 0:6f393e96a8d1 146 {
embeddedartists 0:6f393e96a8d1 147 //experiment1(); // Fixed duty cycle
embeddedartists 0:6f393e96a8d1 148 //experiment2(); // Trimpot controlled duty cycle
embeddedartists 0:6f393e96a8d1 149 //experiment3(); // Trimpots controls duty cycle and frequency
embeddedartists 0:6f393e96a8d1 150 experiment4(); // Trimpots controls one LED each
embeddedartists 0:6f393e96a8d1 151 }