Moin Leute...
Ich habe ein Timingproblem was LEDs dimmen angeht.
momentaner Stand:
1. weisse und blaue LEDs sollen abwechselnd gedimmt werden
2. LEDs werden mittels PWM gedimmt (OC1A und OC1B)
3. Timer0 im Fast-PWM Mode (zählt bis 1023, Vergleichsregister OCR1A u.
OCR1B)
Wenn ich die beiden LEDs mit gleichen Werten in den Vergleichsregistern
hin und herdimmen lasse dann dimmen die LEDs wie gewünscht, sprich:
WS BL
0% 100%
20% 80%
40% 60%
50% 50%
60% 40%
70% 30%
80% 20%
90% 10%
100% 0%
Da die LED von der Leuchtstärke alldings unterschiedlich sind, ich sie
also in der Helligkeit angleichen möchte, Sieht der Dimmvorgang nicht
mehr so schön aus da die beiden Vergleichsregister mit unterschiedlichen
Werten geladen sind. Angenommen die blauen haben einen Soll-Wert von 20%
und die weissen von 40%. Dann sollen die blauen von 0% bis 20%
hochgedimmt werden, während die blauen von 40% nach 0% gedimmt werden.
Hierbei müssten ja die blauen langsamer dimmen als die weissen damit ich
einen flüssigen Übergang erhalte.
Mein Problem ist jetzt wie ich das realisieren soll...
Die Funktion muss auch flexibel sein weil wie schon gesagt, die maximale
Helligkeit ist ja abhängig von den eingesetzten LEDs. Könnt ihr mir da
ein wenig auf die Sprünge helfen ?
Hier noch meine derzeitige Funktion zum dimmen:
1 | .
|
2 | .
|
3 | .
|
4 | #define PWM_WS OCR1A //Pin Ausgang
|
5 | #define PWM_BL OCR1B
|
6 | volatile uint16_t intTOP_WS;
|
7 | volatile uint16_t intTOP_BL;
|
8 |
|
9 | .
|
10 | .
|
11 | .
|
12 | void flush(void)
|
13 | {
|
14 | for (i = 0; i < intTOP_WS; i++)
|
15 | {
|
16 | PWM_WS++;
|
17 | PWM_BL--;
|
18 | _delay_ms(6);
|
19 | }
|
20 |
|
21 | for (i = 0; i < intTOP_BL; i++)
|
22 | {
|
23 | PWM_WS--;
|
24 | PWM_BL++;
|
25 | _delay_ms(6);
|
26 | }
|
27 | }
|
Vielen Dank schonmal für die Bemühungen.