Hallo,
Ich experimentiere gerade mit dem dimmen von LEDs. Leider ist das ganze
vor allem bei kurzen High Phasen des PWM Signals sehr unruhig und
flackert. Mir ist nur nicht klar warum, da ich das ganze über den Timer2
realisiere, der eine höhere Prio als die Interrupts von Timer1 und
Timer0 haben, sollte das saubere Schalten des PWM Signals höhere
Priorität haben.
Ich hab das ganze über einen Timer2 Overflow Interrupt und einen Timer2
Compare Match am ATMEGA 168 realisiert:
1 | TCCR2B |= (1<<CS22); // Prescale Takt / 128 (ergibt Periode 11,574us)
|
2 | TCCR2B &= ~(1<<CS21); // Ergibt 2,963ms PWM Takt
|
3 | TCCR2B |= (1<<CS20);
|
4 | TIMSK2 |= (1<<OCIE2A); // Compare Match A INTERRUPT
|
5 | TIMSK2 |= (1<<TOIE2); // Timer2 Overflow INTERRUPT
|
6 |
|
7 | OCR2A = 128;
|
8 |
|
9 | ISR(TIMER2_COMPA_vect)
|
10 | {
|
11 | if(channelJobArray[0] == 22)
|
12 | {
|
13 | //Lösche LED
|
14 | PORT_OUT1 &= ~(1<<OUT1);
|
15 | }
|
16 | }
|
17 |
|
18 | ISR(TIMER2_OVF_vect)
|
19 | {
|
20 | PORT_OUT1 |= (1<<OUT1);
|
21 |
|
22 | TCNT2 = 0;
|
23 | }
|
Hat jemand eine Idee wo der Fehler liegt?