Hallo zusammen, Ich programmiere gerade eine PWM und muss feststellen dass das Schreiben in OCR2 nicht richtig funktioniert. Mein Timer2 macht in einem Durchlauf den PWM HIGH Pegel und wird dann so eingestellt, dass die nächsten 8 Durchläufe das Signal LOW ist. Dann geht es wieder von vorne los. Das Problem ist dass das OCR2 nicht funktioniert wie lange der HIGH Pegel im ersten Durchlauf ist soll im OCR2 eingestellt werden ABER der HIGH Pegel ist immer so lange wie der Zähler selber: 255 (also maximal). Während der Pausenzeit ist das OCR2 auch 255 deshalb mein Verdacht, dass das OCR den neuen Wert 77 irgendwie nicht annimmt... WARUM???
1 | ISR(TIMER2_OVF_vect) |
2 | {
|
3 | if(pwmPeriodeCounter == 0) |
4 | {
|
5 | TCCR2 |= (1<<COM20); // Polung der PWM: INvertierend für const. Low Pegel |
6 | OCR2 = 255; // Für dauerhaft Low Pegel (-->Pause bis 20ms) |
7 | pwmPeriodeCounter += 1; |
8 | }
|
9 | |
10 | |
11 | if((pwmPeriodeCounter > 0) && (pwmPeriodeCounter < 9)) |
12 | {
|
13 | pwmPeriodeCounter += 1; |
14 | }
|
15 | |
16 | |
17 | if(pwmPeriodeCounter == 9) |
18 | {
|
19 | OCR2 = 77; // Übernahme der gewünschten Signallänge 0,7ms ... 2,3ms |
20 | TCCR2 &= ~(1<<COM20); // Polung der PWM: NICHT - invertierend für Signalerzeugung |
21 | pwmPeriodeCounter = 0; // Von vorne beginnen ... |
22 | }
|
23 | |
24 | |
25 | }
|