OCR2 übernimmt Wert nicht!

Gast #1240211
Lesenswert?
• ▲
▼
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
}
Gast #1240264
Lesenswert?
• ▲
▼
Hm das versteh nicht, dann werden die Änderungen jeweils erst beim 
nächsten Interrupt übernommen, funktionieren sollte es eigentlich 
trotzdem!? Ich  hab schon an der Reihenfolge geändert, aber das Resultat 
bleibt immer dasselbe, er übernimmt für die HIGHPhase nicht das 
OCR2......
#1240275
Lesenswert?
• ▲
▼
Toellner wrote:
> Hm das versteh nicht, dann werden die Änderungen jeweils erst beim
> nächsten Interrupt übernommen, funktionieren sollte es eigentlich
> trotzdem!?

Nein, die Änderungen laufen nicht synchron. TCCR2 wird sofort geändert, 
der neue OCR-Wert wird aber erst beim nächsten Überlauf übernommen.

Ich würde die Änderung der Output-Konfiguration eh ganz weglassen, und 
den  High-Puls über einen Low-Puls mit der inversen Länge machen, also:
OCR = 255 - 77;
Gast #1240285
Lesenswert?
• ▲
▼
Danke Stefan,

Danke Dir funktioniert es jetzt einwandfrei und ich kann zufrieden von 
der uni heim :)

Die Idee das ganze invertierend zu machen und einfach 255-xx einzugeben 
ist auch viel eleganter!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren