Test (c)

Dependencies:   mbed

Committer:
heinrich_kevin
Date:
Mon Dec 14 12:42:39 2015 +0000
Revision:
0:288836a35837
Test (c)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
heinrich_kevin 0:288836a35837 1 // Kevin Heinrich, 3AHEL, Begonnen am: 30.11.2015
heinrich_kevin 0:288836a35837 2 // BERTL14
heinrich_kevin 0:288836a35837 3 // selber Entwickelt
heinrich_kevin 0:288836a35837 4
heinrich_kevin 0:288836a35837 5 /*
heinrich_kevin 0:288836a35837 6 Aufgabenstellung:
heinrich_kevin 0:288836a35837 7 Es soll eine alternativ Funktion entwickelt werden, die die PWM-Funktion fuer die Led's D10-D13 ersetzen kann
heinrich_kevin 0:288836a35837 8
heinrich_kevin 0:288836a35837 9 1)
heinrich_kevin 0:288836a35837 10 Schreiben der alternativ PWM-Funktion mit wait, wait_ms bzw. wait_us
heinrich_kevin 0:288836a35837 11 [void pwm_delay(unsigned int duty_cycle)];
heinrich_kevin 0:288836a35837 12 T = 250 µs, t = 1 µs, LED1 = D10
heinrich_kevin 0:288836a35837 13
heinrich_kevin 0:288836a35837 14 2)
heinrich_kevin 0:288836a35837 15 Schreibe ein Testprogramm, dass die Funktion pwm_delay() verwendet um die Helligkeit der LED ‚dreieckfoermig‘ zu steuern,
heinrich_kevin 0:288836a35837 16 so dass die Helligkeit von 0 auf 100 % ansteigt und schließlich wieder von 100 % auf 0 % absinkt.
heinrich_kevin 0:288836a35837 17
heinrich_kevin 0:288836a35837 18 3)
heinrich_kevin 0:288836a35837 19 Erweitere dein Programm so, dass alle vier direkt ansteuerbaren LEDs in der Helligkeit um ‚1/4‘-versetzt angesteuert werden.
heinrich_kevin 0:288836a35837 20 Also dass Led D10 den 'Dreieck-Zyklus' bei 0 %, Led D11 bei 25% , Led D12 bei 50 % usw. beginnt.
heinrich_kevin 0:288836a35837 21 */
heinrich_kevin 0:288836a35837 22
heinrich_kevin 0:288836a35837 23 #include "mbed.h"
heinrich_kevin 0:288836a35837 24
heinrich_kevin 0:288836a35837 25 DigitalOut ledd10(P1_8);
heinrich_kevin 0:288836a35837 26 DigitalOut ledd11(P1_9);
heinrich_kevin 0:288836a35837 27 DigitalOut ledd12(P1_10);
heinrich_kevin 0:288836a35837 28 DigitalOut ledd13(P1_11);
heinrich_kevin 0:288836a35837 29 // Begin pwm_delay
heinrich_kevin 0:288836a35837 30 // dutycycle: 0% bis 100 % gibt an, wie hell eine LED leuchtet
heinrich_kevin 0:288836a35837 31
heinrich_kevin 0:288836a35837 32 // Parameter sind die Verzoegerung und die LED's (da die Verzoegerung und LED's unterschiedlich
heinrich_kevin 0:288836a35837 33 // bei den Funktionsaufrufen sind)
heinrich_kevin 0:288836a35837 34 void pwm_delay(unsigned int duty_cycle, DigitalOut LED)
heinrich_kevin 0:288836a35837 35 {
heinrich_kevin 0:288836a35837 36 int pwm_time_index;
heinrich_kevin 0:288836a35837 37 // In 2 Perioden (0,5 ms) die LED ein- und ausschalten
heinrich_kevin 0:288836a35837 38 // Wird hier die Dauer zu lange gewaehlt, erkennt man ein flackern
heinrich_kevin 0:288836a35837 39 // Wird hier die Dauer zu kurz gewaehlt, erkennt man das unterschiedliche Aufleuchten der LED's nicht mehr
heinrich_kevin 0:288836a35837 40 for(pwm_time_index = 0; pwm_time_index<2; pwm_time_index++)
heinrich_kevin 0:288836a35837 41 {
heinrich_kevin 0:288836a35837 42 // Abfrage, damit der Extremwert (0) fuer das Einschalten der LED zu vernachlaessigen ist
heinrich_kevin 0:288836a35837 43 if(duty_cycle != 0)
heinrich_kevin 0:288836a35837 44 {
heinrich_kevin 0:288836a35837 45 LED = 1;
heinrich_kevin 0:288836a35837 46 wait_us(duty_cycle); // Zeit, wo die LED eingeschalten ist
heinrich_kevin 0:288836a35837 47 }
heinrich_kevin 0:288836a35837 48 // END IF
heinrich_kevin 0:288836a35837 49 // Abfrage, damit der Extremwert (250) fuer das Ausschalten der LED zu vernachlaessigen ist
heinrich_kevin 0:288836a35837 50 if(duty_cycle != 250)
heinrich_kevin 0:288836a35837 51 {
heinrich_kevin 0:288836a35837 52 LED = 0;
heinrich_kevin 0:288836a35837 53 wait_us(250-duty_cycle); // Zeit, wo die LED ausgeschalten ist
heinrich_kevin 0:288836a35837 54 }
heinrich_kevin 0:288836a35837 55 // END IF
heinrich_kevin 0:288836a35837 56 }
heinrich_kevin 0:288836a35837 57 // END for
heinrich_kevin 0:288836a35837 58
heinrich_kevin 0:288836a35837 59 }
heinrich_kevin 0:288836a35837 60
heinrich_kevin 0:288836a35837 61 // END pwm_delay
heinrich_kevin 0:288836a35837 62
heinrich_kevin 0:288836a35837 63 int main()
heinrich_kevin 0:288836a35837 64 {
heinrich_kevin 0:288836a35837 65 // Alle Leds ausschalten
heinrich_kevin 0:288836a35837 66 ledd10=ledd11=ledd12=ledd13 = 0;
heinrich_kevin 0:288836a35837 67 //Verzoegerungen definieren
heinrich_kevin 0:288836a35837 68 unsigned int delay1=0; // 0%
heinrich_kevin 0:288836a35837 69 unsigned int delay2=63; // 25%
heinrich_kevin 0:288836a35837 70 unsigned int delay3=125; // 50%
heinrich_kevin 0:288836a35837 71 unsigned int delay4=188; // 75%
heinrich_kevin 0:288836a35837 72
heinrich_kevin 0:288836a35837 73 // Vergleichsvariablen definieren
heinrich_kevin 0:288836a35837 74 int a; // Vergleich fuer die erste Led (D10)
heinrich_kevin 0:288836a35837 75 int b; // Vergleich fuer die zweite Led (D11)
heinrich_kevin 0:288836a35837 76 int c; // Vergleich fuer die dritte Led (D12)
heinrich_kevin 0:288836a35837 77 int d; // Vergleich fuer die vierte Led (D13)
heinrich_kevin 0:288836a35837 78
heinrich_kevin 0:288836a35837 79 a=b=c=d=251; //Vordefiniert fuer die IF-Anweisungen
heinrich_kevin 0:288836a35837 80 // Wenn die Variablen 251 sind, wird die LED immer heller
heinrich_kevin 0:288836a35837 81 // Wenn die Variablen 0 sind, wird die LED immer dunkler
heinrich_kevin 0:288836a35837 82 // Werden dann seperat umdefiniert, da die LED's unterschiedliche Helligkeiten haben
heinrich_kevin 0:288836a35837 83
heinrich_kevin 0:288836a35837 84 while(1)
heinrich_kevin 0:288836a35837 85 {
heinrich_kevin 0:288836a35837 86 //--------------LED D10---------------------\\
heinrich_kevin 0:288836a35837 87
heinrich_kevin 0:288836a35837 88 // Jeden einzelnen Wert von der Verzoegerung der ersten Led abfragen
heinrich_kevin 0:288836a35837 89 pwm_delay(delay1, ledd10); // Funktion pwm_delay wird geoeffnet
heinrich_kevin 0:288836a35837 90 // Und solange die Verzoegerung kleiner ist als die Vergleichsvariable
heinrich_kevin 0:288836a35837 91 // Soll die Verzoegerung vergroeßert werden
heinrich_kevin 0:288836a35837 92 if(delay1 < a)
heinrich_kevin 0:288836a35837 93 {
heinrich_kevin 0:288836a35837 94 // Die IF-Abfrage hilft, damit das Programm weiß, ob die Verzoegerung rauf-
heinrich_kevin 0:288836a35837 95 // oder runtergezaehlt wird. Dafuer wurden die Vergleichsvariablen definiert.
heinrich_kevin 0:288836a35837 96 if(delay1 == (a-1))
heinrich_kevin 0:288836a35837 97 {
heinrich_kevin 0:288836a35837 98 // Wenn a = 0 ist, weiß das Programm, dass jetzt die Verzoegerung hinuntergezaehlt wird
heinrich_kevin 0:288836a35837 99 // Wird ausgefuehrt, wenn die Verzoegerung 250 erreicht hat
heinrich_kevin 0:288836a35837 100 a=0;
heinrich_kevin 0:288836a35837 101 }
heinrich_kevin 0:288836a35837 102 // END IF
heinrich_kevin 0:288836a35837 103
heinrich_kevin 0:288836a35837 104 // Das ELSE hilft, damit die Verzoegerung nicht ueber den Wert 250 hinaufgezaehlt wird
heinrich_kevin 0:288836a35837 105 else
heinrich_kevin 0:288836a35837 106 delay1++;
heinrich_kevin 0:288836a35837 107 //END ELSE
heinrich_kevin 0:288836a35837 108 }
heinrich_kevin 0:288836a35837 109 // END IF
heinrich_kevin 0:288836a35837 110
heinrich_kevin 0:288836a35837 111 // Ist die Vergleichsvariable kleiner als die Verzoegerung, wird die Bedingung der IF-Abfrage nicht
heinrich_kevin 0:288836a35837 112 // erfuellt und das Programm fuehrt das ELSE aus
heinrich_kevin 0:288836a35837 113 // Jeden einzelnen Wert von der Verzoegerung der ersten Led abfragen
heinrich_kevin 0:288836a35837 114 // Und solange die Verzoegerung groeßer ist als die Vergleichsvariable
heinrich_kevin 0:288836a35837 115 // Soll die Verzoegerung verkleinert werden
heinrich_kevin 0:288836a35837 116 else
heinrich_kevin 0:288836a35837 117 {
heinrich_kevin 0:288836a35837 118 if(delay1 == a)
heinrich_kevin 0:288836a35837 119 {
heinrich_kevin 0:288836a35837 120 a=251;
heinrich_kevin 0:288836a35837 121 }
heinrich_kevin 0:288836a35837 122 // END IF
heinrich_kevin 0:288836a35837 123
heinrich_kevin 0:288836a35837 124 else
heinrich_kevin 0:288836a35837 125 delay1--;
heinrich_kevin 0:288836a35837 126 //END ELSE
heinrich_kevin 0:288836a35837 127 }
heinrich_kevin 0:288836a35837 128 //END ELSE
heinrich_kevin 0:288836a35837 129
heinrich_kevin 0:288836a35837 130 //--------------LED D11---------------------\\
heinrich_kevin 0:288836a35837 131
heinrich_kevin 0:288836a35837 132 // Genau den gleichen Effekt wie mit der ersten Led, nur dass sie mit 25% mehr Helligkeit startet
heinrich_kevin 0:288836a35837 133 // Sie unterscheiden sich nur durch die Vergleichsvariablen, um sie alle
heinrich_kevin 0:288836a35837 134 // einzeln zu schalten
heinrich_kevin 0:288836a35837 135 pwm_delay(delay2, ledd11); // Funktion pwm_delay wird geoeffnet
heinrich_kevin 0:288836a35837 136 if(delay2 < b)
heinrich_kevin 0:288836a35837 137 {
heinrich_kevin 0:288836a35837 138 if(delay2 == (b-1))
heinrich_kevin 0:288836a35837 139 {
heinrich_kevin 0:288836a35837 140 b=0;
heinrich_kevin 0:288836a35837 141 }
heinrich_kevin 0:288836a35837 142 // END IF
heinrich_kevin 0:288836a35837 143
heinrich_kevin 0:288836a35837 144 else
heinrich_kevin 0:288836a35837 145 delay2++;
heinrich_kevin 0:288836a35837 146 //END ELSE
heinrich_kevin 0:288836a35837 147 }
heinrich_kevin 0:288836a35837 148 // END IF
heinrich_kevin 0:288836a35837 149
heinrich_kevin 0:288836a35837 150 // Gleicher Effekt wie bei der Led D10
heinrich_kevin 0:288836a35837 151 // Sie unterscheiden sich nur durch die Vergleichsvariablen, um sie alle
heinrich_kevin 0:288836a35837 152 // einzeln zu schalten
heinrich_kevin 0:288836a35837 153 else
heinrich_kevin 0:288836a35837 154 {
heinrich_kevin 0:288836a35837 155 if(delay2 == b)
heinrich_kevin 0:288836a35837 156 {
heinrich_kevin 0:288836a35837 157 b=251;
heinrich_kevin 0:288836a35837 158 }
heinrich_kevin 0:288836a35837 159 else
heinrich_kevin 0:288836a35837 160 delay2--;
heinrich_kevin 0:288836a35837 161 //END ELSE
heinrich_kevin 0:288836a35837 162 }
heinrich_kevin 0:288836a35837 163 //END ELSE
heinrich_kevin 0:288836a35837 164
heinrich_kevin 0:288836a35837 165 //--------------LED D12---------------------\\
heinrich_kevin 0:288836a35837 166
heinrich_kevin 0:288836a35837 167 // Gleicher Effekt wie bei Led D10, nur dass sie mit 50% mehr Helligkeit startet
heinrich_kevin 0:288836a35837 168 // Sie unterscheiden sich nur durch die Vergleichsvariablen, um sie alle
heinrich_kevin 0:288836a35837 169 // einzeln zu schalten
heinrich_kevin 0:288836a35837 170 pwm_delay(delay3, ledd12); // Funktion pwm_delay wird geoeffnet
heinrich_kevin 0:288836a35837 171 if(delay3 < c)
heinrich_kevin 0:288836a35837 172 {
heinrich_kevin 0:288836a35837 173 if(delay3 == (c-1))
heinrich_kevin 0:288836a35837 174 {
heinrich_kevin 0:288836a35837 175 c=0;
heinrich_kevin 0:288836a35837 176 }
heinrich_kevin 0:288836a35837 177 // END IF
heinrich_kevin 0:288836a35837 178
heinrich_kevin 0:288836a35837 179 else
heinrich_kevin 0:288836a35837 180 delay3++;
heinrich_kevin 0:288836a35837 181 //END ELSE
heinrich_kevin 0:288836a35837 182 }
heinrich_kevin 0:288836a35837 183 // END IF
heinrich_kevin 0:288836a35837 184
heinrich_kevin 0:288836a35837 185 // Gleicher Effekt wie bei der Led D10
heinrich_kevin 0:288836a35837 186 // Sie unterscheiden sich nur durch die Vergleichsvariablen, um sie alle
heinrich_kevin 0:288836a35837 187 // einzeln zu schalten
heinrich_kevin 0:288836a35837 188 else
heinrich_kevin 0:288836a35837 189 {
heinrich_kevin 0:288836a35837 190 if(delay3 == c)
heinrich_kevin 0:288836a35837 191 {
heinrich_kevin 0:288836a35837 192 c=251;
heinrich_kevin 0:288836a35837 193 }
heinrich_kevin 0:288836a35837 194 // END IF
heinrich_kevin 0:288836a35837 195
heinrich_kevin 0:288836a35837 196 else
heinrich_kevin 0:288836a35837 197 delay3--;
heinrich_kevin 0:288836a35837 198 //END ELSE
heinrich_kevin 0:288836a35837 199 }
heinrich_kevin 0:288836a35837 200 //END ELSE
heinrich_kevin 0:288836a35837 201
heinrich_kevin 0:288836a35837 202 //--------------LED D13---------------------\\
heinrich_kevin 0:288836a35837 203
heinrich_kevin 0:288836a35837 204 // Gleicher Effekt wie bei der Led D10, nur dass sie mit 75% mehr Helligkeit startet
heinrich_kevin 0:288836a35837 205 // Sie unterscheiden sich nur durch die Vergleichsvariablen, um sie alle
heinrich_kevin 0:288836a35837 206 // einzeln zu schalten
heinrich_kevin 0:288836a35837 207 pwm_delay(delay4, ledd13); // Funktion pwm_delay wird geoeffnet
heinrich_kevin 0:288836a35837 208 if(delay4 < d)
heinrich_kevin 0:288836a35837 209 {
heinrich_kevin 0:288836a35837 210 if(delay4 == (d-1))
heinrich_kevin 0:288836a35837 211 {
heinrich_kevin 0:288836a35837 212 d=0;
heinrich_kevin 0:288836a35837 213 }
heinrich_kevin 0:288836a35837 214 // END IF
heinrich_kevin 0:288836a35837 215
heinrich_kevin 0:288836a35837 216 else
heinrich_kevin 0:288836a35837 217 delay4++;
heinrich_kevin 0:288836a35837 218 //END ELSE
heinrich_kevin 0:288836a35837 219 }
heinrich_kevin 0:288836a35837 220 // END IF
heinrich_kevin 0:288836a35837 221
heinrich_kevin 0:288836a35837 222 // Gleicher Effekt wie bei der Led D10
heinrich_kevin 0:288836a35837 223 // Sie unterscheiden sich nur durch die Vergleichsvariablen, um sie alle
heinrich_kevin 0:288836a35837 224 // einzeln zu schalten
heinrich_kevin 0:288836a35837 225 else
heinrich_kevin 0:288836a35837 226 {
heinrich_kevin 0:288836a35837 227 if(delay4 == d)
heinrich_kevin 0:288836a35837 228 {
heinrich_kevin 0:288836a35837 229 d=251;
heinrich_kevin 0:288836a35837 230 }
heinrich_kevin 0:288836a35837 231 // END IF
heinrich_kevin 0:288836a35837 232
heinrich_kevin 0:288836a35837 233 else
heinrich_kevin 0:288836a35837 234 delay4--;
heinrich_kevin 0:288836a35837 235 //END ELSE
heinrich_kevin 0:288836a35837 236 }
heinrich_kevin 0:288836a35837 237 //END ELSE
heinrich_kevin 0:288836a35837 238 }
heinrich_kevin 0:288836a35837 239 }