Hallo!
Ich habe ein Problem mit meiner Software-PWM-Lösung. Grundsätzlich
funktioniert alles einwandfrei - ich erzeuge damit 3 voneinander
unabhängige PWM-Signale, die direkt einen LED-Treiber ansteuern. Als
Auflösung habe ich 8bit bei einer Frequenz von ca. 305Hz. Der uC
empfängt nebenbei DALI-Signale und wertet diese aus. uc ist ein
ATMega328p.
Nun zu meinem Problem: Wenn ich ein niedriges Dimm-Level eingestellt
habe (ca. 10%) und ich viel Daten von der DALI-Schnittstelle
hintereinander bekommen, dann flackern die LEDs ein bisschen. Es ist
nicht so viel, aber genug, um als störend empfunden zu werden. Was
könnte das sein? Die PWM-Erzeugung läuft ganz in einer Timer-Routine ab
- sollte also in gleichmäßigen Abständen ausgeführt werden. Aber
irgendetwas scheint da zu stören.
Mir ist klar, dass ihr mir keine Ferndiagnose stellen könnt, aber
vielleicht hat von euch irgendwer Erfahrung damit und hatte schon so ein
Problem.
Vielen Dank!
mfg Andy
PS: Hier noch meine Soft-PWM - vielleicht hilfts:
1 | SIGNAL(TIMER0_OVF_vect)
|
2 | {
|
3 | static uint8_t pwm,channelTmp[3];
|
4 | |
5 | //PWM-Signale erzeugen
|
6 | pwm -= 1;
|
7 | if(pwm == 0)
|
8 | {
|
9 | LED_PORTD &= ~(0x60);
|
10 | LED_PORTB &= ~(0x08);
|
11 | pwm = PWM_RESOLUTION;
|
12 | for(uint8_t i=0;i<3;i++)
|
13 | channelTmp[i] = channel[i];
|
14 | }
|
15 | |
16 | // CHANNEL 1
|
17 | if(pwm <= channelTmp[0])
|
18 | sbi(LED_PORTD, CHANNEL1);
|
19 | |
20 | // CHANNEL 2
|
21 | if(pwm <= channelTmp[1])
|
22 | sbi(LED_PORTD, CHANNEL2);
|
23 | |
24 | // CHANNEL 3
|
25 | if(pwm <= channelTmp[2])
|
26 | sbi(LED_PORTB, CHANNEL3);
|
27 | }
|